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

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 автоматика динамическое монтирование целевой папки разделы диска

См. также

Обновление 1С Linux Системный администратор Программист Бесплатно (free)

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    217    California_Dreaming    2    

4

Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

В очередной раз решая проблему с доступом к файлу программной лицензии - решил сделать памятку на будущее для себя и коллег.

10.03.2025    860    unichkin    10    

11

Linux Рефакторинг и качество кода Программист Платформа 1С v8.3 Бесплатно (free)

В третьей статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим подходы к рефакторингу платформеннозависимого кода

11.02.2025    1065    it-expertise    0    

3

Рефакторинг и качество кода Linux Программист Платформа 1С v8.3 Бесплатно (free)

Во второй статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, поговорим об особенностях анализа конфигурации 1С на наличие платформеннозависимого кода.

31.01.2025    1731    it-expertise    1    

8

Linux Системный администратор Платформа 1С v8.3 Россия Бесплатно (free)

Как устроить зависание системы (Ubuntu) из 1С (толстый клиент) с помощью буфера обмена и что с этим делать.

29.01.2025    1151    Klok22    4    

14

Linux Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Задача разработки перед выполнением проходит пять стадий принятия: отрицание, гнев, поиск в интернете, депрессия и чтение документации. Некоторым темы, затронутые в публикации, будут знакомы, некоторым покажутся банальными, но, надеюсь, некоторым они сэкономят немного времени и нервов. По сути это шпаргалка самому себе по тем вещам, которые потребовали более часа поисков.

23.12.2024    2646    capitan    7    

15

Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Александр Кириллов, руководитель группы разработки компании «ИТ-Экспертиза», на конференции INFOSTART TECH EVENT 2024 выступил с докладом на тему «Как найти и устранить платформеннозависимый код менее, чем за 5 лет». Материал получился интересным и объемным, поэтому мы решили сделать на базе выступления Александра цикл статей. В первой части начнем с особенностей работы информационных систем 1С под управлением ОС Linux.

06.12.2024    2227    it-expertise    8    

24

Linux Системный администратор Программист Бесплатно (free)

Проект перевода 10+ систем 1С на 2000+ пользователей в Авито завершен успешно, преодолев технические трудности и «черных лебедей» в виде неопределенности, демотивации, потерь производительности и нереалистичных требований руководства. Расскажем об опыте проекта, в котором было «очень страшно», но в итоге всё получилось.

29.11.2024    2059    kirill.skoromykin    1    

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

можете прокомментировать?
2. NeSPEC 52 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 16.11.23 17:07 Сейчас в теме
я бы добавил:
- логирование
- обработку ошибок при mount
- проверку наличие файла id_cat
Оставьте свое сообщение