| 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 メモリーにはアクセスランプがついていないので、 書き込みのタイミングや具合はちょっと掴めませんが、 アクティビティ・モニターで見てみると控えめに同期しているとみえます。

Disk Activity

おしとやかに、前もって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/

See Also

🏝 tipping

🌷 sat ⚡️ goozenlab@getalby.com
🌻 bitcoin : bc1qnjhnsxgqah050995dkdveav4y3t3d7uxyme4ud

If you do send a tip, Please email me so that I can say thank you.