「Tar によるフルシステムバックアップ」の版間の差分
(カテゴリ変更) |
Kusanaginoturugi (トーク | 投稿記録) (関連記事を追加) |
||
(2人の利用者による、間の8版が非表示) | |||
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|システムバックアップ}} |
||
+ | {{Related|SquashFS によるフルシステムバックアップ}} |
||
+ | {{Related articles end}} |
||
この記事では [[tar]] を使ってフルシステムバックアップを行う方法を説明します。 |
この記事では [[tar]] を使ってフルシステムバックアップを行う方法を説明します。 |
||
+ | tar を使ったバックアップには、ディスク領域の節約に役立つ圧縮機能があることや、簡単にできるという利点があります。基本的な手順は以下のようになります: |
||
− | == 概要 == |
||
− | |||
− | 圧縮を使ってディスク容量を節約できるのとシンプルなのが tar によるバックアップの利点です。基本的な手順は以下のようになります: |
||
# LiveCD から起動 |
# LiveCD から起動 |
||
18行目: | 21行目: | ||
== LiveCD を起動 == |
== LiveCD を起動 == |
||
− | + | 多くの Linux ブータブル CD、USB には、root をインストール先へ変更できる機能があります。バックアップを行うためにルートを変更する必要はありませんが、スクリプトを一時ドライブに転送したり、ファイルシステム上で見つけたりする必要がなく、スクリプトを実行するだけで済みます。Live メディアは、現在 Linux インストールされているものと同じアーキテクチャ (i686 または x86_64) である必要があります。 |
|
== Change Root == |
== Change Root == |
||
27行目: | 30行目: | ||
# mount /dev/<your-partition-or-drive> |
# mount /dev/<your-partition-or-drive> |
||
− | {{Ic|fdisk -l}} でパーティションやドライブを確認できます。その後に |
+ | {{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 |
||
+ | }} |
||
== 他のパーティションのマウント == |
== 他のパーティションのマウント == |
||
56行目: | 64行目: | ||
== バックアップスクリプト == |
== バックアップスクリプト == |
||
− | + | {{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): " |
||
− | + | echo -n "No exclude file exists, continue? (y/n): " |
|
− | + | 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 |
||
+ | }} |
||
== リストア == |
== リストア == |
||
− | バックアップから復元するには、 |
+ | 以前のバックアップから復元するには、関連するすべてのパーティションをマウントし、現在の作業ディレクトリをルート ディレクトリに変更して、次のコマンドを実行します。 |
− | + | $ bsdtar --acls --xattrs -xpzf ''backupfile'' |
|
− | バックアップ |
+ | バックアップファイルをバックアップアーカイブに置き換えます。バックアップの作成後に追加されたすべてのファイルの削除は、手動で行う必要があります。ファイルシステムを再作成するのが簡単な方法です。 |
== 並列圧縮でバックアップ == |
== 並列圧縮でバックアップ == |
||
108行目: | 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}} |
+ | {{ic|etc-backup.tar.bz2}} を1つ以上のオフラインメディア (USB スティック、外付けハード ドライブ、CD-R など) に保存します。時々、元のファイルとディレクトリをバックアップと比較して、バックアッププロセスの整合性を検証します。比較を迅速に行うために、バックアップファイルのハッシュのリストを維持することもできます。 |
− | {{ic|/etc}} |
+ | 破損した {{ic|/etc}} ファイルを復元するには、一時作業ディレクトリに {{ic|etc-backup.tar.bz2}} ファイルを抽出し、必要に応じて個々のファイルとディレクトリをコピーします。{{ic|/etc}} ディレクトリ全体をそのすべての内容とともに復元するには、root として次のコマンドを実行します。 |
− | # |
+ | # bsdtar -xvf etc-backup.tar.bz2 -C / |
2024年7月6日 (土) 16:27時点における最新版
この記事では tar を使ってフルシステムバックアップを行う方法を説明します。
tar を使ったバックアップには、ディスク領域の節約に役立つ圧縮機能があることや、簡単にできるという利点があります。基本的な手順は以下のようになります:
- LiveCD から起動
- Linux 環境に Change Root
- パーティションやドライブをマウント
- 除外リストを追加
- バックアップスクリプトを使ってバックアップ
全てのファイルシステムが 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
この例では 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 /