OpenZFS on OS Xでバックアップ
概要
使っているMacBook Pro(15-inch, Mid 2015)のバッテリーが膨らんできたので、 Apple Storeへ持ち込みでバッテリー交換に出そうかと。 修理の前にはバックアップが必要らしいので、 ZFSでホームディレクトリのみをバックアップしてみた。 (基本的にシステムのフルバックアップは必要のない使い方をしている。)
MacOSのTimeMachineは複数HDDのTimeMachineのデータを一つのHDDへ結合したり、 別FSに移行したりすることが困難だったので、最初からZFSにしてみる。 なんせ、ZFSならばFreeBSDでもLinuxでも読めるし、 普段は外付けのUSBのHDDにバックアップしておいて、 あとでRAIDZを組んだNASにsend|receiveもできる。
OpenZFSをインストールする。
↓のページを参考にしてOpenZFSをインストールする。
ディスクの確認
diskutilなどでZFSを使用するディスクを決める。 今回はUSB接続HDD(2TB)の/dev/disk3を利用する。
$ diskutil list /dev/disk3
/dev/disk3 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk3
1: EFI EFI 209.7 MB disk3s1
2: Apple_HFS usbwd00 2.0 TB disk3s2
プールの作成
プールの作成は既存のデータが消えるため、ディスクの指定はよく確認する。
MacOSはデフォルトの設定であればファイル名の大文字小文字を区別しないのと、 Unicodeの正規化がNFDという方法のため、下記のように作成時に指定する。 これらのオプションはプール作成後では変更不可能になる。
sudo zpool create -f -o ashift=12 -O casesensitivity=insensitive -O normalization=formD usb2tb disk3
プールが作成され、パーティションが変更されていることが確認できる。
$ diskutil list /dev/disk3
/dev/disk3 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk3
1: ZFS usb2tb 2.0 TB disk3s1
2: 6A945A3B-1DD2-11B2-99A6-080020736631 8.4 MB disk3s9
調整
パフォーマンスを上げたい場合は、 下記のようにして圧縮(lz4)を有効にし、atimeを無効にする。
実際のデータの圧縮率を確かめるときは↓のようにすればよい。
$ sudo zfs get compressratio
NAME PROPERTY VALUE SOURCE
usb2tb compressratio 1.42x -
usb2tb/backup compressratio 1.42x -
usb2tb/backup/mbphome compressratio 1.42x -
データセットの作成
今回は usb2tb/backup/mbphome というデータセットにバックアップをするので、 下記のようにして作成する。
下記のようにデータセットが作成され、 /Volumes/usb2tb/backup/mbphome にマウントされている事がわかる。
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
usb2tb 2.15M 1.76T 1.14M /Volumes/usb2tb
usb2tb/backup 832K 1.76T 416K /Volumes/usb2tb/backup
usb2tb/backup/mbphome 416K 1.76T 416K /Volumes/usb2tb/backup/mbphome
違う場所にマウントしたい場合は↓のように設定する。
バックアップ
rsyncを使ってバックアップ。
スナップショット
スナップショットを作成する。
作成されたスナップショットは↓で確認できる。
$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
usb2tb/backup/mbphome@1508171437 0 - 156G /Volumes/usb2tb/backup/mbphome/.zfs/snapshot/1508171437