| tags:macos tips&tricks zfs categories:computing
OpenZFS ミラーリング
ZFS を検証中、第2弾です。 今回は複数端末間でのファイル同期を念頭に、 持ち出し用を想定して小規模なミラーリンングを構築します。
ThinkPad(メイン)<-> 32GB USBMemory <-> MBAir11(ちょい外出)
と3点ミラーリンングを考えてます。繋いだり繋がなかったり、ゆるゆる運用します。
最初に手元にある MacbookAir11 とメモリースティックの2つでミラーリングを設定します。
まずは、各々のパーティションをフォーマットします。マックではDisk Utility
にて 32GB の新しいパーティションを作成します。
32GB の USB ディスクは MBR になっているのをGPTに、こちらも Disk Utility を使って変更します。
そしてマックの新しいパーティションと USB メモリーのパーティションをフォーマットします。
USB メッモリーはノートブックで一つしか SSD を積んでいないのにdisk3
でした。
diskutil eraseVolume ZFS VOLUME_NAME DISK#P#
のコマンドで行います。エラーが出ますが問題ないようです。ディスク・パーティション番号は要注意です。DiskUtility で**再度確認!**をしましょう。
gallo:~ jin$ sudo diskutil eraseVolume ZFS ZMIRA01 disk3s2
gallo:~ jin$ sudo diskutil eraseVolume ZFS ZMIRA02 disk0s6
ミラーリングを構築します。とりあえず 2 つのパーティションを使います。
コマンドはzpool create -f -o ashift=13 -O casesensitivity=insensitive -O compression=lz4 -O normalization=formD POOL_NAME mirror DISK#1 DISK#2
です。後でディスクの追加をすることも可能です。
同時に、ボリュームへの書き込みは権限が必要と出てくるのでパーミションの変更も行います。
gallo:~ jin$ sudo zpool create -f -o ashift=13 -O casesensitivity=insensitive -O compression=lz4 -O normalization=formD Work mirror disk0s6 disk3s2
gallo:~ jin$ zpool status
pool: Work
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
Work ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
disk0s6 ONLINE 0 0 0
disk3s2 ONLINE 0 0 0
errors: No known data errors
gallo:~ jin$ sudo chmod 777 /Volumes/Work
以上でミラーリングの構築は完了です。しばしこの状態で運用していきます。
運用
ストレステストというか、本番機で問題になるのは避けたいので、色々とテストしました。 まず、いきなり USB メモリーをブチッと抜くと、
gallo:~ jin$ zpool status
pool: Work
state: DEGRADED
....
mirror-0 DEGRADED 0 0 0
media-B6AF4D9A-9930-4079-9D67-E1E6020C0BED ONLINE 0 0 0
12934696169980452171 UNAVAIL 0 0 0 was /private/var/run/disk/by-id/media-871E499C-DE42-4E33-A3B2-1530B7575307
UNAVAILになります。使用上問題はないようですが、シャットダウン時に歯車がぐるぐる、強制終了。ちと怖い。
ディスクをオンラインに戻すには、zpool online POOL_NAME DISK_ID
を実行します。
ディスク ID はmedia-B6AF4D9A-xxxx
ディスクに割当られた番号です。
何事もなかったように ONLINE に戻ります。zpool status
にて経過情報が見ることができます。
gallo:~ jin$ zpool status Work
pool: Work
state: ONLINE
…
scan: resilver in progress since Tue Jul 30 07:09:24 2019
4.12G scanned at 50.8M/s, 1.40G issued at 17.2M/s, 4.12G total
1.44G resilvered, 33.88% done, 0 days 00:02:41 to go
…
NAME STATE READ WRITE CKSUM
Work ONLINE 0 0 22
mirror-0 ONLINE 0 0 44
media-B6AF4D9A-9930-4079-9D67-E1E6020C0BED ONLINE 0 0 44
media-871E499C-DE42-4E33-A3B2-1530B7575307 ONLINE 0 0 10
errors: 1 data errors, use '-v' for a list
USB メモリーにはアクセスランプがついていないので、 書き込みのタイミングや具合はちょっと掴めませんが、 アクティビティ・モニターで見てみると控えめに同期しているとみえます。
おしとやかに、前もってzpool offline POOL_NAME DISK_ID
でオフラインをするとOFFLINEになります。少しだけ安心。
gallo:~ jin$ zpool offline Work media-871E499C-DE42-4E33-A3B2-1530B7575307
gallo:~ jin$ zpool status
pool: Work
state: DEGRADED
....
mirror-0 DEGRADED 0 0 0
media-B6AF4D9A-9930-4079-9D67-E1E6020C0BED ONLINE 0 0 0
media-871E499C-DE42-4E33-A3B2-1530B7575307 OFFLINE 0 0 0
errors: No known data errors
で、USB を抜いて作業。そして、USB メモリーを再度接続しても自動ではマウントはされませんでした。
ブチっと抜いて、適当にぶっさして、勝手に同期という訳には行きませんでした、無念。
まぁ、オンラインにして同期、そして他の端末に挿したままブートとちょっと考えながら差し替えを行えば良いだけです。 USB も最近の少し早いやつなので、text ベースの作業なら引きずられることはないだろうと思います。
取り敢えず、このまま検証続行。
※ USB メモリーが粗悪品なのか分かりませんが、刺しっぱなしだとかなりメモリーが熱くなる。
今のところ端末はひとつですし、同期よりもバックアップに近い使い方になっているので、 再起動時に USB メモリーを刺して、 起動後に同期が終了してるだろうタイミングでオフラインにし抜いて使ってます。 (rsync などでバックアップを取ったりするよりは楽かも。。)
エラー対応
色々抜き差ししたり使っているとエラーが上がってきます。
すぐに消えてるかなと思いきや、結構居座っています。
そんな時はzpool scrub
で修復します。
コマンドはすぐに復帰しますが、
バックグランドで動いています。
jin@gallo:~ $ sudo zpool scrub Work
3点ミラーリング(未検証)
現在手元にもう一方の端末がないので行なっていませんが、
同期先の追加はzpool attach POOL_NAME
、
jin@guiness:~ $ sudo zpool attach POOL_NAME media-B6AF4D9A-9930-xxx newdisk
で3点ミラーの構築が完了。(夢の中)
帰国後の 9 月半ばに追記します。
参考:https://postd.cc/who-needs-git-when-you-got-zfs/