/ 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 /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
      
      





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








All Articles