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

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

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

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

вчера в 15:30    529    capitan    0    

6

Тестовый кластер 1С на UBUNTU 23.10

Linux Платформа 1С v8.3 Россия Абонемент ($m)

Описан процесс создания простого кластера 1С в связке: отдельный сервер UBUNTU версия 23.10 + сервер 1С версия 8.3.23.1997 + PostgreSQL версия 15. Автор не претендует на новизну решения, но пошаговая упорядоченная инструкция позволяет стандартными методами быстро и просто создать кластер 1С на серверах Linux.

1 стартмани

08.02.2024    634    janerev1956    6    

13

В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)

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

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет установка соединения по HTTPS и архивирование. Это финальные штрихи в настройке рабочего места. Вот и оно (продолжение) или они (штрихи), прошу под кат...

29.01.2024    597    capitan    5    

5

Определение длительности аудиофайла (Linux)

Linux Разное Платформа 1С v8.3 Абонемент ($m)

Пример обработки для определения длительности аудиофайла в среде Linux.

1 стартмани

12.01.2024    315    0    ErAK    2    

2

Три пингвина под окном... Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

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

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет обзор рабочих мест на других отечественных ОС. Вот и оно (продолжение) или он (обзор), прошу под кат...

25.12.2023    1785    capitan    6    

14

Интерпретатор команд (только Linux)

Linux Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Интерпретатор команд для Linux, позволяет выполнять команды в среде Linux под правами пользователя сервера 1С. Полезно, когда необходимо выполнить команду на сервере, а доступа к командной строке нет.

1 стартмани

11.12.2023    432    2    Svb84    0    

4

Рестарт сервера 1С с очисткой сеансовых данных на Linux посредством systemd

Linux Платформа 1С v8.3 Абонемент ($m)

Сказ о том, как сделать "кошерный" перезапуск сервера 1С, работающего на платформе GNU/Linux, с очисткой сеансовых данных посредством systemd

1 стартмани

12.09.2023    3663    0    Sloth    5    

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

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