Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

aws и монтирование волума инит скриптом

8 views
Skip to first unread message

Sergey Zabolotny

unread,
Dec 12, 2019, 5:45:01 AM12/12/19
to
Hello *All.*

есть инстанс развернутый из cloudformation темплейта с установленой убунтой
18.04.1. инит скрипт проверяет наличие дополнительных волумов подключеннх в
систему. есть таковые нашлись, проверяется наличие партиций на диске, их
файловые системы, метки томов.
если диск не размечен и партиций у нас нет мы их создаем, форматируем во что
нам надо и монтируем. если нашли существующую файловую систему просто монтируем
куда надо.

так вот понадобилось поднять версию убунты до 18.04.3 и инит скрипт в этом
случае перестал видеть партиции на подключаемом волуме. в инит скрипте который
работает в 18.04.1 использовался банальный partprobe, который заставлял систему
перечитать список дисков и всю инфу о том, что на нем есть. после этого
запуском lsblk -p -n -P -o NAME,TYPE,FSTYPE,LABEL,MOUNTPOINT ${DATA_DISK} можно
было получить сразу всю информацию о диске, его партициях, файловых системах,
метках томов.

в 18.04.3 после партпроба я вижу только диск, никаких партиций и тем более
файловых систем.

заменил партпроб на hdparm -z ${DEVICE} >>/var/log/device.log 2>&1 || true и
чудо случилось, но только наполовину. теперь я вижу списки партиций, но все
равно не вижу какие там файловые системы и метки.

для того, чтоб получить файловую систему и метку тома перепробовал кучу
вариантов и так не остановился на каком-то одном рабочем т.к. так и не понял
какая именно команда надежно заставляет систему перечитать инфу о партициях.

добавил пачку команд:

hdparm -z ${DEVICE} >>/var/log/device.log 2>&1 || true
file -s ${DEVICE} >>/var/log/device.log 2>&1 || true
partprobe ${DEVICE} >>/var/log/device.log 2>&1 || true
blockdev --rereadpt -v ${DEVICE} >>/var/log/device.log 2>&1 || true
fdisk -l ${DEVICE} >>/var/log/device.log 2>&1 || true

которые запускаются каждый раз при попытке получить данные о диске или
партиции. в моем случае в качестве ${DEVICE} передается сначала имя диска,
читается результат, из результата вытаскивается партишн нэйм и повторно
вызывается эта пачка команд, но уже в качестве девайса подставляется имя
партиции.

вот кусок дебаг лога из 18.04.3, который показывает что возвращается в качестве
результата и после чего:
1 проход - ищем партицию, в качестве параметра передается имя устройства

+ DEVICE=/dev/nvme1n1
+ hdparm -z /dev/nvme1n1
+ file -s /dev/nvme1n1
+ partprobe /dev/nvme1n1
+ blockdev --rereadpt -v /dev/nvme1n1
+ fdisk -l /dev/nvme1n1
++ lsblk -p -n -P -o NAME,TYPE,FSTYPE,LABEL,MOUNTPOINT /dev/nvme1n1
++ sed 's/ /;/g'
++ grep part
+ result='NAME="/dev/nvme1n1p1";TYPE="part";FSTYPE="";LABEL="";MOUNTPOINT=""'

вернуло список партиций, но не вернуло типы файловых систем и метки томов. в
18.04.1 в этом месте я сразу получал все что мне надо.

2 проход - берем данные фстайп, метки томов по найденой партиции в проходе 1

+ DEVICE=/dev/nvme1n1p1
+ hdparm -z /dev/nvme1n1p1
+ true
+ file -s /dev/nvme1n1p1
+ partprobe /dev/nvme1n1p1
+ blockdev --rereadpt -v /dev/nvme1n1p1
+ true
+ fdisk -l /dev/nvme1n1p1
++ lsblk -p -n -P -o NAME,TYPE,FSTYPE,LABEL,MOUNTPOINT /dev/nvme1n1p1
++ sed 's/ /;/g'
++ grep part
+
result='NAME="/dev/nvme1n1p1";TYPE="part";FSTYPE="ext4";LABEL="data-volume";MOUNTPOINT=""'

так вот собственно 2 вопроса:
1. какого оно стало вести себя в 18.04.3 не так как в версии 18.04.1?
2. какой есть надежный способ заставить систему видеть все что есть на дисках
не используя целуя пачку команд?

что самое интересное, если не трогать волум при инициализации системы, а зайти
в нее после старта и ручками сказать lsblk -p -n -P -o
NAME,TYPE,FSTYPE,LABEL,MOUNTPOINT /dev/nvme1n1

то я вижу все данные как и в версии убунты 18.04.1

wtf и что с этим делать?

0 new messages