Покажу фрагмент кода:
run_hook() {
local os_root="$(find_root)"
# echo $os_root
# IFS='=' read -r root_partname root_partid <<< "$os_root"
local opal_drives="$(list_opal_drives)" drive passphrase
until [ "$(findfs "$os_root" 2> /dev/null)" ]; do
printf "Enter Passphrase to Unlock OPAL Drives: "
read -s passphrase
echo
for drive in $(list_opal_drives); do
if check_opal_locked "$drive"; then
unlock_opal_drive "$drive" "$passphrase"
fi
done
done
}
В find_root я парсю параметры ядра, извлекаю root
. В моем случае это PARTUUID=74ed86c1-539b-d14d-b7d4-38681f4227fb
.
Разблокировка диска выглядит так:
unlock_opal_drive() {
sedutil-cli --setLockingRange 0 rw "$2" "$1" \
&& sedutil-cli --setMBRDone on "$2" "$1" \
&& partprobe "$1"
}
Partprobe повторно сканирует устройство после разблокировки и находит на нем разделы. Но ссылки типа /dev/disk/by-label/%LABEL_NAME%
создаются как я понимаю udev, и по этой причине findfs у меня не срабатывает… Вопрос: как эти симлинки создать вручную. И еще один вопрос: а можно ли как-то поймать ошибку монтирования корневой системы, узнать что она не смонтировалась через хуки? Монтировка в filesystems происходит же и дальше хуки не выполняются, если какой-то падает?