前回 の続きです。各種コンポーネントの準備が整ったので、構築をしていきます。
ハードウェアの準備
ディスク
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 ライフを!