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

提供: ArchWiki
2021年6月17日 (木) 17:25時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (1章を序文に移動(およびちょっと修正))
ナビゲーションに移動 検索に移動

この記事では tar を使ってフルシステムバックアップを行う方法を説明します。

tar を使ったバックアップには、ディスク領域の節約に役立つ圧縮機能があることや、簡単にできるという利点があります。基本的な手順は以下のようになります:

  1. LiveCD から起動
  2. Linux 環境に Change Root
  3. パーティションやドライブをマウント
  4. 除外リストを追加
  5. バックアップスクリプトを使ってバックアップ

全てのファイルシステムが 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 /