
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 /boot
行boot_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 /boot
はboot_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
その後、復元されたブートパーティションからブートできます。