Главная » Хабрахабр » /boot на ZFS зеркале

/boot на ZFS зеркале

Небольшая заметка, в дополнение к статье о корневом разделе на ZFS.

В предыдущей статье /boot был продублирован на двух ext4 разделах, и в будущем планировалось сделать нормально.
Ядро обновляется достаточно часто и каждый раз приходилось монтировать оба /boot, обновлять ядро, копировать содержимое, делать update-grub, update-initramfs и т.п…
Это порядком надоело.
Будущее настало.
Возможно сделать это скриптом, но grub2 поддерживает загрузку с ZFS.
Потому, правильный и менее затратный вариант — это сделать /boot на ZFS зеркале.
Предполагается, что условия те же, что описаны в предыдущей статье: Debian, root на ZFS.

Предварительные шаги

Необходимо скопировать образы разделов, например на флешку, чтобы в случае неудачи, возможно было восстановиться к предыдущему рабочему состоянию:

mount /dev/disk/by-id/usb-Corsair_Flash_Voyager-0\:0-part1 /mnt/usb/
dd if=/dev/disk/by-id/ata-Micron_1100-part2 of=/mnt/usb/micron_boot.img bs=4M
dd if=/dev/disk/by-id/ata-Samsung_SSD_850_PRO-part2 of=/mnt/usb/samsung_boot.img bs=4M
umount /mnt/usb

Обязательно извлеките флешку из USB после этого.

Надо проверить загружается ли модуль zfs в grub:

grep -R zfs /boot/grub/grub.cfg

В результате должна быть выведена строка insmod zfs.
Если её там нет, надо добавить такую строку в /etc/default/grub:

GRUB_PRELOAD_MODULES="zfs"

В принципе, grub сам добавит нужный модуль, когда обнаружит установку на ZFS, но лучше перестраховаться.

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

mount /dev/disk/by-id/ata-Micron_1100-part2 /boot
tar -C / -cf ~/boot.tar /boot
tar tf ~/boot.tar

В результате, на экран должен быть выведен список файлов из /boot.

Теперь ФС возможно отмонтировать:

umount /boot

Создание ZFS пула и загрузочной ФС

rm -rf /boot
zpool create -f -o ashift=12 \ -O atime=off -O compression=lz4 -O normalization=formD \ -O mountpoint=none \ boot_pool mirror /dev/disk/by-id/ata-Micron_1100-part2 /dev/disk/by-id/ata-Samsung_SSD_850_PRO-part2
zfs create -o mountpoint=/boot boot_pool/boot
zpool set bootfs=boot_pool/boot boot_pool
zfs mount|grep /boot

Если в результате, появится строка boot_pool /boot, пул был создан корректно, а dataset примонтирован.

zpool list boot_pool -v

Должен вывести что-то подобное:

NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
boot_pool 1008M 220M 788M - 7% 21% 1.00x ONLINE - mirror 1008M 220M 788M - 7% 21% /dev/disk/by-id/ata-Micron_1100-part2 - - - - - - /dev/disk/by-id/ata-Samsung_SSD_850_PRO-part2 - - - - - -

Установка загрузчика

Предварительно надо проверить, что grub понимает ФС:

grub-probe /boot

Должна быть выведена строка zfs.

tar -C / -xf ~/boot.tar
ls /boot

После завершения распаковки на экран будет выведен список файлов в /boot.

Далее, обновление initramfs и установка загрузчика:

update-initramfs -k all -u
grub-install --bootloader-id=debian1 --recheck --no-floppy /dev/disk/by-id/ata-Samsung_SSD_850_PRO
grub-install --bootloader-id=debian2 --recheck --no-floppy /dev/disk/by-id/ata-Micron_1100
ZPOOL_VDEV_NAME_PATH=YES update-grub

Загрузчик, по-идее возможно не переустанавливать, но у меня без этого не заработало. Процесс займёт некоторое время.

Теперь надо перезагрузиться:

reboot

После перезагрузки zfs mount|grep /boot выведет boot_pool/boot /boot, что означает: всё прошло корректно.

Если что-то пошло не так

Достаточно загрузиться с Live USB и скопировать один из образов обратно:

mount /dev/disk/by-id/usb-Corsair_Flash_Voyager-0\:0-part1 /mnt/usb/
dd if=micron_boot of=/dev/disk/by-id/ata-Micron_1100-part2 bs=4M
umount /boot

После этого возможно грузиться с восстановленного загрузочного раздела.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Зачем изучать непопулярные языки. Пример сообщества F#

Но коммерческого успеха и широкой популярности нет. Бывают культовые фильмы, игры, книги или музыка — их страшно любит сплоченное сообщество, профессионалы и критики. Мне в таких ситуациях обычно до боли обидно. Например, F#. В разработке хорошие технологии тоже не всегда ...

[Перевод] Курс MIT «Безопасность компьютерных систем». Лекция 9: «Безопасность Web-приложений», часть 2

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы ...