LINUX.ORG.RU

FreeBSD geli: указание устройства в /boot/loader.conf

 ,


0

2

Всем привет. Есть компьютер с зашифрованным с помощью geli корневым разделом, к которому иногда подключаются различные диски, определяемые FreeBSD одним и тем же драйвером (ada). Во время загрузки системы с дополнительным подключенным устройством система видит /dev/ada0 (дополнительный диск) и /dev/ada1 (основной диск), а без дополнительных устройств только /dev/ada0 (основной диск). Если я правильно понял, чтобы загружать систему с зашифрованного корневого раздела (в моем случае; я во всем следовал книге Майкла Лукаса «FreeBSD Mastery: Storage Essentials»), нужно прописать в /etc/loader.conf следующее:

geom_eli_load="YES"
geli_ada0p4_keyfile0_load="YES"
geli_ada0p4_keyfile0_type="ada0p4:geli_keyfile0"
geli_ada0p4_keyfile0_name="/boot/ada0p4.key"

При подключении дополнительного устройства автоматическая загрузка системы не получается. Видно, что эти настройки привязаны к device node, а не к какому-либо label, позволившему бы однозначно идентифицировать нужный диск. Я бы хотел узнать, как исправить эту проблему. Заранее спасибо.

как исправить эту проблему.

Сначала разобраться в чём проблема, чекнув логи во время неудачной загрузки системы.

загрузка системы не получается.

Раздел boot (или efi) вообще (не) монтируется или проблема именно во время расшифровки?

Видно, что эти настройки привязаны к device node, а не к какому-либо label, позволившему бы однозначно идентифицировать нужный диск.

Есть glabel для привязки диска к меткам.

/boot/ada0p4.key

Авто установка FreeBSD не шифрует корневой раздел ключами. FreeBSD устанавливалась через shell?

geom_eli_load="YES"
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"
cryptodev_load="YES"
Clockwork ★★★★★
()
Последнее исправление: Clockwork (всего исправлений: 4)

Во время загрузки системы с дополнительным подключенным устройством система видит /dev/ada0 (дополнительный диск) и /dev/ada1 (основной диск), а без дополнительных устройств только /dev/ada0 (основной диск).

Подключить основной диск в первый слот — самое правильное решение.

Видно, что эти настройки привязаны к device node, а не к какому-либо label, позволившему бы однозначно идентифицировать нужный диск.

Потому что на этапе boot0/boot1/loader нет никаких лейблов, увы.

Я бы хотел узнать, как исправить эту проблему.

Есть в loader.conf(5) директива:

boot_askname="YES"

В этом случае загрузчик будет спрашивать с какого диска грузиться.

Также, если у тебя ZFS, можно явно указать пул, с которого нужно грузиться:

zfs_be_root="zfs:zroot/ROOT"

Или раздел:

vfs.root.mountfrom="ufs:/dev/ada0p4.eli"

Но всё это не поможет, если на "дополнительном" диске свой загрузчик в MBR/PMBR/ESP, так как он будет исполнен вместо boot0/loader.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Во время загрузки системы с дополнительным подключенным устройством система видит /dev/ada0 (дополнительный диск) и /dev/ada1 (основной диск), а без дополнительных устройств только /dev/ada0 (основной диск).

Подключить основной диск в первый слот — самое правильное решение.

Но зачем? Можно просто в биосе выбрать другой диск на первое место. Но думаю это не поможет, потому что оно там гвоздями прибито в нескольких местах)

Потому что на этапе boot0/boot1/loader нет никаких лейблов, увы.

Этот этап до загрузки раздела или после?

cat /etc/fstab       
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ada0p1             /boot/efi       msdosfs rw              2       2

Потому что от перемены мест слагаемых перестановки диска в другое место, в системе он остаётся прописан на старых местах.

Clockwork ★★★★★
()
Ответ на: комментарий от mord0d
vfs.root.mountfrom="ufs:/dev/ufs/root"

Лейблы файловой системы, находящейся на зашифрованном разделе, работают. Скорее всего, я чего-то не понимаю, но если размещать раздел, с которого производится загрузка системы на том же диске, на котором лежит зашифрованный раздел, то GEOM withering не даст нам использовать лейблы, связанные с еще зашифрованным разделом, а если на отдельном - то даст? Еще, если я все правильно понял, указывать имя устройства в именах переменных geli необязательно?

geli_foobar_keyfile0_load="YES"
geli_foobar_keyfile0_type="ada0p4:geli_keyfile0"
geli_foobar_keyfile0_name="/boot/ada0p4.key"
shpindelast
() автор топика
Ответ на: комментарий от mord0d

