Автоматическое монтирование целевых папок по ключу при изменении местоположения источника (раздела диска)
16.11.23
Вариант динамического автоматического монтирование целевых папок по ключу папки при изменении местоположения источника (раздела диска).
При загрузке системы разделы дисков монтируются в определенные папки.
Например: /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
Если смог кому-то помочь, буду рад.