Sergey Zabolotny
unread,Dec 12, 2019, 5:45:01 AM12/12/19You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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 и что с этим делать?