Rsync によるフルシステムバックアップ

提供: ArchWiki
2016年1月9日 (土) 00:49時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

この記事では rsync を使って、特定のフォルダを除いて、"/" ツリーのコピーを転送する方法を説明します。異なるサイズ、パーティションテーブル、ファイルシステムを使っていてもコピーができるので、dd によるディスクのクローンよりも利用しやすく、ファイルのパーミッションや属性、アクセス制御リスト (ACL) や拡張属性を使うことができるため、cp -a でコピーするよりも細かい制御ができます [1]

どちらの方法でもシステムが動作していてもバックアップできます。バックアップには時間がかかるため、バックアップ中はウェブを自由にブラウズすると良いでしょう。最悪の場合でも、バックアップをリストア (あるいはバックアップを起動) したときに保存していなかったタブが開けなくなる程度です。大したことではありません。

コマンドでバックアップ

以下のコマンドは bashzsh シェルで利用できるブレース展開を使っています。別のシェルを使用する場合、--exclude を手動で繰り返す必要があります。

# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder

-aAX オプションによってファイルはアーカイブモードで転送されるので、シンボリックリンクやデバイス、パーミッションや所有者、変更日時、ACL あるいは拡張属性は保たれます。

--exclude オプションは指定したパターンにマッチするファイルを除外します。/dev, /proc, /sys, /tmp, /run は起動時に作成されるものなので除外しています (フォルダそのものは作成されませんが)、/lost+found はファイルシステムが作成します。除外パターンをクォートで囲っているのはシェルによって展開されないようにするためで、特に SSH を使ってバックアップする場合は必須です。除外パターンの末尾に付いている * はディレクトリが存在しなかった場合に確実に作成するよう指示します。

ノート:
  • システムのバックアップを /mnt/media 以外のどこかに保存する場合、無限ループしないようにバックアップ先を除外パターンのリストに追加してください。
  • システム内にバインドマウントが存在する場合、バインドマウントの中身が何度もコピーされないように同じく除外してください。
  • スワップファイルを使っている場合も、除外してください。
  • /home/ フォルダをバックアップするときは除外リストをよく考えてください。様々なデータを入れている場合、システムよりもデータの方が容量が大きくなっているのが普通です。システムにインストールしているソフトウェアにあわせて /home/*/.thumbnails/*, /home/*/.cache/mozilla/*, /home/*/.cache/chromium/*, /home/*/.local/share/Trash/* などの重要でないサブディレクトリは除外するようにしてください。GVFS をインストールしている場合、rsync にエラーが起こらないように /home/*/.gvfs を除外してください。

