はじめに
数値計算の研究のためには、シミュレーションデータを保存するためのハードディスク容量が必要です。実問題ではレイノルズ数が大きく、数値解析に必要なメッシュ数は1辺あたりに$Re^{3/4}$倍で増えます。空間3方向と時間方向を考えるので、ざっくりというと$Re^3$~$Re^4$くらいのスケールでデータが増えます(時間方向の見積もりは諸説あり)。流れの速さを2倍にすると、10~20倍くらいのデータ量になります。最新の乱流の超高精度数値シミュレーションのデータは、簡単に言うと, 4K動画のスローモーションを4K個保存するくらいの容量が必要です! 乱流などの数値計算を利用した研究のボトルネックはハードディスク容量といっても過言ではありません。
最近のハードディスクは安く大容量のものが手に入ります。詳しくは --> 息を吹き返すHDD
この記事では、ZFSのファイルシステムを自分で構築する方法を紹介します。今回は、NAS用の8TBを5台をつなげて、ZFSファイルシステムRAIDZを構築します。デスクトップコンピュータがすでにあれば、15万円くらいの投資です。RAID5と同様に1台冗長性をもたせますので、実容量はだいたい, 8TB $\times $(5-1)台 $\times$ 0.9 $\approx$ 28TBくらいです。 正確な計算はこちら。
ベンダーに頼んでNASを購入すると、同じくらいの容量で50-60万円でしょうか(2021年7月)。構築の手間と、壊れたときの手間を考えると、こちらの方が良いでしょう。突然の停電などで、ファイルシステムが壊れるリスクはZFSの方が低いらしいです。
RAIDZはハードディスクの1つが壊れてもHDを交換すれば復旧可能なはずです。が、復旧できた経験はありません。壊れても大丈夫な規模で、貴重なデータは別のところにバックアップがあるというスタンスでやります。
リスクを下げるには、新品のNAS用のハードディスクを使ってください。私のものは3年稼働しています。NAS用でない中古HDで作ったRAIDzは1年でだめになりました。バックアップや復旧も考えた上でご利用ください。
手元に余っている古いHDで練習すると良いでしょう。同じ容量のHDをご使用ください。ソフトウェアRAIDなので、ホストコンピュータのメモリも多く積んでおくと良いです。
ハードディスクを取り付けます
使用するのは普通のタワー型のPCケースです。研究室に眠っている古いPCで良いですがメモリは増設しておくと良いです。
配線はPC内部の空気の流れを妨げないようにきれいに。ハードディスクはやけどするくらい熱くなります。時々、ファンやフィルターの相似をしましょう。ケース前面のファンも必要でしょう.
ハード・ディスクのバーコードに赤線が入っているものがZFS用の5台です。
取り付けた後のチェックです。
2TB以上のハードディスクのパーティション管理にはGPTを使います。
# All disk (more than 2TB) should be GPT managed disks.
$sudo parted -l
で確認します。
##[1] IDでハードディスクを識別します。
$ls -l /dev/disk/by-id
/dev/disk/by-id/ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E3NA1C21 (sda)
/dev/disk/by-id/ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K2RL4289 (sdb)
/dev/disk/by-id/ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E5JVYPF2 (sdc)
/dev/disk/by-id/ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNK7LD (sdd)
/dev/disk/by-id/ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNKAT6 (sde)
##[2] ZFSモジュールの読み込み
$sudo /sbin/modprobe zfs
##[3] RAIDZストレージプールの作成
$sudo zpool create tank raidz /dev/disk/by-id/ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E3NA1C21 /dev/disk/by-id/ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K2RL4289 /dev/disk/by-id/ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E5JVYPF2 /dev/disk/by-id/ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNK7LD ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNKAT6
create を使ってRaidzを構成すると、中のデータは全部消えます。
##[4] データスペースの作成
$sudo zfs create tank/data
##[5] NFSで共有
- サーバーPC側の設定
$sudo zfs set sharenfs=on tank
$sudo vi /etc/exports
/tank/data [IP addr]/24(rw,async,no_root_squash)
$sudo exportfs -avr
- クライアントPCからNFSマウント
$showmount -e [IP address]
$sudo mount -t nfs [IP addr]:/tank/data /mnt/($mount_point)
NFS用に各WSのユーザーIDを一致させる必要があります。
ユーザーIDの確認
$id user_name
ユーザーIDの変更
$usermod -u 15001 user_name
$groupmod -g 15001 user_name
$chown -R user_name: /home/user_name
$chown -R user_name: /tank/data/user_name
PCの再起動後に ZFS ファイルシステムを再度マウントする
#recalling ZFS tank
$sudo zpool list
で探して、見つからなければ、
$sudo zpool import
pool: tank
id: 10275846496795298111
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
tank ONLINE
ata-WDC_WD20EADS-00R6B0_WD-WCAVY2884985 ONLINE
ata-WDC_WD20EZRX-00DC0B0_WD-WCC300262352 ONLINE
ata-WDC_WD20EZRX-00DC0B0_WD-WCC300319982 ONLINE
pool名 tankが見つかりましたので、以下のようにインポートすればOK.
$sudo zpool import tank
障害発生時
RAIDZはハードディスクの1つが壊れてもHDを交換すれば復旧可能なはずです。
マニュアルを見ながら暇なときにやれば良いです。
$ sudo zpool import
pool: tank
id: 10784953625292869930
state: DEGRADED
status: One or more devices contain corrupted data.
action: The pool can be imported despite missing or damaged devices. The fault tolerance of the pool may be compromised if imported.
see: http://zfsonlinux.org/msg/ZFS-8000-4J config:
tank DEGRADED raidz1-0
DEGRADED ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E3NA1C21
ONLINE ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K2RL4289
ONLINE ata-WDC_WD40EZRX-22SPEB0_WD-WCC4E5JVYPF2
ONLINE ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNK7LD
ONLINE ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNKAT6
ONLINE ata-WDC_WD40EZRZ-22GXCB0_WD-WCC7K4PNKKLH
とかが出ても、落ち着いて対応。
至急、バックアップを取るように周知してください。
壊れるまで使えますが、再起動するとマウントできなくなるかも。
バックアップ
勉強中。というか、まるごとスナップショットを取るくらいなら、ちゃんとしたNASかファイルサーバーを購入してください。壊れるのが前提の一時的な高負荷の処理用です。壊れる前に必死にデータ処理を走らせます。重要なデータはこまめにバックアップを取ります。バックアップ先はより信頼性の高いファイルサーバーもしくは、紙媒体、つまり、ジャーナル論文です。