LINUX.ORG.RU

Void linux c iscsi корнем

 , , ,


0

3

Анон подскажи, где не работает?

Вздумалось мне потестить виртуалочки на void linux. А жосткие диски у меня сильно кончились.
Но есть NAS, который уже может tftp и iscsi и все это давно работает вместе с ipxe.
Поэтому хочу загрузить void по сети.
Но не тут то было.

Накатил на виртуалку обычную инсталляцию void с MBR.
Поставил нужные пакеты.

[*] libiscsi-1.18.0_1        ISCSI client library
[*] open-iscsi-2.0.876_2     Open-iSCSI userland tools
[*] dracut-048_4             Low-level tool for generating an initramfs/initrd image
[*] dracut-network-048_4     Low-level tool for generating an initramfs/initrd image - network modules
Обновляю initramfs (-N не только базовые модули, но и iscsi)
dracut -N --force /boot/initramfs-4.19.36_1.img >> dracut.log 2>&1
Вроде нужный модуль поставился.
cat dracut.log | grep iscsi
dracut: *** Including module: iscsi ***
Вырубаю виртуалку, отсоединяю диск, шарю его по iscsi.
Включаю, dhcp, tftp, ipxe, грузица ядро, initramfs, висит... и выпадает в dracut шел с сообщением, что нет блочного устройства корня.
Смотрю логи dracut: инициализация iscsi даже не начаналась.
Более того, почемуто не инициализирован сетевой интерфейс.
Но если банально выполнить dhcpclient eth0, то он настраивается.

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

В интернеты информацию про сетевую загрузку void совсем не завезли.
Это печально.

Ответ на: комментарий от AEP

Он дефолтный.

# cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.19.36_1 root=UUID=eae79c9c-7290-48ae-838b-3f67f3962769 ro loglevel=4 slub_debug=P page_poison=1
У меня тоже была мысль, что нужно статически прописать в параметры ядра ip=dhcp, root=iscsi:блаблабла.
Но дело в том, что есть дока претендующая на первоисточник:
https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html#_iscsi

If the «servername» field is provided by BOOTP or DHCP, then that field is used in conjunction with other associated fields to contact the boot server in the Boot stage. However, if the «servername» field is not provided, then the «targetname» field is then used in the Discovery Service stage in conjunction with other associated fields. See rfc4173.

Которая говорит, что есть какой-то механизм авто-настройки/передачи дальше в initramfs url+параметров для подключения к iscsi таргету.
Полагаю именно поэтому, я ничего никогда не настраивал в аналогичных diskless Дебианах. (только что проверил 1, kernel line без указания таргетов)

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

Так это старая дока. С тех пор автоматику убрали. Даже банальный LVM или RAID приходится явно указывать.

Ну и еще - в твоей командной строке вообще нет информации о том, что это не локальное блочное устройство, а какой-то iscsi, за которым надо лезть через DHCP.

Как мне кажется, у тебя на самом деле другой вопрос - а почему в Debian’е все работает? Ответ: там по умолчанию не dracut, а initramfs-tools, с другой политикой о том, что можно автоматически определять, а что - нет. А также, что из настроек, специфичных для конкретной системы, можно копировать в initramfs, а что - нет. Думаю, полезным упражнением будет установка Debian на iscsi с последующей заменой initramfs-tools на dracut.

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

Ну и на всякий случай вдогонку: а зачем тебе настраивать загрузку виртуалок без диска? QEMU/KVM умеет сам подключаться к iscsi target’у и подставлять его как /dev/vda или /dev/sda.

AEP ★★★★★
()

Тебе нужно запустить виртуалку, а место есть только через iscsi ? ну так подключи iscsi к хосту!

Хочешь гемор с root на iscsi - тогда разбирайся со своим дистрибутивом.

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


Но все же удалось раскурить это механизм.
Он называется ibft и не сложный с настройке
http://ipxe.org/appnote/ibft
Но пока до конца не грузица, но таргет верный находит.
http://www.picshare.ru/view/10029552
Проблема сейчас на стороне запуска самого iscsid в initramfs.
Все 1.5 настройки в open-iscsi сделаны согласно мануала.
Явно тут уже дело на стороне самого dracut.

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

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

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

И нет и да. Много виртуалок, так что на текущем хосте памяти сильно нехватает + ядро старое + пакеты надо пересобирать (qemu).
Попердолиться с консолькой это всегда в удовольствие.
А вы товарищь, случаем не на офтопике ли сидите? Чтобы как вы говорите не гемороиться.

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

rootfs на сети - это всегда не тривиальный вариант.

20 лет назад rootfs на nfs проходили (когда initrd еще был ramdisk-ом)

Запуск системы с iscsi - это достаточно хлопотный вариант, т.к. подключение iscsi в initrd требует усилий (особенно если в дистрибутиве такой возможности не предусмотрели). Считаю, что вариант с пересборкой initrd для изменения параметров загрузки - это геморой.

А зачем так извращаться, если qemu/kvm-у можно сразу отдать блочный девайс ( iscsi подключенный к хосту + lvm).

vel ★★★★★
()

Кек, работает.

Доки dracut правда очень старые от 2013 года.
И полных инструкций от и до по организации iscsi-root найти не удалось, пришлось смотреть в коде модуля 95iscsi и местами организовывать отладочный вывод.

Будующим поколениям гуглистов:
Нужные пакеты:

[*] libiscsi-1.18.0_1        ISCSI client library
[*] open-iscsi-2.0.876_2     Open-iSCSI userland tools
[*] dracut-048_4             Low-level tool for generating an initramfs/initrd image
[*] dracut-network-048_4     Low-level tool for generating an initramfs/initrd image - network modules
Настройки iscsid:
/etc/iscsi/initiatorname.iscsi:
ISCSI_AUTO=true
/etc/iscsi/iscsid.conf:
node.startup = automatic (не уверен в нужности)
iscsid.startup = /sbin/iscsid
Настройки dracut:
/etc/dracut.conf:
hostonly="no"
Строка ядра:
rd.iscsi.firmware=1 rd.iscsi.ibft=1 root=UUID=eae79c9c-7290-48ae-838b-3f67f3962769
Да, root=UUID убирать не надо!
В коментах к iscsi модулю написано, что после присоединения блочного устройства initramfs продолжит с записью в root.
Без этого не работает.

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


Это верно в части nfs, тут нечего спорить.
Взять хотя бы факт того, что нужно постоянно пердолитья с перекладыванием ядра и initramfs на tftp, переименовывать/править конфиги или городить для этого костыли.
В этом плане iscsi хорош. И ничем для обычного пользователя не отличается от системы с диском. ИМХО.

Памяти (RAM) нет на хосте. Зато есть 2 хост, на котором много памяти, но нет диска.

shtulmanellosis
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.