kumpei.ikuta.me

mdadm + LVM で貧者の冗長ストレージ(実践)

前回 の続きです。各種コンポーネントの準備が整ったので、構築をしていきます。

ハードウェアの準備

ディスク

Seagate の BarraCuda 8TB ST8000DM004 を 4 本購入しました。NAS 向けモデルではありませんが、WD Red や IronWolf Pro などの NAS 向けシリーズは 1.5 〜 2 倍ほど高いので、予算を優先しました。

エンクロージャ

裸族のスカイタワー CRST1035U3IS6G を使います。10 ベイは明らかに無駄ですが、将来の拡張を見越すと最もコスパが良いかなと思い購入しました。

ファンの音が結構うるさいので Noctua の良いやつに交換すると良いかもしれません。

サーバ

Pentium G5400 / 8GB RAM / 250GB SSD みたいな感じの構成で組んだ DeskMini が余っていたのでこれを使います。USB 3.0 Type-A ポートが 2 つしかありませんが、当面は問題ないでしょう。

ソフトウェアの準備

何はともあれ Arch Linux をインストールします。各種作業 1 が終わったら、追加で必要なパッケージを入れておきます。

# pacman --sync mdadm lvm2 xfsprogs samba

パーティショニング

mdadm を使って RAID アレイを構築していきますが、 RAID のメンバーはディスク全体ではなく若干小さめのパーティションのほうがいいらしい 2 ので、100MB だけ小さいパーティションを作ります。パーティショニングには fdisk を使います。

ということでパーティショニングをしました。sdb, sdc, sdd, sde がデータ用ディスクです(sda はシステム用)。基本的には普通に GPT でパーティションを作るだけなんですが、パーティションの種類を Linux RAID にする必要があるので注意。

# lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0 238.5G  0 disk  
|-sda1    8:1    0   512M  0 part  /boot
|-sda2    8:2    0    50G  0 part  /
`-sda3    8:3    0   188G  0 part  /home
sdb       8:16   0   7.3T  0 disk  
`-sdb1    8:17   0   7.3T  0 part  
sdc       8:32   0   7.3T  0 disk  
`-sdc1    8:33   0   7.3T  0 part  
sdd       8:48   0   7.3T  0 disk  
`-sdd1    8:49   0   7.3T  0 part  
sde       8:64   0   7.3T  0 disk  
`-sde1    8:65   0   7.3T  0 part  

RAID アレイ構築

前回は RAID 5 で 24TB 得られる…と計画していましたが、結局 RAID 6 でいくことにします。4 ディスクなので 16 TB しか残りませんが、信頼性の低いディスクを使っている以上、冗長性を優先した構成にします。

# mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sd[bcde]1

丸一日くらいかかるので、/proc/mdstat を見ながら気長に待ちます。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      15627581440 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
      [>....................]  resync =  0.3% (23527736/7813790720) finish=1482.7min speed=87562K/sec
      bitmap: 59/59 pages [236KB], 65536KB chunk

unused devices: <none>

ちなみに待ってる間の %CPU は 40 - 45% くらいでした。Pentium G5400 は現代においてはあまりパワフルな CPU とはいえませんが、この程度のタスクであれば余裕でこなせそうです。もし CPU パワーが足りなくなるような事態があったら、中古で i3-8100 あたりを買おうと思います。

LVM 構築

↑で作った /dev/md0 に物理ボリューム(PV)を作り、それをメンバーとするボリュームグループ(VG)を作ります。名前は vg0 とします。

# vgcreate vg0 /dev/md0

作った PV / VG は以下のコマンドで確認できます。

# pvdisplay
# vgdisplay

次に論理ボリューム(LV)を作ります。名前は data とします。作った LV は lvdisplay コマンドで確認できます。

# lvcreate --extents 100%FREE vg0 --name data

とりあえず空き容量すべてを割り当てました。ここまでやると、lsblk の出力は以下のようになります。

# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 238.5G  0 disk  
|-sda1           8:1    0   512M  0 part  /boot
|-sda2           8:2    0    50G  0 part  /
`-sda3           8:3    0   188G  0 part  /home
sdb              8:16   0   7.3T  0 disk  
`-sdb1           8:17   0   7.3T  0 part  
  `-md0          9:0    0  14.6T  0 raid6 
    `-vg0-data 253:0    0  14.6T  0 lvm   
sdc              8:32   0   7.3T  0 disk  
`-sdc1           8:33   0   7.3T  0 part  
  `-md0          9:0    0  14.6T  0 raid6 
    `-vg0-data 253:0    0  14.6T  0 lvm   
sdd              8:48   0   7.3T  0 disk  
`-sdd1           8:49   0   7.3T  0 part  
  `-md0          9:0    0  14.6T  0 raid6 
    `-vg0-data 253:0    0  14.6T  0 lvm   
sde              8:64   0   7.3T  0 disk  
`-sde1           8:65   0   7.3T  0 part  
  `-md0          9:0    0  14.6T  0 raid6 
    `-vg0-data 253:0    0  14.6T  0 lvm   

ファイルシステム作成・マウント

作った LV (/dev/vg0/data)に XFS ファイルシステムを作ります。デフォルト設定で最も最適化されるようになっているので、オプションは特につけなくても良いらしい。

# mkfs.xfs /dev/vg0/data

ここまで来てしまえばあとは普通のファイルシステムなので、何も特別なことはありません。普通にマウントします。

# mkdir /data
# mount /dev/vg0/data /data

マウントすると df から見えるようになるので、確認しておきましょう。

# df --print-type --human-readable /data
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg0-data xfs    15T  104G   15T   1% /data

ついでに自動マウントも設定します。/etc/fstab に 1 行追記するだけです。

/dev/vg0/data    /data    xfs    defaults    0 0

Samba による共有

NFS を使えば楽なんですが、Linux 以外からも使えるようにしたいので、面倒がらずに Samba を使います。まず、/etc/samba/smb.conf に最低限の設定を書きます。192.168.0.0/24 から見えるようにしておきます。

[global]
workgroup = WORKGROUP
server string = Samba Server
server role = standalone server
hosts allow = 192.168.0. 127.
log file = /var/log/samba/%m.log
max log size = 50
dns proxy = no
security = user

[public]
path = /data
writable = yes

次にユーザを作ってパスワードを設定します。

# pdbedit --create --user ikr7
# smbpasswd ikr7

あとは適当にサービスを開始・有効化しておけば OK です。

# systemctl start smb nmb
# systemctl enable smb nmb

ここまで来れば Samba のサーバが動いているはずなので、 Windows / macOS / Linux から簡単にファイルが見えるようになっていることでしょう。最近は iOS からもプリインのアプリで簡単に見れるらしいです。

おわり

お疲れさまでした。ピカピカ光るアクセスランプを眺めて悦に入りましょう。楽しい data hoarding ライフを!


  1. 久しぶりに Arch のインストールをしたんですが、カーネルが base グループから抜けててビックリしました。あと dhcpcd もデフォルトじゃなくなってた。 ↩︎

  2. 同じ 8TB として売られているディスクであっても、ベンダーやロットによって完全に同じバイト数になるとは限らないので、少し余裕を持たせておくと故障時の交換が楽になるらしいです。 ↩︎

back to index