generated at
BtrfsでRAID1を構築する
BtrfsのRAID1はmdadmで構成できる通常のソフトウェアRAIDのRAID1(以下、RAIDのRAID1)とは別物に思える
容量の異なる複数のディスクでRAID1を構成できる
各ディスクの容量が極端に違わなければ、 合計ディスク容量/2 の容量をもったストレージプールができる
RAIDのRAID1はディスクを増やしてもディスクアレイ全体の容量は増えないが、BtrfsのRAID1はディスクを増やせば増やすだけ容量も増える

つまり、通常のRAID1よりBtrfsのRAID1のほうがディスクの利用効率がいい
RAID5ならRAID1よりディスクの利用効率がいいようだが、BtrfsのRAID5/6はまだ不安定なので使わないほうがいいとのこと
最初、RAID5で構築しようとしていたが、BtrfsだとRAID1とRAID5ではディスクの利用効率が5割なのか7割なのかの違いぐらいで、3台以上のディスクをつないだときの使い勝手はあんまり変わらなさそう

試した環境
RaspberryPi 4B 4GB
RaspberryOS
128GBのUSBメモリが2本挿さっている
sh
$ ls -1 /dev/sd* /dev/sda /dev/sdb $ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 5000M |__ Port 2: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M

btrfsコマンドのインストール
sh
sudo apt install btrfs-progs

ストレージプールの作成
sh
sudo mkfs.btrfs -f /dev/sda

マウント
sh
sudo mount /dev/sda /mnt/nas

sdb をストレージプールに追加
sh
sudo btrfs device add -f /dev/sdb /mnt/nas

RAID1に変換する
sh
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/nas

sh
$ sudo btrfs filesystem show Label: none uuid: d4003fe2-0cbd-4c61-815c-0c5afc6da8dc Total devices 2 FS bytes used 640.00KiB devid 1 size 114.61GiB used 2.04GiB path /dev/sda devid 2 size 114.61GiB used 2.03GiB path /dev/sdb

sh
$ sudo btrfs filesystem usage /mnt/nas Overall: Device size: 229.22GiB Device allocated: 4.06GiB Device unallocated: 225.16GiB Device missing: 0.00B Used: 1.25MiB Free (estimated): 113.58GiB (min: 113.58GiB) Data ratio: 2.00 Metadata ratio: 2.00 Global reserve: 3.25MiB (used: 0.00B) Data,RAID1: Size:1.00GiB, Used:512.00KiB (0.05%) /dev/sda 1.00GiB /dev/sdb 1.00GiB Metadata,RAID1: Size:1.00GiB, Used:112.00KiB (0.01%) /dev/sda 1.00GiB /dev/sdb 1.00GiB System,RAID1: Size:32.00MiB, Used:16.00KiB (0.05%) /dev/sda 32.00MiB /dev/sdb 32.00MiB Unallocated: /dev/sda 112.58GiB /dev/sdb 112.58GiB

sudo btrfs filesystem show で表示されるUUIDをfstabに指定したら
/etc/fstab
$ cat /etc/fstab LABEL=writable / ext4 defaults 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1 UUID=d4003fe2-0cbd-4c61-815c-0c5afc6da8dc /mnt/nas btrfs defaults 0 0

sudo dd if=/dev/zero of=/mnt/nas/hoge bs=1M count=20000 を実行して20GBのファイルを書き込んでいる最中のtop
top
top - 06:42:38 up 14 min, 4 users, load average: 8.34, 6.47, 3.35 Tasks: 196 total, 2 running, 194 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 3.1 sy, 0.0 ni, 44.4 id, 51.4 wa, 0.0 hi, 1.0 si, 0.0 st %Cpu1 : 0.7 us, 3.4 sy, 0.0 ni, 5.4 id, 89.2 wa, 0.0 hi, 1.3 si, 0.0 st %Cpu2 : 0.0 us, 3.1 sy, 0.0 ni, 56.6 id, 40.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu3 : 3.4 us, 7.1 sy, 0.0 ni, 36.9 id, 51.9 wa, 0.0 hi, 0.7 si, 0.0 st MiB Mem : 3793.3 total, 22.8 free, 316.3 used, 3454.2 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 3415.7 avail Mem
load averageが8を越えているので、CPU負荷はかなり高いかもしれない?


↓20GB書き込んでみた結果
sh
$ sudo dd if=/dev/zero of=/mnt/nas/hoge bs=1M count=20000 20000+0 records in 20000+0 records out 20971520000 bytes (21 GB, 20 GiB) copied, 1549.53 s, 13.5 MB/s


参考

See Also: