MacBook Proを新しく購入したので、Proxmox VE上のZFSストレージをバックアップ用途として見直し、TimeMachineの保存先として利用することにしました。
■ バックアップの圧縮と暗号化のポリシー: ZFSの機能を利用する
万が一どころか億が一、ハードディスクの持ち去り対策としてデータの暗号化を検討します。まぁ個人の Mac で、プール全体を暗号化していないので片手落ちなのですが...
データの圧縮や暗号化をどのレイヤーで行うか考え、最終的にどちらも ZFS のレイヤで行うことにしました。
結論としては、TimeMachine自体は暗号化することはあっても積極的には圧縮しないようで、ZFSのレイヤで圧縮をかけるとしても、TimeMachineの暗号化を有効にすると、ZFS側での圧縮はほぼ効かなくなります。圧縮したければTimeMachineの暗号化機能は利用しないほうがよい、ということになります。
■ Proxmox VE側の設定
まずは zpool、データセットの準備を行います。
array5 zpool
今回は既存の zpool プールを使用しますので、 zpool の作成方法などについては割愛します。 10TB HDD x5, RAIDZ2 で構成したプールです。
hasegaw@pve:~$ zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT array5 45.5T 11.2T 34.3T - - 0% 24% 1.00x ONLINE -
array5/backup
array5/backup/timemachine
ここにはarray5/backup, array5/backup/timemachine データセットを作成します。まぁ、データセットも作成済みなのですが、
hasegaw@pve:~$ zfs list array5/backup NAME USED AVAIL REFER MOUNTPOINT
array5/backup 1.31T 20.2T 211G /export/backup
array5/backup/timemachine 959G 20.2T 185K /export/backup/timemachine
新たに作成するのであれば以下のようなコマンドラインになりますね。
sudo zfs create array5/backup
sudo zfs create -o compression=lz4 array5/backup/timemachine
compression=lz4 を指定していますが、とても積極的な圧縮とまでいかなくても、ゼロが続くような領域についてはランレングス圧縮がかかれば良いな、というぐらいの期待値です。ここで gzip などを指定すれば多少圧縮率もあがるかもしれませんが、CPUサイクルとのバランス感は微妙だと思っています。
また、このホストではデータセットのマウント先を /export/backup にしています。(-o mountpoint=/export/backup)
array5/backup/Arseille
続いて TimeMachine 用の array5/backup/Arseille を作成します。 TimeMachine はマウントされたファイルシステムをまるごとバックアップ先として使用する仕様なので、TimeMachineの単位でSMB共有を作成することになります。
折角なので、ZFSのレイヤでも、ZFSデータセットとしても分けておきます。スナップショット単位の操作(zfs send/recv や destroy)を考えると、分けない理由があまり思いつきません。
- MacBook Pro の内蔵SSDが 4TB なので、 TimeMachine バックアップと、ストレージが溢れた状態でもある程度の世代が残るように、 5TB でクオータを設定します。
- 暗号化用の鍵をプロンプトにて指定します。鍵は別途管理します。
root@pve:~# zfs create -o quota=5T -o encryption=aes-256-gcm -o keyformat=passphrase \
-o keylocation=prompt array5/backup/timemachine/Arseille Enter new passphrase: Re-enter new passphrase:
TimeMachineで使用するユーザで、データセットのディレクトリに書き込めるようにしておきます。
# chown hasegaw:hasegaw /export/backup/timemachine/Arseille
hasegaw% touch /export/backup/timemachine/Arseille/hoge
hasegaw% unlink /export/backup/timemachine/Arseille/hoge
Samba のインストール
# apt upgrade
# apt install samba
smbpasswd
まだ Samba 用のパスワードを設定していなければ smbpasswd で設定しておきます。
今回はパスワード登録済みですが、新たに登録する場合は以下のイメージになります。
# smbpasswd -a hasegaw
※ -a は新規ユーザ登録。事前の /etc/passwd にそのユーザを作っておくこと
この SMB サーバに対しては私自身が普段使いのユーザアカウントで SMB マウントするため、今回はメインのユーザアカウントで TimeMachine 接続を想定します。
/etc/samba/smb.conf
もらってきた設定を貼り付けて少し弄っただけですが、以下の要領になります。
- fruit:time machine=yes
- fruit:time machine max size = 5000G: 設定は可能なのですが ZFSの quota で最大容量は伝わっているかなと思うので、いったん様子見で外しています。どのように振る舞うのかが判っていませんが、 ZFS 側の制限がハードクオータ、こちらの設定が TimeMachine に対する容量のヒントとして振る舞うように見えるので、 ZFS データセットよりもすこし小さい値に設定してほうがよいかもしれません。
- ea support = yes となっていますが実際には ZFS レベルで EA を有効化していません。現状、手許では問題なく動いているように見えていますが、将来的に見直すかもしれません。
[timemachine_Arseille] path = /export/backup/timemachine/Arseille browseable = yes read only = no guest ok = no writable = yes valid users = hasegaw fruit:time machine = yes ; fruit:time machine max size = 5000G ea support = yes
Samba プロセスを再起動しておきます。
root# systemctl restart smbd
■ Mac 側の設定
MacBook Proからのマウント確認
Finderから Cmd-K 、接続先に smb://hostname_or_ip_address/ を入力し接続します。
ユーザ名、パスワードを聞かれたら PVE ホスト側のユーザ名および先に smbpasswd で指定したパスワードを入力します。
TimeMachine バックアップ先となる timemachine_Arseille 共有が見えたら、それをマウントします。中にフォルダを作成できることを確認し、書き込みが正しくできることを確認できたらテストで作成したフォルダを削除し、共有を改めて空の状態にしておきます。
Finder の左側ペインから、該当する共有のマウントを解除します。
TimeMachine 設定
バックアップ対象の MacBook Pro 側で、以下の要領で TimeMachine 先を設定します。
root# tmutil setdestination smb://user:passwd@hostname/timemachine_Arseille root# tmutil startbackup
設定で TimeMachine を検索し、バックアップが開始されたことを確認します。
バックアップ終了後に ZFS データセットの割り当て量が増えていることが確認できます。
root@pve:~# zfs list array5/backup/timemachine/Arsielle NAME USED AVAIL REFER MOUNTPOINT array5/backup/timemachine/Arsielle 9.17G 4.99T 9.17G /export/backup/timemachine/Arsielle
■ 再起動後の暗号化解除
Proxmox VEで動作するZFSのプールのうち、該当する timemachine 領域をマウントするには鍵を提供する必要があります。このためホストの再起動後はプールが見えなくなり、バックアップや TimeMachine の内容確認などの操作ができなくなります。
zfs load-key コマンドにてプロンプトから鍵を入力しアンロックします。
root# zfs load-key array5/backup/timemachine/Arseille
root# systemctl restart smbd
プールが見えない状態では TimeMachine が sparse bundle を見つけられないため、バックアップは(安全に)失敗します。次回以降のバックアップで再マウントいs sparse bundle が見つかれば、バックアップは再開します。
■ ToDo: Mac持ち出し時の他ネットワークでのバックアップ防止
Mac の TimeMachine 機能はスケジュール通りにバックアップを繰り返すため、自宅から Mac を持ち出している間も、 tmutil setdestination で指定した hostname に対して user:passwd でログインしようとする挙動がつづきます。
セキュリティ的には気持ちが悪い挙動なので、ネットワーク条件に応じてTimeMachineを有効/無効に切り替える仕組みを今後検討したいと思います。
クラスCアドレスなので仮にインターネットに繋がっていても経路がなくSMB共有は繋がらないはずですが、接続先のWiFiが(以下自主規制)
かといって、この状況で IPsec などを使うのもどうかと思うし :S 自宅LANに接続していなければ自動バックアップ無効までやりたいと思いますが... これは後日としたいと思います。
0 件のコメント:
コメントを投稿