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

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

См. также

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

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

23.12.2024    2136    capitan    7    

15

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

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

06.12.2024    1454    it-expertise    6    

21

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

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

29.11.2024    1566    kirill.skoromykin    1    

7

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

При многолетней эксплуатации 1С на Windows и MS SQL в базе накапливаются не самые оптимальные запросы, COM-объекты и скрипты, зависящие от ОС. Из-за этого процесс перехода на PostgreSQL и переноса сервера 1С на Linux неизбежно осложняется длительным исправлением кода и оптимизацией запросов. Расскажем о том, как с задачей такого рефакторинга справились в компании Avito.

13.11.2024    6197    klimat12    17    

28

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1657    capitan    0    

0

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

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    2221    capitan    5    

13

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

1C > Postgres > (Linux) > мы (=проблемы в 2024). Информация будет полезна начинающим 1С программистам (и сисадминам). Без ИТС. Часть 1.

01.07.2024    6654    AlOkt    30    

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