Автоматическое монтирование целевых папок по ключу при изменении местоположения источника (раздела диска)

16.11.23

Администрирование - Linux

Вариант динамического автоматического монтирование целевых папок по ключу папки при изменении местоположения источника (раздела диска).
При загрузке системы разделы дисков монтируются в определенные папки.
Например:    /dev/sdd1 -> /work_2 .
Но в какой-то момент мы добавили новый диск, который "вклинился" между /dev/sdc и /dev/sdd. И наш /dev/sdd1 стал /dev/sde1 .
Есть и другие причины, почему меняются наименование разделов.
Самая неприятная (на мой взгляд) связана с тем, что разделы некоторых дисков (например, nvme) после очередной перезагрузки системы могут измениться и без нашего участия.
И если монтирование разделов других дисков в конкретные папки можно сделать по их UUID , то здесь так не получится.
 
Один из вариантов, как избежать этой ситуации предлагается следующий:
 
0. Создается некая буферная папка (например /buf_cat)
1. В каждой целевой папке формируется файл - ключ
(например id_cat) , где содержимое- это наименование этой папки (work_2).
 
И при загрузке системы запускается скрипт следующего содержания:
 
  #-----------------------
  #Автомонтирование РАЗДЕЛОВ
  #-----------------------
  # Удаляем буферный файл "vols"            
  rm vols                                                
  # Выводим все, что дает "fdisk -l"  (содержащие "/dev" ) в файл "disks"
  fdisk -l | grep "/dev" > disks                         
  # Формируем массив из файла "my_array < disks"
  readarray my_array < disks                
  # Перебираем весь массив "my_array"
  for elem in ${my_array[@]}                             
    do
      #Выводим (обработанные строки только до знака ":") в файл "vols"
      echo $elem | grep "/dev" | grep -o '^[^:]*' >> vols
    done
  # Формируем массив имен дисков и разделов из файла "my_array < vols"
  readarray my_array < vols                           
  # Перебираем весь массив  
  for disk_cat in ${my_array[@]}                         
    do
    #размонтирум ( на всякий случай ) $disk_cat
    #umount  $disk_cat
 
    #монтирум $disk_cat в буферную папку /buf_cat
    mount $disk_cat /buf_cat
    #анализируем содержимое ключевого файла id_cat
    readarray id_cat < /buf_cat/id_cat
    #размонтирум  буферную папку /buf_cat для следующего анализа
    umount  /buf_cat
    #монтирум $disk_cat в нужную рабочую папку
    mount $disk_cat /${id_cat[0]}
  done
 
В этом примере все целевые папки находятся в корне.
В принципе могут находиться где угодно с правильным содержанием ключевого файла.
Скрипт включается в автозапуск и запускается ( естественно ) под пользователем "root".
 
Как вариант можно сначала проверить: "А может уже все смонтировано ?"
В этом случае можно сформировать файл со списком целевых папок, например ( cats.list )
и сначала проанализировать его:
 
# Формируем массив  из файла "my_cats < cats.list"
readarray my_cats < cats.list
 
# Если init_start останется 0, то ничего делать не надо
init_start=0
# Перебираем весь массив "my_cats"
for elem in ${my_cats[@]}                             
do
    if test -f /$elem/id_cat ;
    then
        #echo "Нашли"
        echo $elem > ttt
        cat /$elem/id_cat > rrr
        if cmp ttt rrr;
           then
            #echo $elem
            #echo "Наш"
          else
            #echo $elem
            #echo "Не наш"
            init_start=1
        fi
    else
       #echo $elem
       #echo "Не нашли"
       init_start=1
     fi
done
 
echo "*********"
echo $init_start
echo "*********"
 
if [[($init_start -eq 1)]]
  then
    echo "Требуется монтирование"
    #-----------------------
    #Автомонтирование РАЗДЕЛОВ
    #-----------------------
   
    ********  
  else
   echo "Монтирование НЕ требуется ."
fi
 
Если смог кому-то помочь, буду рад.

Вступайте в нашу телеграмм-группу Инфостарт

linux автоматика динамическое монтирование целевой папки разделы диска

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Администрирование СУБД Linux Системный администратор Программист Россия Бесплатно (free)

30 декабря, пик предновогодних продаж, и тут — полная катастрофа. Сервер с 1С в единственной торговой точке пал жертвой вируса-шифровальщика. Бизнес встал, выручка — ноль, резервных копий нет. Знакомая ситуация? Но вместо того, чтобы просто переустановить «убитую» Windows, мы пошли другим путем. В свежей статье я честно рассказываю: почему сервер на «дешевых комплектующих» — это бомба замедленного действия. Как вирус проник в систему, если кассир работает исправно? Зачем микробизнесу смотреть в сторону бесплатного Linux (и при чем тут лицензии на Windows Server + MS SQL). Реально ли подружить 1С, торговое оборудование и «неродной» интерфейс? Спойлер: Сервер ожил, базу восстановили (да, это было больно), а клиент теперь спит спокойно.

20.07.2026    862    maxber    6    

3

Linux Технологический журнал 1С:Предприятие 8 Бесплатно (free)

