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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(関連記事を追加)
(関連記事を追加)
 
(他の1人の利用者による、間の6版が非表示)
2行目: 2行目:
 
[[en:Full System Backup with tar]]
 
[[en:Full System Backup with tar]]
 
[[es:Full System Backup with tar]]
 
[[es:Full System Backup with tar]]
  +
[[zh-hans:Full system backup with tar]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|システムバックアップ}}
 
{{Related|SquashFS によるフルシステムバックアップ}}
 
{{Related|SquashFS によるフルシステムバックアップ}}
 
{{Related articles end}}
 
{{Related articles end}}
19行目: 21行目:
 
== LiveCD を起動 ==
 
== LiveCD を起動 ==
   
大抵の Linux ブータブル CDUSB には Change Root する機能が備わっています。バックアップをするの Change Root 実行することはずしも必須ではありませんが、一時的なドライブに転送する必要なくスクリプトを実行することが可能になります。ライブメディアは使用している Linux 環境とアーキテクチャが一致していなければなりません (i686 または x86_64)。
+
多くの Linux ブータブル CDUSB には、root をインストール先へ変更できる機能があります。バックアップを行うためルート変更する必はありませんが、スクリプトを一時ドライブに転送したり、ファイルシステム上で見つけたりする必要なくスクリプトを実行するだけで済みます。Live メディアは、現在 Linux インストールされているもの同じアーキテクチャ (i686 または x86_64) である必要があります
   
 
== Change Root ==
 
== Change Root ==
28行目: 30行目:
 
# mount /dev/<your-partition-or-drive>
 
# mount /dev/<your-partition-or-drive>
   
{{Ic|fdisk -l}} でパーティションやドライブを確認できます。その後に {{Ic|chroot}} を実行してください:
+
{{Ic|fdisk -l}} でパーティションやドライブを確認できます。その後に [[chroot]] を実行してください:
   
 
# cd /mnt/arch
 
# cd /mnt/arch
 
# chroot . /bin/bash
 
# chroot . /bin/bash
   
  +
{{Warning|ターゲットシステムに chroot するために {{ic|arch-chroot}} を使用しないでください。一時ファイルシステム、すべてのシステムメモリ、その他の興味深いものをバックアップしようとするため、バックアッププロセスは失敗します。代わりにプレーンな {{ic|chroot}} を使用してください。}}
上記の例では bash を使っていますが他の[[シェル]]でもかまいません。そしてスクリプト環境に移行します:
 
   
  +
この例では bash を使用していますが、利用可能な場合は他のシェルを使用することもできます。これで、スクリプト環境に入ります (これは、入力時に {{ic|~/.bashrc}} をソースしていることが前提です。)
# source ~/.bashrc
 
  +
  +
{{hc|~/.bash_profile|
  +
# If using bash, source the local .bashrc
  +
source ~/.bashrc
  +
}}
   
 
== 他のパーティションのマウント ==
 
== 他のパーティションのマウント ==
57行目: 64行目:
 
== バックアップスクリプト ==
 
== バックアップスクリプト ==
   
