/ ZFSミラーで起動


ZFSのルートパーティションに関する記事に加えて、小さなメモ。


前の記事では、/ bootは2つのext4パーティションで複製され、将来的には正常に動作するように計画されていました。


カーネルは十分に頻繁に更新され、毎回/ブート、カーネルの更新、内容のコピー、update-grub、update-initramfsなどの両方をマウントする必要がありました。


これは注文にうんざりしています。


未来が来ました。


これをスクリプトにすることは可能ですが、grub2はZFSからの起動をサポートしています。


したがって、適切で安価なオプションは、ZFSミラーを作成/起動することです。 条件は、 前の記事 :Debian、ZFSのルートで説明されている条件と同じであると想定されてます。


準備手順


パーティションのイメージを、たとえばUSBフラッシュドライブにコピーする必要があります。これにより、障害が発生した場合、以前の動作状態に復元できます。


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からのファイルのリストが表示されるはずです。


FSがアンマウントできるようになりました:


 umount /boot 

ZFSプールとブートFSを作成する


 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 

ashiftパラメーターに関する注意

ashift指定したブロックサイズを取得するためにデュースを上げる必要がある度合い。
12は4Kブロックです。
blockdev --getbsz /dev/<disk>コマンドblockdev --getbsz /dev/<disk>を使用するか、デバイスの技術仕様からブロックサイズを取得できます。


その結果、 boot_pool /bootboot_pool /boot場合、プールは正しく作成されており、データセットはマウントされています。


 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がFSを理解していることを確認する必要があります。


 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 /bootboot_pool/boot /bootを表示しboot_pool/boot /boot


何かがうまくいかなかった場合


Live USBから起動し、イメージの1つをコピーして戻すだけです。


 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 

その後、復元されたブートパーティションからブートできます。



Source: https://habr.com/ru/post/J358914/


All Articles