Ubuntuで暗号化ボリュームをZFSファイルシステムで作る
By Patineboot
NASサーバーでファイルを保存する!
iPhoneのカメラで写真を撮る。たくさんのiCloudがとても少なくなっている。メール、書類、iCloudにもっと保存したい。 iCloudにある写真を一枚、その日の出来事をiPhoneで見る。すごく楽しいので、Amazon.comへ移動することにする。 Amazon.comのアルバム、良いサービスだが、いつまで続くのかな😖
ZFSファイルシステムで、NASを構築する。
ストレージの永続性を考慮しミラーリングRAID、機密性から暗号化ボリュームを採用する。
NASハードウェアを用意する
ホームサーバにSATA SSDを2台追加する。
- MiniPCベアボーン: ASRock DeskMini X300
- CPU: AMD Ryzen 5 PRO 4650G
- ストレージ: Lexar M.2 SSD 500GB
- メモリ: Crucial 16GB(8GB x 2)
- ストレージ(ZFS): Crucial MX500 1TB SATA
- ストレージ(ZFS): Samsung 860 EVO 1TB SATA
NASソフトウェアを選択する
- オペレーティングシステム: Ubuntu 21.04 Server
- ファイルシステム: ZFS on Linux 2.02
ZFSをインストール!
ZFS on LinuxをUbuntuへインストールする。ZFSプールをミラーリングで作成する。
-
aptコマンドでZFS on Linuxをインストールするね。
sudo apt install zfsutils-linux whereis zfs
正しくインストールされた事を、
whereis zfs
で確認できる。 -
ZFSプールをミラーミングRAIDを指定して作る!
ディスクIDを
ls
コマンドで確認するよ。デバイスパスは、SSDの取り付けポート、順序で変わる。内部SSDは、取り外しがある。 ZFSコマンドには、ディスクIDの指定をするよ。
ls -la /dev/disk/by-id/ $ lrwxrwxrwx 1 root root 9 Aug 30 21:19 ata-CT1000MX500SSD1_XXXXXXXXXXXX -> ../../sdb $ lrwxrwxrwx 1 root root 9 Aug 30 21:19 ata-Samsung_SSD_860_EVO_1TB_XXXXXXXXXXXXXXX -> ../../sda
名前を
zfs-pool
で、ミラーミングRAIDのZFSプールを作るね。sudo zpool create zfs-pool mirror ata-Samsung_SSD_860_EVO_1TB_XXXXXXXXXXXXXXX ata-CT1000MX500SSD1_XXXXXXXXXXXX
ZFSプールの状態を確かめる。
zpool status
※ コマンドの出力は環境に依存するね。Patinebootのサーバーの実行結果だよ。
暗号化と圧縮しよう!
暗号化ボリュームを作成する!
-
暗号アルゴリズムと、鍵形式を指定するよ。
ボリュームの名前は、
archive
にするね。コマンド結果を見て、暗号化に使うパスフレーズを入力してね。sudo zfs create -o encryption=aes-256-gcm -o keyformat=passphrase zfs-pool/archive
参考情報:サーバーを再起動したら、暗号化ボリュームの鍵をロードして、暗号化ボリュームをマウントしてね。
zfs load-key zfs-pool/archive
-
パーミッションを変えてね。事前にchownもしたほうが良いかも。
sudo chmod 755 /zfs-pool/archive
ボリュームの属性をセットする!
作ったボリュームの属性をzfs
コマンド、set
オプションで設定する。対になるget
オプションもあるよ。
速度と圧縮率のバランスが良いlz4
形式を指定するよ。
重複データチャンクをユニークにする。ボリューム容量に比例してメモリをたくさん使うよ。
sudo zfs set compression=lz4 zfs-pool/archive
sudo zfs set dedup=on zfs-pool/archive
POSIXアクセス制御リストを使うよ。 拡張属性をinodeの中へ保存するよ。
sudo zfs set acltype=posixacl zfs-pool/archive
sudo zfs set xattr=sa zfs-pool/archive
起動時に暗号化ボリュームをマウントしよう
暗号鍵をロードするサービスを作成しよう。
起動後は、自動的に暗号化ボリュームをマウントするよ。
ZFSシンボルインポート後、暗号化ボリュームの、暗号鍵パスワードを自動で入力し、ZFSボリュームをマウントする。
[Unit]
Description=Load the encryption key for archive of ZFS storage.
After=zfs-import.target
Before=zfs-mount.service
[Service]
Type=oneshot
RemainAfterExit=yes
Environment="PASSPHRASE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ExecStart=sh -c 'echo $PASSPHRASE | zfs load-key zfs-pool/archive'
[Install]
WantedBy=zfs-mount.service
サービスの記述をzfs-loadkey-archive.serviceに保存する。 systemdに登録して、自動的に実行する。
# サービスをsystemdのユーザーディレクトリへコピー
sudo cp zfs-loadkey-archive.service /etc/systemd/system/
# サービス即時に開始する
systemctl start zfs-loadkey-archive.service
# サービスを登録し、次回以降のブート時に自動開始する
systemctl enable zfs-loadkey-archive.service