Подключить основной диск в первый слот — самое правильное решение.

Поддерживаю.

В этом случае загрузчик будет спрашивать с какого диска грузиться.

Так у него вопрос не откуда грузиться а откуда ключ брать.

Насчёт лейблов - в boot их может и нет, но разве «ada0p4» там есть? По-моему все эти параметры просто ядру сообщаются и оно уже их обрабатывает.

firkax ★★★★★
()

Всем спасибо за предложения, действительно, гораздо легче поставить диск с системой так, чтобы он всегда был первым. Надо будет потом разобраться с помещением /boot на флешку с передачей geli diskid основного диска.

shpindelast
() автор топика
Ответ на: комментарий от Clockwork

Можно просто в биосе выбрать другой диск на первое место.

Но при втыкании ещё одного диска всё может поехать.

Этот этап до загрузки раздела или после?

До.

boot0 (MBR/PMBR) → loader (/boot или ESP) → kernel. (Упрощённая схема, за подробной — в boot(8)).

Потому что от перемены мест слагаемых перестановки диска в другое место, в системе он остаётся прописан на старых местах.

От биоса зависит.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от shpindelast

Лейблы файловой системы, находящейся на зашифрованном разделе, работают.

У UFS2 свои лейблы, у MBR/GPT — свои. Я писал про последние, просто потому что UFS2 не использую, а где использую, там их лейблы ничего не дают.

GEOM withering не даст нам использовать лейблы, связанные с еще зашифрованным разделом

Ну это как бы логично, но проблема совершенно не в этом. Проблема в том, что на этапе boot0 у нас вообще нет никаких метаданных, есть диски по порядку их определения (физическое расположение на шине или логическое расположение, выставленное в BIOS; последнее может поехать), от 0 до N, где N — максимальное число дисков на шине, которое не может превышать какой-то там логический лимит BIOS. Затем на том же этапе у нас есть разделы, вычитанные из того же (P)MBR по порядку их расположения (ada0p1(0,0), ada2p4(2,3) и так далее). boot0 вообще очень мало чего может. Затем с раздела, помеченного active считывается loader, который имеет куда больший функционал, потому что не ограничен 512 байтами в размере. Но раз мы уже определились откуда загружаться, то необходимость парсить лейблы отпадает, если в loader.conf(5)* не прописан другой root device.

С UEFI этап с boot0 пропускается как ненужный, так как ESP у нас зашифрованным быть не может, вот тут уже могут быть лейблы, но я не проверял.

Еще, если я все правильно понял, указывать имя устройства в именах переменных geli необязательно?

Не подскажу, так как не пользуюсь этим механизмом.

mord0d ★★★★★
()
Ответ на: комментарий от firkax

Так у него вопрос не откуда грузиться а откуда ключ брать.

На этом наши полномочия как бы всё, кончились.

Насчёт лейблов - в boot их может и нет, но разве «ada0p4» там есть?

Нет, там есть только (0,0), (2,3), которые логически становятся ada0p1 и ada2p4 соответственно. То есть тут можно с уверенностью предсказать… кроме того, что оно может быть не ada, а da, vtbd и так далее.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

От биоса зависит.

Не улавливаю связи между биосом, boot0 и системой. У всех остальных (с нормальным биосом) при переключении диска с ОС в первый слот диск автоматически становится /dev/ada0? И в системе само прописывается во всех файлах ada0, ну и в ZFS конечно пул переезжает на ada0?

Хотел бы знать, как это должно происходить, потому что когда я переставлял диск с ОС в первый слот, он оставался /dev/ada1.

Clockwork ★★★★★
()
Ответ на: комментарий от Clockwork

ada0 это первый из найденных слотов, да. Если заняты sata2, stat3 и sata5 то они станут ada0, ada1, ada2 соответственно.

Хотел бы знать, как это должно происходить, потому что когда я переставлял диск с ОС в первый слот, он оставался /dev/ada1.

А кто был ada0?

firkax ★★★★★
()
Ответ на: комментарий от Clockwork

Так не может быть, ядро никогда на аллоцирует ada1 если ada0 не занято. Наверно там кто-то был а потом исчез. Посмотри dmesg.

Это у ad/da фиксированные номера, которые назначаются не по порядку а по железу. Может ты с ними перепутал?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от Clockwork

Не улавливаю связи между биосом, boot0 и системой.

Физический порядок диска на шине может быть переопределён логическим порядком в BIOS, тогда система будет видить диски в том порядке, в котором они определены в BIOS, а не в том, в котором они определены контроллером.

mord0d ★★★★★
()