以下のスクリプトは tar によるバックアップを行しチェックを行います。バックアップの場所除外ファイルを編集てから、コマンドを実行してください:
+
{{ic|bsdtar}} バックアップを取るのは簡単なプロセスです。ここでは、それをうことができる基本的なスクリプトを紹介、いくつかのチェックを提供します。このスクリプトを修正して、バックアップの場所除外ファイル (ある場合) 定義し、{{ic|chroot}} してすべてのパーティションをマウントした後にこのコマンドを実行する必要があります。[https://bbs.archlinux.org/viewtopic.php?id=146269 GNU tar を {{ic|--xattrs}} で実行しても拡張属性は保存されない] ことに注意してください
   
  +
{{bc|1=
#!/bin/bash
 
  +
#!/bin/bash
# full system backup
 
  +
# full system backup
 
  +
# Backup destination
 
  +
# Backup destination
backdest=/opt/backup
 
  +
backdest=/opt/backup
 
  +
# Labels for backup name
 
  +
# Labels for backup name
#PC=${HOSTNAME}
 
  +
#PC=${HOSTNAME}
pc=pavilion
 
  +
pc=pavilion
distro=arch
 
  +
distro=arch
type=full
 
  +
type=full
date=$(date "+%F")
 
  +
date=$(date "+%F")
backupfile="$backdest/$distro-$type-$date.tar.gz"
 
  +
backupfile="$backdest/$distro-$type-$date.tar.gz"
 
  +
# Exclude file location
 
  +
# Exclude file location
prog=${0##*/} # Program name from filename
 
  +
prog=${0##*/} # Program name from filename
excdir="/home/<user>/.bin/root/backup"
 
  +
excdir="/home/<user>/.bin/root/backup"
exclude_file="$excdir/$prog-exc.txt"
 
  +
exclude_file="$excdir/$prog-exc.txt"
 
  +
# Check if chrooted prompt.
 
  +
# Check if chrooted prompt.
echo -n "First chroot from a LiveCD. Are you ready to backup? (y/n): "
 
  +
echo -n "First chroot from a LiveCD. Are you ready to backup? (y/n): "
read executeback
 
  +
read executeback
 
  +
# Check if exclude file exists
 
  +
# Check if exclude file exists
if [ ! -f $exclude_file ]; then
 
  +
if [ ! -f $exclude_file ]; then
echo -n "No exclude file exists, continue? (y/n): "
 
read continue
+
echo -n "No exclude file exists, continue? (y/n): "
if [ $continue == "n" ]; then exit; fi
+
read continue
  +
if [ $continue == "n" ]; then exit; fi
fi
 
  +
fi
 
  +
if [ $executeback = "y" ]; then
 
  +
if [ $executeback = "y" ]; then
# -p and --xattrs store all permissions and extended attributes.
 
  +
# -p, --acls and --xattrs store all permissions, ACLs and extended attributes.
# Without both of these, many programs will stop working!
 
  +
# Without both of these, many programs will stop working!
# It is safe to remove the verbose (-v) flag. If you are using a
 
  +
# It is safe to remove the verbose (-v) flag. If you are using a
# slow terminal, this can greatly speed up the backup process.
 
  +
# slow terminal, this can greatly speed up the backup process.
tar --exclude-from=$exclude_file --xattrs -czpvf $backupfile /
 
  +
# Use bsdtar because GNU tar will not preserve extended attributes.
fi
 
  +
bsdtar --exclude-from=$exclude_file --acls --xattrs -cpvzf $backupfile /
  +
fi
  +
}}
   
 
== リストア ==
 
== リストア ==
   
バックアップから復元するには、てのパーティションをマウントし、ルートディレクトリに移動して以下のコマンドを実行してください ($backupfile はバックアップファイルに置き換えてください):
+
以前のバックアップから復元するには、関連するすべてのパーティションをマウントし、現在の作業ディレクトリをルート ディレクトリに変更して、次のコマンドを実行します。
   
# tar --xattrs -xpf $backupfile
+
$ bsdtar --acls --xattrs -xpzf ''backupfile''
   
バックアップに作成されたファイルの削除は手動で行う必要があります。
+
バックアップファイルをバックアップアーカイブ置き換えます。バックアップの作成後に追加されたすべてのファイルの削除は手動で行う必要があります。ファイルシステムを再作成するのが簡単な方法です。
   
 
== 並列圧縮でバックアップ ==
 
== 並列圧縮でバックアップ ==
109行目: 119行目:
 
並列圧縮 ([[Wikipedia:Symmetric multiprocessing|SMP]]) を使ってバックアップしたい場合 {{Pkg|pbzip2}} (Parallel bzip2) を使用してください。
 
並列圧縮 ([[Wikipedia:Symmetric multiprocessing|SMP]]) を使ってバックアップしたい場合 {{Pkg|pbzip2}} (Parallel bzip2) を使用してください。
   
  +
# bsdtar -cvf /path/to/chosen/directory/etc-backup.tar.bz2 -I pbzip2 /etc
まずは圧縮をかけずに tarball にファイルをバックアップ:
 
 
# tar -cvf /''destionation_path''/etc-backup.tar /etc
 
 
それから pbzip2 を使って並列圧縮を実行:
 
 
$ pbzip2 /path/to/chosen/directory/etc-backup.tar.bz2
 
   
{{ic|etc-backup.tar.bz2}} USB スティック外付けハードドライブ、CD-R などのオフラインメディアに保存してくださいときどき元のファイルディレクトリバックアップ比較してバックアップが正く行われているか確認してください。バックアップするファイルのハッシュリストを作っておけば簡単に比較できます。
+
{{ic|etc-backup.tar.bz2}} を1つ以上のオフラインメディア (USB スティック外付けハード ドライブ、CD-R など) に保存します時々、元のファイルディレクトリバックアップ比較してバックアッププロセスの整合性を検証ます比較を迅速に行うために、バックアップファイルのハッシュリストを維持することもできます。
   
{{ic|/etc}} ファイルが壊れた場合は {{ic|etc-backup.tar.bz2}} ファイルを一時的に作業ディレクトリに展開、必要に応じてファイルディレクトリをコピーしてください。{{ic|/etc}} ディレクトリ全体を復元するには以下のコマンドを root で実行:
+
破損した {{ic|/etc}} ファイルを復元するに、一時作業ディレクトリに {{ic|etc-backup.tar.bz2}} ファイルを抽出し、必要に応じて個々のファイルディレクトリをコピーします。{{ic|/etc}} ディレクトリ全体をそのすべての内容とともに復元するには、root として次のコマンドを実行します。
   
# tar -xvjf etc-backup.tar.bz2 -C /
+
# bsdtar -xvf etc-backup.tar.bz2 -C /

2024年7月6日 (土) 16:27時点における最新版

関連記事

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

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

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

全てのファイルシステムが LVM ボリューム上にある場合、LVM のスナップショットを使うことでバックアップによってシステムが使えなくなる時間を最小限に留めることができます。

LiveCD を起動

多くの Linux ブータブル CD、USB には、root をインストール先へ変更できる機能があります。バックアップを行うためにルートを変更する必要はありませんが、スクリプトを一時ドライブに転送したり、ファイルシステム上で見つけたりする必要がなく、スクリプトを実行するだけで済みます。Live メディアは、現在 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
警告: ターゲットシステムに chroot するために arch-chroot を使用しないでください。一時ファイルシステム、すべてのシステムメモリ、その他の興味深いものをバックアップしようとするため、バックアッププロセスは失敗します。代わりにプレーンな chroot を使用してください。

この例では bash を使用していますが、利用可能な場合は他のシェルを使用することもできます。これで、スクリプト環境に入ります (これは、入力時に ~/.bashrc をソースしていることが前提です。)

~/.bash_profile
# If using bash, source the local .bashrc
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/
...

バックアップスクリプト

bsdtar でバックアップを取るのは簡単なプロセスです。ここでは、それを行うことができる基本的なスクリプトを紹介し、いくつかのチェックを提供します。このスクリプトを修正して、バックアップの場所と除外ファイル (ある場合) を定義し、chroot してすべてのパーティションをマウントした後にこのコマンドを実行する必要があります。GNU tar を --xattrs で実行しても拡張属性は保存されない ことに注意してください。

#!/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, --acls and --xattrs store all permissions, ACLs 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.
  # Use bsdtar because GNU tar will not preserve extended attributes.
  bsdtar --exclude-from=$exclude_file --acls --xattrs -cpvzf $backupfile /
fi

リストア

以前のバックアップから復元するには、関連するすべてのパーティションをマウントし、現在の作業ディレクトリをルート ディレクトリに変更して、次のコマンドを実行します。

$ bsdtar --acls --xattrs -xpzf backupfile

バックアップファイルをバックアップアーカイブに置き換えます。バックアップの作成後に追加されたすべてのファイルの削除は、手動で行う必要があります。ファイルシステムを再作成するのが簡単な方法です。

並列圧縮でバックアップ

並列圧縮 (SMP) を使ってバックアップしたい場合 pbzip2 (Parallel bzip2) を使用してください。

# bsdtar -cvf /path/to/chosen/directory/etc-backup.tar.bz2 -I pbzip2 /etc

etc-backup.tar.bz2 を1つ以上のオフラインメディア (USB スティック、外付けハード ドライブ、CD-R など) に保存します。時々、元のファイルとディレクトリをバックアップと比較して、バックアッププロセスの整合性を検証します。比較を迅速に行うために、バックアップファイルのハッシュのリストを維持することもできます。

破損した /etc ファイルを復元するには、一時作業ディレクトリに etc-backup.tar.bz2 ファイルを抽出し、必要に応じて個々のファイルとディレクトリをコピーします。/etc ディレクトリ全体をそのすべての内容とともに復元するには、root として次のコマンドを実行します。

# bsdtar -xvf etc-backup.tar.bz2 -C /