「Rsync によるフルシステムバックアップ」の版間の差分
(→コマンドでバックアップ: 情報を更新) |
(→fstab の更新: 並びを修正) |
||
56行目: | 56行目: | ||
再起動しないで、バックアップの [[fstab]] を編集して変更を反映させます: |
再起動しないで、バックアップの [[fstab]] を編集して変更を反映させます: |
||
{{hc|/path/to/backup/etc/fstab|2= |
{{hc|/path/to/backup/etc/fstab|2= |
||
− | tmpfs |
+ | tmpfs /tmp tmpfs nodev,nosuid 0 0 |
− | /dev/sda1 /boot |
+ | /dev/sda1 /boot ext2 defaults 0 2 |
− | /dev/sda5 none |
+ | /dev/sda5 none swap defaults 0 0 |
− | /dev/sda6 / |
+ | /dev/sda6 / ext4 defaults 0 1 |
− | /dev/sda7 /home ext4 defaults |
+ | /dev/sda7 /home ext4 defaults 0 2</i></font>}} |
rsync で root ファイルシステム''全体''を再帰的にコピーしているので、{{ic|sda}} のマウントポイントは全て問題があり、バックアップの起動に失敗します。以下の例では、問題のあるエントリを全て単一のエントリに置き換えています: |
rsync で root ファイルシステム''全体''を再帰的にコピーしているので、{{ic|sda}} のマウントポイントは全て問題があり、バックアップの起動に失敗します。以下の例では、問題のあるエントリを全て単一のエントリに置き換えています: |
||
{{hc|/path/to/backup/etc/fstab| |
{{hc|/path/to/backup/etc/fstab| |
||
− | tmpfs |
+ | tmpfs /tmp tmpfs nodev,nosuid 0 0 |
− | /dev/'''sdb1''' |
+ | /dev/'''sdb1''' / ext4 defaults 0 1}} |
適切なデバイス名とファイルシステムタイプを使うようにしてください。 |
適切なデバイス名とファイルシステムタイプを使うようにしてください。 |
2022年7月18日 (月) 14:06時点における版
関連記事
この記事では rsync を使って、特定のフォルダを除いて、"/" ツリーのコピーを転送する方法を説明します。異なるサイズ、パーティションテーブル、ファイルシステムを使っていてもコピーができるので、dd
によるディスクのクローンよりも利用しやすく、ファイルのパーミッションや属性、アクセス制御リスト (ACL) や拡張属性を使うことができるため、cp -a
でコピーするよりも細かい制御ができます [1]。
どちらの方法でもシステムが動作していてもバックアップできます。バックアップには時間がかかるため、バックアップ中はウェブを自由にブラウズすると良いでしょう。最悪の場合でも、バックアップをリストア (あるいはバックアップを起動) したときに保存していなかったタブが開けなくなる程度です。大したことではありません。
コマンドでバックアップ
このセクションでは、rsync を使って、選択したいくつかのディレクトリを除いた /
ツリー全体のコピーを転送する方法について説明します。この方法は、異なるサイズ、パーティションテーブル、ファイルシステムを使用できるため、dd
による ディスクのクローン よりも優れており、また、ファイルのパーミッション、属性、 アクセス制御リスト および 拡張属性 をより詳細に制御できるため、同様に cp -a
によるコピーよりも優れていると考えられています。
rsync はシステムの実行中でも動作しますが、転送中に変更されたファイルは転送されたりされなかったりするので、転送されたファイルを使用するいくつかのプログラムでは未定義の動作が発生する可能性があります。
この方法は、既存のインストールを新しいハードドライブや SSD に移行する場合に有効です。
rsync がすべてのシステムファイルにアクセスでき、所有権を保持できることを確認するために、root で次のコマンドを実行します。
# rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup
-aAX
オプションによってファイルはアーカイブモードで転送されるので、シンボリックリンクやデバイス、パーミッションや所有者、変更日時、ACL あるいは拡張属性は保たれます。ターゲット ファイルシステム がこの機能をサポートしている場合。オプション -H
はハードリンクを保持しますが、より多くのメモリを使用します。
--exclude
オプションは指定したパターンにマッチするファイルを除外します。/dev
, /proc
, /sys
, /tmp
, /run
は起動時に作成されるものなので除外しています (フォルダそのものは作成されませんが)、/lost+found
はファイルシステムが作成します。除外パターンをクォートで囲っているのは シェル によって展開されないようにするためで、特に SSH を使ってバックアップする場合は必須です。除外パターンの末尾に付いている *
はディレクトリが存在しなかった場合に確実に作成するよう指示します。
以下のように 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 の場合、現在使用しているエントリを複製するだけです。別のドライブやパーティションを使うように設定してください。
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 の読み書きを最小化するヒントを参照。
参照
- http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ ハードリンクによるファイルの重複排除、MD5 整合性署名、chattr 保護、フィルタールール、ディスククォータ、指数分布による保持ポリシー(古いバックアップよりも新しいバックアップを保存しながらバックアップローテーション)が含まれます