zfs clone と zfs send で非ミラーファイルシステムを分割2018年09月15日 16時48分38秒

ZFS のファイルシステムを分割したかったのだが、zfs 自体には分割の機能は無い。zpool だと、ミラー型のプールは分割出来るが、こちらはプール単位になってしまい、全てのファイルシステムが複製される。

今回、分割したいと思った理由はバックアップ先の zpool の容量が足りなくなったから。バックアップをとらなくても何とかなるファイルを複製するのを止めたかったのだが、ファイルシステムに混ざっていたので単純な削除では無理だからだ。

zfs clone はファイルシステムを複製する機能だ。これは snapshot を作成し、そこからの差分を元にファイルシステムを利用する機能。これを使えば、元のファイルシステムを複数に分割して使うことが出来る。しかし、元のスナップショットがバックアップを止めたいファイルを保持したままになるので今回の意図には沿わない。

そこで、今回 zfs snapshot と zfs clone で一時的にファイルシステムを複製。そこから対象外のファイルを削除した後に、zfs send と zfs receive で全く別のファイルシステムとして作ることにした。

今回の例として、BSD 関連のファイルをダウンロードしてあった download/BSD ファイルシステムを各々に分けて download/FreeBSD と download/NetBSD の zfs ファイルシステムにする。

$ zfs list -t all
NAME           USED  AVAIL  REFER  MOUNTPOINT
download       421M   411M    23K  /mnt/download
download/BSD   421M   411M   421M  /mnt/download/B
$ ls /mnt/download/ZFS/*
BSD:
FreeBSD NetBSD

FreeBSD:
FreeBSD-11.2-RELEASE-i386.vmdk.xz

NetBSD:
netbsd-8.0-i386-boot-com.iso
実験用に小さめのプールを準備して、各々に一つずつファイルを置いた。
$ zfs snapshot download/BSD@today
$ zfs clone download/BSD@today download/freebsd
$ rm -rf /mnt/download/freebsd/NetBSD
$ zfs snapshot download/freebsd@only
$ zfs send download/freebsd@only | zfs receive download/FreeBSD@only
BSD ファイルシステムから snapshot と clone で freebsd とし、そこから NetBSD を削除。zfs send と receive で元の BSD ファイルシステムとの関係を切断する。

zfs send と receive で一つ目のファイルシステムを処理し終えた状態。

$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                640M   192M    23K  /mnt/download
download/BSD            421M   192M   421M  /mnt/download/BSD
download/freebsd         13K   192M   219M  /mnt/download/freebsd
download/freebsd@only      0      -   219M  -
download/FreeBSD        219M   192M   219M  /mnt/download/FreeBSD
download/FreeBSD@only      0      -   219M  -

NetBSD の方は BSD ファイルシステムの名前の変更した後に、FreeBSD を消す。

$ zfs destroy download/BSD@today
$ zfs rename download/BSD download/NetBSD
$ rm -rf /mnt/download/NetBSD/FreeBSD
$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                422M   409M    23K  /mnt/download
download/FreeBSD        219M   409M   219M  /mnt/download/FreeBSD
download/FreeBSD@only    13K      -   219M  -
download/NetBSD         202M   409M   202M  /mnt/download/NetBSD
これで download/BSD を download/FreeBSD と download/NetBSD に分割できた。

もっと手間の掛かるファイルの選別が必要なら clone と promote を用いて、もっと安全に操作することも出来る。NetBSD のファイルの選別も独立したファイルシステム上で行なって、最終確認が終った後に。古い BSD ファイルシステムを削除する手順にすれば、間違ってファイルを消してもやり直しが効く。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2018/09/15/8960767/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。