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

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 Системный администратор 1С:Предприятие 8 Бесплатно (free)

Скрипт bash для корректного обновления серверной части платформы 1С Предприятия (сохраняет и восстанавливает настройки служб, даже если их несколько, изменяет версию платформы во всех веб-публикациях и делает еще много полезных мелочей не включенных в штатный инсталлятор) Иными словами "обновление под ключ" или "нажал и забыл"

21.10.2026    438    capitan    0    

5

DevOps и автоматизация разработки Linux Разработчик 1С 8.3 Абонемент ($m)

Исследуем, почему COPY и последующий rm оставляют установщик в слоях Docker. На Docker Engine 29.8.0 сравнила три сборки с фиктивным дистрибутивом: bind mount и отдельный завершающий этап исключили его слой. В статье — первичные размеры и границы проверки лицензирования 1С; в архиве — воспроизводитель и анализатор inspect/history.

1 стартмани

12.10.2026    404    Ninel_S    0    

1

Linux Разработчик 1С 8.3 Россия Бесплатно (free)

Пошагово показываю, как на сервере 1С 8.3 под Linux получить PNG QR через HTTPСоединение без COM, сохранить ответ во временный файл или двоичные данные и вывести картинку на форме через временное хранилище. Разбираю замену XMLHTTP, кодирование текста, HTTPS и типичные ошибки «сервер недоступен».

06.10.2026    432    rusla95oreh    0    

1

Linux Системный администратор Разработчик 1С 8.3 1С 8.5 Бесплатно (free)

Как запускать клиентские приложения 1С:Предприятие 8.3 на хосте Linux (KDE Plasma, Wayland или другое окружение) в rootless podman-контейнере, ничего не устанавливая в систему хоста.

05.10.2026    541    speshuric    0    

4

Инструменты администратора БД Администрирование СУБД Linux Системный администратор Разработчик Руководитель проекта Стажер 1С 8.3 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Предприятие 8. Транспортная логистика, экспедирование и управление автотранспортом КОРП 1С:КА Беларусь Россия Казахстан Абонемент ($m)

Пятый выпуск нашего открытого инженерного сериала по построению отказоустойчивой инфраструктуры 1С на Linux! В этой части мы спускаемся на уровень операционной системы и выполняем обещание, данное в Roadmap предыдущей статьи - разбираем физику подсистемы виртуальной памяти Linux, ликвидируем скрытые I/O-тормоза и публикуем новый прикладной инструмент для системных администраторов и DBA.

10 стартмани

16.09.2026    1382    Ninel_S    0    

2

DevOps и автоматизация разработки Linux HighLoad оптимизация Групповая разработка (Git, хранилище) Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Беларусь Россия Казахстан Абонемент ($m)

Системный анализ архитектурных границ масштабирования учетных систем «1С:Предприятие 8.3» под управлением PostgreSQL в ОС Linux. Формулирование инженерной методологии сквозного проекта «Торговый контур», определение измеримых целевых показателей (p95, MTTR, APDEX) и стратегии поэтапной модернизации эксплуатационного контура без остановки промышленных учетных процессов.

1 стартмани

07.09.2026    1689    Ninel_S    10    

2

Linux Групповая разработка (Git, хранилище) Администрирование СУБД Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Декларативный pipeline в GitHub Actions, тонкости лицензирования в Docker (--net=host), изоляция RUN_ID и интеграция со сборочным конвейером SRE-Suite-for-1C-platform. Вторая часть практического руководства (https://infostart.ru/public/2779597): от первого коммита до детерминированного синтаксического гейта на headless-раннере Linux

1 стартмани

03.09.2026    2095    Ninel_S    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1146 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
Для отправки сообщения требуется регистрация/авторизация