単一のSDカードの破損に対する最良の耐性は、事前定義された期間ごとに自動スクラブを実行するRAID1モードのBTRFSによって提供されます。
メリット:
- ファイルシステムにRWする機能を保持
- 透過的な圧縮やスナップショットなど、RPiに非常に便利なオプションを備えた、最新のフル機能のファイルシステム
- (特に)フラッシュメモリを念頭に置いて設計されています
方法は次のとおりです。
ArchARM linuxでRaspberryPiを実行し、カードがSDリーダーにあるため、他のディストリビューションおよび/ devインターフェイスに合わせてこれらの手順を適宜変更します。
パーティションレイアウトの例を次に示します。
/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap
btrfsをRAID1に追加するには、次のようにファイルシステムを作成します。
mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3
次にrsync -aAXv
、以前にバックアップしたシステムに移動します。
raid1のBTRFSから起動するには、initramfsを変更する必要があります。したがって、古いファイルシステムでシステムを実行している間に次のことを行う必要があります。
Raspberryは通常mkinitcpioを使用しないため、インストールする必要があります。次に、mkinitcpio.confのMODULES配列に「btrfs」を追加し、initramfsを再作成する必要があります
mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION
YOUR_KERNEL_VERSIONの代わりに入力する内容を知るには、次を実行します
ls /lib/modules
カーネルを更新する場合、再起動する前にinitramfsを再作成する必要があります。
次に、RPiのブートファイルを変更する必要があります。
cmdline.txtには、次のものが必要です。
root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs
config.txtに追加する必要があります
initramfs initrd 0x01f00000
すべてを実行してbtrfs RAID1システムを正常に起動したら、systemdタイマー(推奨)またはcron(dcron)を使用して定期的なスクラブ(3〜7日ごと)を設定するだけです。
btrfs scrub start /
ファイルシステム上で実行され、すべてのファイルのチェックサムを比較し、破損が見つかった場合はそれらを修正します(正しいコピーに置き換えます)。
BTRFS RAID1、単一メディア、およびRaspberry Piの組み合わせにより、このかなり不可解なものが作成されます。すべてのピースをまとめるのに時間がかかりましたが、ここにあります。