以下のように rsync のオプションを追加するのも良いでしょう (完全なオプションのリストは man rsync を見てください):

  • ハードリンクを頻繁に使用している場合、-H オプションを追加する価値があります。メモリを大量に使用するためデフォルトではオフになっていますが、最近のマシンでは問題ないはずです。/usr/ フォルダの下には大量にハードリンクが存在するため、ディスク容量が節約できます。
  • 同一のバックアップフォルダで複数回コマンドを実行する場合は rsync の --delete オプションを追加すると良いでしょう。追加するときはバックアップ元のパスを /* で終わらせないようにしてください。そうしないとバックアップ元ディレクトリのサブディレクトリのファイルにしかオプションの効果が適用されず、バックアップ元ディレクトリの直下にあるファイルに効果がありません。
  • 仮想ディスクや Docker イメージなどのスパースファイルを使用している場合、-S オプションを追加するべきです。
  • --numeric-ids オプションはユーザーやグループ名のマッピングを無効化して、代わりに数字のグループやユーザー ID が転送されます。SSH でバックアップする場合やライブ環境を使って別のシステムディスクをバックアップするようなときに有用です。
  • -v ではなく --info=progress2 オプションを使うと、膨大なファイルのリストの代わりに全体の進捗状況や転送速度が表示されます。

自動バックアップ

バックアッププログラム#Rsync タイプのバックアップを見てください。

起動要件

バックアップを起動できるようにしておくとファイルシステムが破損したりアップデートでシステムが壊れたときに便利です。また、バックアップをアップデートのテストベッドとして [testing] リポジトリを有効にするなどして使うこともできます。システム全体を起動したい別のパーティションやドライブに転送したら、後はバックアップの /etc/fstab とブートローダーの設定ファイルを更新するだけで起動させることができます。

fstab の更新

再起動しないで、バックアップの fstab を編集して変更を反映させます:

/path/to/backup/etc/fstab
tmpfs        /tmp          tmpfs     nodev,nosuid             0   0

/dev/sda1    /boot         ext2      defaults                 0   2
/dev/sda5    none          swap      defaults                 0   0
/dev/sda6    /             ext4      defaults                 0   1
/dev/sda7    /home         ext4      defaults                 0   2

rsync で root ファイルシステム全体を再帰的にコピーしているので、sda のマウントポイントは全て問題があり、バックアップの起動に失敗します。以下の例では、問題のあるエントリを全て単一のエントリに置き換えています:

/path/to/backup/etc/fstab
tmpfs        /tmp          tmpfs     nodev,nosuid             0   0

/dev/sdb1    /             ext4      defaults                 0   1

適切なデバイス名とファイルシステムタイプを使うようにしてください。

ブートローダーの設定ファイルの更新

このセクションではシステムを他のドライブやパーティションにバックアップして、現在のブートローダーが問題なく動作することが前提で、バックアップからも起動できるようにします。

Syslinux の場合、現在使用しているエントリを複製するだけです。別のドライブやパーティションを使うように設定してください。

ヒント: syslinux.cfg を編集するかわりに、起動時にメニューを一時的に編集することも可能です。メニューが表示されたら、Tab キーを押して、当該エントリを修正してください。パーティション番号は1から始まり、ドライブは0から数えられます。

GRUB の場合、自動的にメインの設定ファイルを再生成することを推奨します。

/boot/grub/grub.cfg の新しいメニューエントリを確認してください。UUID が新しいパーティションになっていることを確認します。変えられていないと古いシステムが起動してしまいます。パーティションの UUID は以下のようにして確認してください:

# lsblk -no NAME,UUID /dev/sdb3

/dev/sdb3 は使用するパーティションに置き換えて下さい。GRUB から起動できるパーティションの UUID を確認するには、grep を使用:

# grep UUID= /boot/grub/grub.cfg

lsblk で確認したパーティションが grep で確認できないときは、grub-mkconfig が正しく機能していません。複製したファイルシステムに chroot して mkinitcpio を使う必要があります。例えば、rsync を使って root を /dev/sdb3 に複製した場合、以下のように mkinitcpio を使います:

# mkdir /mnt/arch
# mount /dev/sdb3 /mnt/arch
# cd /mnt/arch
# mount -t proc proc proc/
# mount --rbind /sys sys/
# mount --rbind /dev dev/
# chroot /mnt/arch /bin/bash
# mkinitcpio -p linux

終了後、再度 grub.cfg を生成して新しい UUID が記述されていることを確認してください。

最初の起動

コンピュータを再起動してブートローダーから適切なエントリを選択してください。これで初めてシステムがロードされます。周辺機器が全て検出されて / に空のフォルダが作成されます。

/etc/fstab を再度編集することで先に削除したパーティションやマウントを追加することができます。

HDD から SSD (ソリッドステートドライブ) にデータを転送した場合、TRIM を忘れずに有効化してください。また、HDD や tmpfs のマウントポイントを使うことで SSD の摩耗を減らすことができます。詳しくはパフォーマンスの最大化#ファイルを tmpfs に再配置するソリッドステートドライブ#SSD の読み書きを最小化するヒントを参照。

ノート: 全てのサービスやデーモンが正しく起動させるために再起動をもう一度しなくてはならないことがあります。例えば、モジュールのロードエラーで pulseaudio が初期化されない場合、dbus.service を再起動すれば動作するようになります。

参照