BtrfsでRAID5を使う
btrfsは複数のデバイスから1つのプールを作成することができる。プールはbtrfsが備えるRAID機能を用いることができる。今回は6本のディスクでRAID5を使用したプールを作成する。
btrfsについてはBtrfsの薄い本を参考にした。
追加したディスクの判別
fdisk -lでディスクの情報を表示してDisk Modelで追加したディスクか判別した。ディスクは秋葉原のショップインバースで500GB1200円で売られていたものを5本と、別の日に特価で640GB1200円の1本の合計6本を追加した。通常RAIDはディスクのサイズを揃えて置かないと容量が無駄になるがbtrfsのRAIDは容量が異なっていてもいい感じに使用してくれる。
hoge@hoge-desktop:~$ sudo fdisk -l
--- 中略 ---
ディスク /dev/sda: 596.17 GiB, 640135028736 バイト, 1250263728 セクタ
Disk model: ST9640320AS
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク /dev/sdb: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスク /dev/sdc: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスク /dev/sdd: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LM021-1KJ15
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc28aee7b
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sdd1 2048 976769023 976766976 465.8G 7 HPFS/NTFS/exFAT
ディスク /dev/sde: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
--- 中略 ---
ディスク /dev/sdg: 465.76 GiB, 500107862016 バイト, 976773168 セクタ
Disk model: ST500LT012-1DG14
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
RAID5でプールを作成する
最初にbtrfs関係のパッケージを追加する。
sudo apt install btrfs-progs -y
-dでraid5を指定 -mはメタデータの設定でこちらもraid5にしておく データはRAID5でメタデータはRAID1みたいな構成もできる。
hoge@hoge-desktop:~$ mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1
See http://btrfs.wiki.kernel.org for more information.
probe of /dev/sda failed, cannot detect existing filesystem.
ERROR: use the -f option to force overwrite of /dev/sda
エラーが出て失敗。gdiskでGPTとMBRを消す。
hoge@hoge-desktop:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
Command (? for help): m
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): d
No partitions
Command (? for help): x
Expert command (? for help): z
About to wipe out GPT on /dev/sda. Proceed? (Y/N): y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): y
再実行したものの今度はsddにdosパーティションがあるので失敗(これはfdisk -lでみた時点でわかっていた)。これもgdiskで消す。
hoge@hoge-desktop:~$ sudo mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1
See http://btrfs.wiki.kernel.org for more information.
/dev/sdd appears to contain a partition table (dos).
ERROR: use the -f option to force overwrite of /dev/sdd
消したあとにもう一度mkfs.btrfsを実行。 今度は正常に作成することができた。465.76GiB*5+596.17GiB(Total 2924.97GiB)の変則的な構成だと 2.86TiBになった。
hoge@hoge-desktop:~$ sudo mkfs.btrfs -m raid5 -d raid5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg
btrfs-progs v5.10.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Node size: 16384
Sector size: 4096
Filesystem size: 2.86TiB
Block group profiles:
Data: RAID5 5.00GiB
Metadata: RAID5 853.12MiB
System: RAID5 13.12MiB
SSD detected: no
Incompat features: extref, raid56, skinny-metadata
Runtime features:
Checksum: crc32c
Number of devices: 6
Devices:
ID SIZE PATH
1 596.17GiB /dev/sda
2 465.76GiB /dev/sdb
3 465.76GiB /dev/sdc
4 465.76GiB /dev/sdd
5 465.76GiB /dev/sde
6 465.76GiB /dev/sdg
btrfs filesystemc show
hoge@hoge-desktop:~$ sudo btrfs filesystem show ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Label: none uuid: ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Total devices 6 FS bytes used 128.00KiB
devid 1 size 596.17GiB used 1.17GiB path /dev/sda
devid 2 size 465.76GiB used 1.17GiB path /dev/sdb
devid 3 size 465.76GiB used 1.17GiB path /dev/sdc
devid 4 size 465.76GiB used 1.17GiB path /dev/sdd
devid 5 size 465.76GiB used 1.17GiB path /dev/sde
devid 6 size 465.76GiB used 1.17GiB path /dev/sdg
マウントする
マウントするときにcompressオプションを使うと透過圧縮が使える。
sudo mount -o compress=lzo UUID=ba3f187a-bfb3-47b5-aa02-334b15f2ea33 /data
ついでにラベルをつける
sudo btrfs filesystem label /data pool01
hoge@hoge-desktop:~$ sudo btrfs filesystem show /data
Label: 'pool01' uuid: ba3f187a-bfb3-47b5-aa02-334b15f2ea33
Total devices 6 FS bytes used 1.56MiB
devid 1 size 596.17GiB used 1.17GiB path /dev/sda
devid 2 size 465.76GiB used 1.17GiB path /dev/sdb
devid 3 size 465.76GiB used 1.17GiB path /dev/sdc
devid 4 size 465.76GiB used 1.17GiB path /dev/sdd
devid 5 size 465.76GiB used 1.17GiB path /dev/sde
devid 6 size 465.76GiB used 1.17GiB path /dev/sdg
最後にfstabに追加して起動したときにマウントするようにしておく。
UUID=ba3f187a-bfb3-47b5-aa02-334b15f2ea33 /data btrfs compress=lzo 0 0