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