LoginSignup
0
0

More than 1 year has passed since last update.

UEFIブートでファイルシステムがZFSなFreeBSDのバックアップと復元

Posted at

初めに

UEFIブートでファイルシステムがZFSなFreeBSDのシステムの、バックアップと復元の手順をまとめてみました。

前提

  • UEFIによるブート
  • OSはFreeBSD 13.0-RELEASE amd64
  • ディスクはSATA接続
  • ZFSは単独ディスクによるRAID 0(ストライプ)構成
  • バックアップ用のディスクにデータをバックアップして、後にそのデータを使ってシステムを復元

システムのバックアップ

バックアップの手順は以下の通りです。

  1. データバックアップ用のディスクをシステムに接続
  2. ブートメディアでシステムを起動
  3. データバックアップ用のディスクにZFSのプールとファイルシステムを作成してマウント
  4. バックアップ対象のディスクのZFSのプールをインポート
  5. バックアップ対象のディスクのZFSのデータをデータバックアップ用のディスクにバックアップ
  6. バックアップ対象のディスクのESP(EFIシステムパーティション)のデータをデータバックアップ用のディスクにバックアップ
  7. バックアップ対象のディスクのパーティション情報をデータバックアップ用のディスクにバックアップ
  8. ZFSのプールをエクスポート
  9. システムをシャットダウン

以下、各手順の詳細を説明します。

ブートメディアでシステムを起動

13.0-RELEASE amd64のブートメディアでシステムを起動し、FreeBSDのインストーラーが起動されたらShellを選択します。起動後のデバイスファイルは以下の通りです。

# ls -l /dev/ada?
crw-r-----  1 root  operator  0x5c 12月  5 10:44 /dev/ada0
crw-r-----  1 root  operator  0x5d 12月  5 10:44 /dev/ada1

/dev/ada0がバックアップ対象のディスクで、/dev/ada1がデータバックアップ用のディスクです。

データバックアップ用のディスクにZFSのプールとファイルシステムを作成してマウント

バックアップデータ保存先のディスクのファイルシステムは、FreeBSDが読み書きできるものなら何でもよいのですが、ここではZFSを使うことにします。

まず/dev/ada1にパーディションを作成します。

# gpart create -s GPT ada1
ada1 created
# gpart add -t freebsd-zfs ada1
ada1p1 added
# gpart show ada1
=>       40  209715120  ada1  GPT  (100G)
         40  209715120     1  freebsd-zfs  (100G)

作成されたパーティション(/dev/ada1p1)にZFSのプールとファイルシステムを作成してマウントします。インストールメディアからブートした場合/はread-onlyなので、/tmpの下にディレクトリを作成してそこにマウントします.

# mkdir /tmp/zbackup
# zpool create -R /tmp/zbackup zbackup /dev/ada1p1

バックアップ対象のディスクのZFSのプールをインポート

バックアップ対象のZFSのプールをインポートします。このプールも同様に/tmpの下にディレクトリを作成してそこにマウントします。

# mkdir /tmp/zroot
# zpool import -R /tmp/zroot zroot

バックアップ対象のディスクのZFSのデータをデータバックアップ用のディスクにバックアップ

まずバックアップを取るスナップショットを作成します。

# zfs snapshot -r zroot@backup

作成したスナップショットのデータをzfs send -R/tmp/zbackupの下にバックアップします。後でこのデータから復元するためには-Rオプションを指定することが重要です。

# zfs send -R -v zroot@backup > /tmp/zbackup/zbackup/zroot@backup.zfs-send.dat

バックアップ対象のディスクのESP(EFIシステムパーティション)のデータをデータバックアップ用のディスクにバックアップ

ESPを/tmp/espの下にマウントします。

# mkdir /tmp/esp
# mount -t msdosfs /dev/ada0p1 /tmp/esp

バックアップ対象のディスクのESPのデータをtarでバックアップします。

# cd /tmp/esp
# tar cfv /tmp/zbackup/zbackup/efi.tar .

バックアップ対象のディスクのパーティション情報をデータバックアップ用のディスクにバックアップ

バックアップ対象のディスクのパーティション情報をgpartを使ってバックアップします。

# gpart backup ada0 > /tmp/zbackup/zbackup/gpart-backup-ada0.log

ZFSのプールをエクスポート

バックアップ対象とバックアップ先と双方のZFSのプールをエクスポートします。

# zfs unmount -a
# zpool export -a

システムの復元

復元の手順は以下の通りです。

  1. ブートメディアでシステムを起動
  2. バックアップ用ディスクのZFSのプールをインポート
  3. 復元対象のディスクにパーティション情報を復元
  4. ZFS用のパーティションに空のプールを作成
  5. バックアップされたZFSのデータを復元
  6. ZFSのプールのbootfsプロパティを設定
  7. EPSを初期化
  8. バックアップされたEPSのデータを復元
  9. ZFSのプールをエクスポート
  10. システムをシャットダウンしてデータバックアップ用のディスクをシステムから外す
  11. 新しいブートディスクからシステムを起動

以下、各手順の詳細を説明します。

ブートメディアでシステムを起動

バックアップの時と同様にブートメディアでシステムを起動します。/dev/ada0はまっさらなディスクだとして、これに/dev/ada1に保存してあるデータを復元していきます。

バックアップ用ディスクのZFSのプールをインポート

前述の通りこの状態では/はread-onlyなので、-Rオプションを指定して/tmp/zbackupの下にインポートします。

# mkdir /tmp/zbackup
# zpool import -R /tmp/zbackup zbackup

新しいディスクにパーティションを復元

バックアップ時に保存したパーティション情報を使ってgpart/dev/ada0にパーティション情報を復元します。

# gpart restore -l ada0 < /tmp/zbackup/zbackup/gpart-backup-ada0.log

ZFS用のパーティションに空のプールを作成

/dev/ada0s3に空のZFSのプールを作成します。作成されたプールは/tmp/zrootの下にマウントします。

# mkdir /tmp/zroot
# zpool create -R /tmp/zroot zroot /dev/ada0p3

バックアップされたZFSのデータを新しいディスクに復元

zfs recvを実行してバックアップデータを新たに作成したプールに書き込みます。

# zfs recv -F zroot < /tmp/zbackup/zbackup/zroot@backup.zfs-send.dat

ZFSのプールのbootfsプロパティを設定

以下のコマンドを実行して新しいプールのbootfsプロパティを設定します。

# zpool set bootfs=zroot/ROOT/default zroot

ESPを初期化

newfs_msdosコマンドを用いてESPを初期化します。

# newfs_msdos -F 32 -c 1 -L EFISYS /dev/ada0p1

バックアップされたEPSのデータを復元

まず初期化したESPを/tmp/espにマウントします

# mkdir /tmp/esp
# mount -t msdosfs /dev/ada0p1 /tmp/esp

そしてバックアップしたESPのデータをtarで復元します。

# cd /tmp/esp
# tar xfpv /tmp/zbackup/zbackup/efi.tar

インポートしたZFSのプールをエクスポート

バックアップデータのプールと新規に作成したプールの両方をエクスポートします。

# zfs unmount -a
# zpool export -a

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0