Графическая утилита, сделанная по принципу Microsoft SQL Server Profiler, но для СУБД PostgreSQL Позволяет легко настраивать сбор планов запросов как средствами PostgreSQL, так и технологическим журналом 1С Предприятие с их последующей визуализацией. Простая, понятная для пользователей утилита, не требующая прав администратора для визуализации, и требующая их для настройки. Скомпилированная в исполняемый файл.

20.05.2026    2781    capitan    4    

10

Linux Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Графическое приложение на базе PyQt6, которое предоставляет простой интерфейс для очистки локального кэша баз данных 1С Предприятие для ОС Linux. Простая, понятная для пользователей утилита, не требующая прав администратора Скомпилированная в исполняемый файл

06.04.2026    1885    capitan    0    

2

Архивирование (backup) Linux Системный администратор Программист Россия Абонемент ($m)

Сценарий предназначен для восстановления баз данных PostgreSQL в Linux под учетной записью postgres из резервных копий, сформированных программой pg_dump в формате plain или custom.

1 стартмани

20.02.2026    1040    0    Магнат    2    

2

Архивирование (backup) Администрирование СУБД Linux Системный администратор Программист 1С:Предприятие 8 Россия Абонемент ($m)

Сценарий предназначен для избирательного создания ротационных резервных копий баз данных по дисциплине 2-1 (2 копии, одна на другом физическом диске, другая на компьютере вне серверной комнаты) в форматах custom и/или plain кластера PostgreSQL, а также глобальных свойств кластера: пользователи, пароли и т.д.

2 стартмани

19.02.2026    1174    0    Магнат    1    

3

Разработка внешних компонент Администрирование СУБД Linux Обновление 1С Системный администратор Программист Россия Абонемент ($m)

Cценарий python предназначен для автоматизации процессов установки СУБД PostgreSQL, клиентского приложения и сервера 1С, службы RAS а также  и деинсталляции последних в cреде операционной системы Astra Linux. Полный режим работы выполняет деинсталляцию предшествующей версии 1С и установку последующей.  Возможны также только деинсталляция или только установка. Сценарий тестирован в среде ОС Astra Linux SE v.1.7.x,v.1.8.x  

2 стартмани

03.02.2026    1586    4    Магнат    1    

2

Информационная безопасность Архивирование (backup) Linux Администрирование СУБД Системный администратор Программист Россия Абонемент ($m)

В публикации рассматриваются не только принципы проектирования IT инфраструктуры малого и среднего предприятия в фокусе последних требований законодательства о защите ПДн, но и дается пошаговая инструкция по установке и настройке полного пакета ПО на основе использования Российских компонентов. Данная структура программ полностью покрывает все потребности организации по использованию, архивированию и защите IT инфраструктуры. Практическое применение протестировано на различных предприятиях в течении 5 лет. Все программы протестированы на Astra Linux 1.8 Пример формы описания процессов установки пункт 20.9

10 стартмани

29.01.2026    1851    9    Магнат    16    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1104 16.11.23 11:47 Сейчас в теме
И если монтирование разделов других дисков в конкретные папки можно сделать по их UUID , то здесь так не получится.

можете прокомментировать?
2. NeSPEC 60 16.11.23 13:57 Сейчас в теме
Добрый день.
У меня ( может конкретно только у меня ):

root@pro:~# blkid

/dev/sdb1: UUID="c8452570-
/dev/sdb2: UUID="3d1e5771-
/dev/sdb3: UUID="43fac099-
/dev/sdd1: UUID="c8452570-
/dev/sdd2: UUID="3d1e5771-
/dev/sdd3: UUID="43fac099-
/dev/md1: LABEL="pro_start" UUID="956f514b-40fa-424a-912c-1028eb28ec26" TYPE="ext4"
/dev/md0: LABEL="pro_boot" UUID="6e98a72d-3330-4fbe-94dc-81a42f1fc8eb" TYPE="ext2"

root@pro:~# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1,8T 0 disk
sdb 8:16 0 232,9G 0 disk
├─sdb1 8:17 0 500M 0 part
│ └─md0 9:0 0 499M 0 raid1 /boot
├─sdb2 8:18 0 32G 0 part
│ └─md1 9:1 0 32G 0 raid1 /
└─sdb3 8:19 0 191,1G 0 part
└─md127 9:127 0 191G 0 raid1
sdc 8:32 0 894,3G 0 disk
sdd 8:48 0 223,6G 0 disk
├─sdd1 8:49 0 500M 0 part
│ └─md0 9:0 0 499M 0 raid1 /boot
├─sdd2 8:50 0 32G 0 part
│ └─md1 9:1 0 32G 0 raid1 /
└─sdd3 8:51 0 191,1G 0 part
└─md127 9:127 0 191G 0 raid1

nvme1n1 259:0 0 931,5G 0 disk
nvme0n1 259:1 0 465,8G 0 disk

У меня выделенные диски при перезагрузки компьютера могут поменяться местами.
Т.е. nvme1n1 был 931,5G , а стал 465,8G, и nvme0n1 соответственно стал 931,5G
И если что-то нужно привязать именно к диску ( а не разделу ), возникает путаница.
3. darkinitr0 4 16.11.23 17:07 Сейчас в теме
я бы добавил:
- логирование
- обработку ошибок при mount
- проверку наличие файла id_cat
Для отправки сообщения требуется регистрация/авторизация