「Tar によるフルシステムバックアップ」の版間の差分
(ページの作成:「Category:システムリカバリ en:Full System Backup with tar es:Full System Backup with tar この記事では tar を使ってフルシステムバ...」) |
(カテゴリ変更) |
||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:バックアップ]] |
[[en:Full System Backup with tar]] |
[[en:Full System Backup with tar]] |
||
[[es:Full System Backup with tar]] |
[[es:Full System Backup with tar]] |
2019年3月1日 (金) 01:05時点における版
この記事では tar を使ってフルシステムバックアップを行う方法を説明します。
概要
圧縮を使ってディスク容量を節約できるのとシンプルなのが tar によるバックアップの利点です。基本的な手順は以下のようになります:
- LiveCD から起動
- Linux 環境に Change Root
- パーティションやドライブをマウント
- 除外リストを追加
- バックアップスクリプトを使ってバックアップ
全てのファイルシステムが LVM ボリューム上にある場合、LVM のスナップショットを使うことでバックアップによってシステムが使えなくなる時間を最小限に留めることができます。
LiveCD を起動
大抵の Linux のブータブル CD や USB には Change Root する機能が備わっています。バックアップをするのに Change Root を実行することは必ずしも必須ではありませんが、一時的なドライブに転送する必要なくスクリプトを実行することが可能になります。ライブメディアは使用している Linux 環境とアーキテクチャが一致していなければなりません (i686 または x86_64)。
Change Root
まずは現在の Linux 環境にスクリプト環境をセットアップしてください。通常のプログラムと同じようにスクリプトを実行できるようにします。詳しくは こちらの記事 を読んでください。次に Change Root を実行します。詳しくは Change Root の記事を読んでください。Change Root を行うときに一時的なファイルシステム (/proc
, /sys
, /dev
) をマウントする必要はありません。起動時に作成されているファイルシステムをバックアップしてしまうと通常の作成プロセスと干渉する可能性があります。Change Root を行うには Linux がインストールされているルートパーティションをマウントしてください。例:
# mkdir /mnt/arch # mount /dev/<your-partition-or-drive>
fdisk -l
でパーティションやドライブを確認できます。その後に chroot
を実行してください:
# cd /mnt/arch # chroot . /bin/bash
上記の例では bash を使っていますが他のシェルでもかまいません。そしてスクリプト環境に移行します:
# source ~/.bashrc
他のパーティションのマウント
使用しているパーティション (例: /home
パーティション) は適切な場所にマウントする必要があります。
除外ファイルリスト
tar
には指定されたファイルやディレクトリを無視する機能があります。1行ごとに指定してください。正規表現も使えます。例:
# Not old backups /opt/backup/arch-full* # Not temporary files /tmp/* # Not the cache for pacman /var/cache/pacman/pkg/ ...
バックアップスクリプト
以下のスクリプトは tar によるバックアップを実行してチェックを行います。バックアップの場所や除外ファイルを編集してから、コマンドを実行してください:
#!/bin/bash # full system backup # Backup destination backdest=/opt/backup # Labels for backup name #PC=${HOSTNAME} pc=pavilion distro=arch type=full date=$(date "+%F") backupfile="$backdest/$distro-$type-$date.tar.gz" # Exclude file location prog=${0##*/} # Program name from filename excdir="/home/<user>/.bin/root/backup" exclude_file="$excdir/$prog-exc.txt" # Check if chrooted prompt. echo -n "First chroot from a LiveCD. Are you ready to backup? (y/n): " read executeback # Check if exclude file exists if [ ! -f $exclude_file ]; then echo -n "No exclude file exists, continue? (y/n): " read continue if [ $continue == "n" ]; then exit; fi fi if [ $executeback = "y" ]; then # -p and --xattrs store all permissions and extended attributes. # Without both of these, many programs will stop working! # It is safe to remove the verbose (-v) flag. If you are using a # slow terminal, this can greatly speed up the backup process. tar --exclude-from=$exclude_file --xattrs -czpvf $backupfile / fi
リストア
バックアップから復元するには、全てのパーティションをマウントして、ルートディレクトリに移動して以下のコマンドを実行してください ($backupfile はバックアップファイルに置き換えてください):
# tar --xattrs -xpf $backupfile
バックアップ後に作成されたファイルの削除は手動で行う必要があります。
並列圧縮でバックアップ
並列圧縮 (SMP) を使ってバックアップしたい場合 pbzip2 (Parallel bzip2) を使用してください。
まずは圧縮をかけずに tarball にファイルをバックアップ:
# tar -cvf /destionation_path/etc-backup.tar /etc
それから pbzip2 を使って並列圧縮を実行:
$ pbzip2 /path/to/chosen/directory/etc-backup.tar.bz2
etc-backup.tar.bz2
は USB スティックや外付けハードドライブ、CD-R などのオフラインメディアに保存してください。ときどき元のファイルやディレクトリとバックアップを比較してバックアップが正しく行われているか確認してください。バックアップするファイルのハッシュリストを作っておけば簡単に比較できます。
/etc
のファイルが壊れた場合は etc-backup.tar.bz2
ファイルを一時的に作業ディレクトリに展開して、必要に応じてファイルやディレクトリをコピーしてください。/etc
ディレクトリ全体を復元するには以下のコマンドを root で実行:
# tar -xvjf etc-backup.tar.bz2 -C /