「Rsync によるフルシステムバックアップ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:Full system backup with rsyncへの転送ページ)
 
1行目: 1行目:
  +
[[Category:システムリカバリ]]
#redirect[[en:Full system backup with rsync]]
 
  +
[[cs:Full system backup with rsync]]
  +
[[en:Full system backup with rsync]]
  +
[[es:Full system backup with rsync]]
  +
[[zh-tw:Full system backup with rsync]]
  +
{{Related articles start}}
  +
{{Related|バックアッププログラム}}
  +
{{Related|rsync}}
  +
{{Related articles end}}
  +
この記事では [[rsync]] を使って、特定のフォルダを除いて、"/" ツリーのコピーを転送する方法を説明します。異なるサイズ、パーティションテーブル、ファイルシステムを使っていてもコピーができるので、{{ic|dd}} による[[ディスクのクローン]]よりも利用しやすく、ファイルのパーミッションや属性、アクセス制御リスト (ACL) や拡張属性を使うことができるため、{{ic|cp -a}} でコピーするよりも細かい制御ができます [http://www.bestbits.at/acl/about.html]。
  +
  +
どちらの方法でもシステムが動作していてもバックアップできます。バックアップには時間がかかるため、バックアップ中はウェブを自由にブラウズすると良いでしょう。最悪の場合でも、バックアップをリストア (あるいはバックアップを起動) したときに保存していなかったタブが開けなくなる程度です。大したことではありません。
  +
  +
== コマンドでバックアップ ==
  +
  +
以下のコマンドは [https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html bash] や [http://zsh.sourceforge.net/Doc/Release/Expansion.html#Brace-Expansion zsh] シェルで利用できるブレース展開を使っています。別の[[コマンドシェル|シェル]]を使用する場合、{{ic|--exclude}} を手動で繰り返す必要があります。
  +
  +
# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / ''/path/to/backup/folder''
  +
  +
{{ic|-aAX}} オプションによってファイルはアーカイブモードで転送されるので、シンボリックリンクやデバイス、パーミッションや所有者、変更日時、[[ACL]] あるいは拡張属性は保たれます。
  +
  +
{{ic|--exclude}} オプションは指定したパターンにマッチするファイルを除外します。{{ic|/dev}}, {{ic|/proc}}, {{ic|/sys}}, {{ic|/tmp}}, {{ic|/run}} は起動時に作成されるものなので除外しています (フォルダそのものは作成されませんが)、{{ic|/lost+found}} はファイルシステムが作成します。除外パターンをクォートで囲っているのは[[コマンドシェル|シェル]]によって展開されないようにするためで、特に [[SSH]] を使ってバックアップする場合は必須です。除外パターンの末尾に付いている {{ic|*}} はディレクトリが存在しなかった場合に確実に作成するよう指示します。
  +
  +
{{Note|
  +
* システムのバックアップを {{ic|/mnt}} や {{ic|/media}} 以外のどこかに保存する場合、無限ループしないようにバックアップ先を除外パターンのリストに追加してください。
  +
* システム内にバインドマウントが存在する場合、バインドマウントの中身が何度もコピーされないように同じく除外してください。
  +
* [[スワップ#スワップファイル|スワップファイル]]を使っている場合も、除外してください。
  +
* {{ic|/home/}} フォルダをバックアップするときは除外リストをよく考えてください。様々なデータを入れている場合、システムよりもデータの方が容量が大きくなっているのが普通です。システムにインストールしているソフトウェアにあわせて {{ic|/home/*/.thumbnails/*}}, {{ic|/home/*/.cache/mozilla/*}}, {{ic|/home/*/.cache/chromium/*}}, {{ic|/home/*/.local/share/Trash/*}} などの重要でないサブディレクトリは除外するようにしてください。[[GVFS]] をインストールしている場合、rsync にエラーが起こらないように {{ic|/home/*/.gvfs}} を除外してください。
  +
}}
  +
  +
以下のように [[rsync]] のオプションを追加するのも良いでしょう (完全なオプションのリストは {{ic|man rsync}} を見てください):
  +
  +
* ハードリンクを頻繁に使用している場合、{{ic|-H}} オプションを追加する価値があります。メモリを大量に使用するためデフォルトではオフになっていますが、最近のマシンでは問題ないはずです。{{ic|/usr/}} フォルダの下には大量にハードリンクが存在するため、ディスク容量が節約できます。
  +
* 同一のバックアップフォルダで複数回コマンドを実行する場合は rsync の {{ic|--delete}} オプションを追加すると良いでしょう。追加するときはバックアップ元のパスを {{ic|/*}} で終わらせないようにしてください。そうしないとバックアップ元ディレクトリのサブディレクトリのファイルにしかオプションの効果が適用されず、バックアップ元ディレクトリの直下にあるファイルに効果がありません。
  +
* 仮想ディスクや [[Docker]] イメージなどのスパースファイルを使用している場合、{{ic|-S}} オプションを追加するべきです。
  +
* {{ic|--numeric-ids}} オプションはユーザーやグループ名のマッピングを無効化して、代わりに数字のグループやユーザー ID が転送されます。[[SSH]] でバックアップする場合やライブ環境を使って別のシステムディスクをバックアップするようなときに有用です。
  +
* {{ic|-v}} ではなく {{ic|1=--info=progress2}} オプションを使うと、膨大なファイルのリストの代わりに全体の進捗状況や転送速度が表示されます。
  +
  +
== 自動バックアップ ==
  +
  +
[[バックアッププログラム#Rsync タイプのバックアップ]]を見てください。
  +
  +
== 起動要件 ==
  +
  +
バックアップを起動できるようにしておくとファイルシステムが破損したりアップデートでシステムが壊れたときに便利です。また、バックアップをアップデートのテストベッドとして [testing] リポジトリを有効にするなどして使うこともできます。システム全体を起動したい別のパーティションやドライブに転送したら、後はバックアップの {{ic|/etc/fstab}} とブートローダーの設定ファイルを更新するだけで起動させることができます。
  +
  +
=== fstab の更新 ===
  +
  +
再起動しないで、バックアップの [[fstab]] を編集して変更を反映させます:
  +
{{hc|/path/to/backup/etc/fstab|2=
  +
tmpfs /tmp tmpfs nodev,nosuid 0 0
  +
  +
<font color=#888888><i>/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</i></font>}}
  +
  +
rsync で root ファイルシステム''全体''を再帰的にコピーしているので、{{ic|sda}} のマウントポイントは全て問題があり、バックアップの起動に失敗します。以下の例では、問題のあるエントリを全て単一のエントリに置き換えています:
  +
  +
{{hc|/path/to/backup/etc/fstab|
  +
tmpfs /tmp tmpfs nodev,nosuid 0 0
  +
  +
/dev/'''sdb1''' / ext4 defaults 0 1}}
  +
  +
適切なデバイス名とファイルシステムタイプを使うようにしてください。
  +
  +
=== ブートローダーの設定ファイルの更新 ===
  +
  +
このセクションではシステムを他のドライブやパーティションにバックアップして、現在のブートローダーが問題なく動作することが前提で、バックアップからも起動できるようにします。
  +
  +
[[Syslinux]] の場合、現在使用しているエントリを複製するだけです。別のドライブやパーティションを使うように設定してください。
  +
  +
{{Tip|{{ic|syslinux.cfg}} を編集するかわりに、起動時にメニューを一時的に編集することも可能です。メニューが表示されたら、{{ic|Tab}} キーを押して、当該エントリを修正してください。パーティション番号は1から始まり、ドライブは0から数えられます。}}
  +
  +
[[GRUB]] の場合、自動的に[[GRUB#メイン設定ファイルの生成|メインの設定ファイルを再生成]]することを推奨します。
  +
  +
{{ic|/boot/grub/grub.cfg}} の新しいメニューエントリを確認してください。UUID が新しいパーティションになっていることを確認します。変えられていないと古いシステムが起動してしまいます。パーティションの UUID は以下のようにして確認してください:
  +
  +
# lsblk -no NAME,UUID /dev/sdb3
  +
  +
{{ic|/dev/sdb3}} は使用するパーティションに置き換えて下さい。GRUB から起動できるパーティションの UUID を確認するには、grep を使用:
  +
  +
# grep UUID= /boot/grub/grub.cfg
  +
  +
lsblk で確認したパーティションが grep で確認できないときは、grub-mkconfig が正しく機能していません。複製したファイルシステムに [[Change Root|chroot]] して [[mkinitcpio]] を使う必要があります。例えば、rsync を使って root を {{ic|/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 が記述されていることを確認してください。
  +
  +
== 最初の起動 ==
  +
  +
コンピュータを再起動してブートローダーから適切なエントリを選択してください。これで初めてシステムがロードされます。周辺機器が全て検出されて {{ic|/}} に空のフォルダが作成されます。
  +
  +
{{ic|/etc/fstab}} を再度編集することで先に削除したパーティションやマウントを追加することができます。
  +
  +
HDD から SSD (ソリッドステートドライブ) にデータを転送した場合、TRIM を忘れずに有効化してください。また、HDD や tmpfs のマウントポイントを使うことで SSD の摩耗を減らすことができます。詳しくは[[パフォーマンスの最大化#ファイルを tmpfs に再配置する]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を参照。
  +
  +
{{Note|全てのサービスやデーモンが正しく起動させるために再起動をもう一度しなくてはならないことがあります。例えば、モジュールのロードエラーで pulseaudio が初期化されない場合、dbus.service を再起動すれば動作するようになります。}}
  +
  +
== 参照 ==
  +
  +
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ Howto – local and remote snapshot backup using rsync with hard links] Includes file deduplication with hard-links, MD5 integrity signature, 'chattr' protection, filter rules, disk quota, retention policy with exponential distribution (backups rotation while saving more recent backups than older)

2016年1月9日 (土) 00:49時点における版

関連記事

この記事では 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 を再起動すれば動作するようになります。

参照