31.3. dump と restore

バックアップに使用する Linux コマンドを解説します。コマンドによるバックアップでは、アーカイブ(書庫の意味)と呼ばれる複数ファイルやディレクトリをまとめたファイルを作成します。Ext2/Ext3 ファイルシステム全体をまとめるコマンドに dump があります。バックアップメディアとしてはテープドライブやハードディスクなどを利用できます。

dump [option] files-to-dump

files-to-dump には、バックアップ対象のファイルシステムのマウントポイントやファイルやディレクトリなどを指定します。主な option は以下の通りです。

表 31-2. dump コマンドの主な option

-0 〜 -9バックアップのレベルを指定します。0 は、フルバックアップ、1 〜 9 はインクリメンタルバックアップです。インクリメンタルバックアップでは指定レベルより小さい数値で最後にバックアップされた以降の差分データ(新しいもの、更新されているもの)がバックアップ対象となります。
-a自動サイズ。テープ長の計算をせずにメディアの終端まで書き込みます。
-B records1 ボリュームあたりのレコード数を指定します。
-b blocksizeブロックサイズをキロバイト単位で指定します。
-d densityテープの記録密度を bpi で指定します。
-f file出力先ファイルやテープの指定。デフォルトは、/dev/st0 でテープ。
-h level指定されたレベルまたは、それより上のレベルでのみ、dump 対象となるフラグをセットします。デフォルトは 1 が設定されインクリメンタルバックアップでは省略されますが、フルバックアップでは保持されます。
-s feetテープの長さを feet で指定します。
-T date/etc/dumpdates ファイルに記録する日時を指定します。
-udump 成功後、/etc/dumpdates ファイルを更新します。
-W/etc/fstab、/etc/mtab、/etc/dumpdates ファイルを元に dump の必要なファイルシステムに印を付けて一覧を表示します。
-w/etc/fstab、/etc/mtab の情報を元に dump の必要なファイルシステムのみを一覧表示します。

例えば、/home 全体をテープ(/dev/nst0)の先頭にフルバックアップする場合は以下のように実行します。

# mt -f /dev/nst0 rewind
# dump 0uf /dev/nst0 /home

前日のフルバックアップ以降に更新されたデータを、テープの先頭からバックアップする場合には以下のように実行します。

# mt -f /dev/nst0 rewind
# dump 1uf /dev/nst0 /home

その翌日に、前日のバックアップ以降に更新されたデータを次のファイルにバックアップする場合には以下のように実行します。

# mt -f /dev/nst0 asf 1
# dump 2uf /dev/nst0 /home

dump を実行した記録は、/etc/dumpdates ファイルに以下のように記録されます。左から、対象のファイルシステム、dump レベル、日時が格納されています。

/dev/sdb1 0 Thu Nov  8 23:58:24 2007 +0900
/dev/sdb1 1 Fri Nov  9 23:58:07 2007 +0900
/dev/sdb1 2 Mon Nov 12 23:58:18 2007 +0900

例えば、/home 全体をフルバックアップして、以降はこのフルバックアップとの差分をとっていく場合は以下のようになります。まずは全体をテープ(/dev/nst0)の先頭にフルバックアップします。

# mt -f /dev/nst0 rewind
# dump 0uf /dev/nst0 /home

翌日、/home 全体のフルバックアップとの差分をとります。

# dump 1uf /dev/nst0 /home

翌々日も、/home 全体のフルバックアップとの差分をとります。

# dump 1uf /dev/nst0 /home

このように dump を実行した記録は、/etc/dumpdates ファイルに以下のように記録されます。

/dev/sdb1 0 Thu Nov  8 23:58:24 2007 +0900
/dev/sdb1 1 Fri Nov  9 23:58:07 2007 +0900
/dev/sdb1 1 Mon Nov 12 23:58:18 2007 +0900

バックアップ計画とテープの管理は非常に重要です。項31.1 も合わせて参照してください。

ティップ

フルバックアップはファイルシステム上の全ファイルをバックアップします。実施の際には、データの整合性を保つため可能な限りシングルユーザーモードでの起動が推奨されています。

dump のアーカイブをリストアするコマンドは restore です。一度にファイルシステム全体をリストアすることも、対話型のインターフェースで部分的にファイルを取り出すことも可能です。

restore [option]

表 31-3. restore コマンドの主な option

-Cアーカイブの内容と実際のファイルシステムの内容を比較します。
i対話的にファイルを取り出します。対話型インターフェースのコマンドは以下表31-4を参照。
-rファイルシステム全体をリストアします。バックアップレベル 0(フルバックアップ)のアーカイブをリストアする場合は、 ターゲットとなるファイルシステムは既に mke2fs で作成されマウントされており、実行時にはマウントポイントに cd でカレントディレクトリを移動します。/ (ルート)ディレクトリはレスキューモードで起動して実行します。
-tアーカイブ内のファイルをリスト表示します。
-x file指定ファイルのみをアーカイブから取り出します。
-f fileアーカイブの格納されたファイル(テープ)を指定します。
-hパスからディレクトリ名のみを抽出します。

ティップ

ファイルシステム全体のリストアは、一度他の作業用ディレクトリに展開してから実際のディレクトリに移動した方が安全です。

表 31-4. 主な対話型 コマンド

ls [path]アーカイブ内のファイルの一覧を表示します。
cd directory ディレクトリを移動します。
pwdカレントディレクトリを表示します。
add [file_list]展開対象にファイルを追加します。
delete [file_list]展開対象からファイルを削除します。
setmodes展開対象の全ファイル/ディレクトリはそれらの所有者、モード、更新時間を保有しています。dump からは何も展開されません。restore が異常終了した場合のクリーンアップに使用されます。
quitこのプログラムを終了します。
helpヘルプが表示されます。

例えば、テープの先頭のアーカイブからカレントディレクトリにファイルをすべてリストアするには以下のように実行します。差分のデータも同様にテープを入れ替えてすべてリストアすることができます。

# mt -f /dev/nst0 rewind
# restore -rf /dev/nst0

テープの先頭のアーカイブの内容を一覧表示します。

# mt -f /dev/nst0 rewind
# restore -tf /dev/nst0

対話型インターフェースを使用して、テープの先頭のアーカイブの一覧を表示するには以下のように実行します。

# mt -f /dev/nst0 rewind
# restore -if /dev/nst0
restore > ls
.:
aquota.group  ichiro/       taro/       taro2/      toshi/
aquota.user   jiro/         lost+found/

jiro ディレクトリのみをカレントディレクトリに取り出すには以下のように実行します。

restore > add jiro
restore > extract
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1 テープの番号を入力します。
./jiro/.bash_logout
./jiro/.Xdefaults
 省略 ...
set owner/mode for '.'? [yn] y
restore > 

終了します。

restore > quit

複数のテープにまたがって格納されているアーカイブをリストアするには、まず 1 本目をドライブに挿入し以下のように実行します。

# restore -rf /dev/st0

以下のように表示されたら、2 本目のテープに入れ替えて [Enter] キーを押します。同様にテープを交換してリストアを実行します。

End-of-tape encountered
Mount volume 2
Enter ``none'' if there are no more volumes
otherwise enter volume name (default: /dev/st0)