システム・バックアップを基礎の基礎から:Linux管理者への道(5)(3/3 ページ)
管理者として、システムのバックアップは義務である。では、どのようなデバイス/メディアを利用すべきか? また、Linuxではどうやってバックアップするのか? バックアップについて基礎から見直しておこう。(編集局)
各バックアッププログラムの基本操作
バックアップを取るためのツールは多数存在します。ここではtar、dd、dumpという、タイプが異なる3つのツールを紹介します。
tar
tarはアーカイブを作成するツールとして、広く普及しています。そのため、Windowsなどの異なるOSにデータを渡したい場合でも利用できます。
バックアップする場合は、どこまでをバックアップデータとするのかを考えましょう。例えば、/home/user1ディレクトリ以下のファイルをtarを利用してバックアップする場合、「user1」というディレクトリを含めるのか、そのディレクトリ内にあるファイルだけをバックアップするのかによって操作が変わります。
●tarを利用したバックアップ
user1ディレクトリ内のファイルのみをバックアップする場合は、以下のように実行します。
# cd /home/user1
# tar cvf /dev/nst0 .
逆に、user1ディレクトリごとバックアップする場合は、バックアップ対象の/home/user1ディレクトリの1階層上のディレクトリに移動してからtarを実行します。
# cd /home
# tar cvf /dev/nst0 user1
あるいは、Cオプションを利用して以下のように実行しても同じです。
# tar -C /home -cvf /dev/nst0 user1
●gzip/bzip2によるソフトウェア圧縮
一般的に、tarはほかの圧縮機能を持ったプログラムとともに利用されます。gzip圧縮の場合はzオプション、bzip2圧縮の場合はjオプションを利用します。
# tar -zcvf /dev/nst0 /directory
# tar -jcvf /dev/nst0 /directory
●アーカイブのリストア
バックアップテープからデータをリストアする場合、まずは取り出すデータの位置までテープを移動させる必要があります。例えば、3番目のデータの先頭位置に移動するには以下のように実行します。
# mt -f /dev/nst0 rewind
# mt -f /dev/nst0 fsf 2
テープの状態を確認すると、以下のように表示されます。3番目のファイル(File number 2)の先頭(block number)に位置していることが分かります。
# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x26 (DDS-4 or QIC-4GB).
Soft error count since last status=0
General status bits on (1010000):
EOF ONLINE IM_REP_EN
アーカイブの中身を確認するにはtオプションを利用します。
# tar -tf /dev/nst0
ただし、アーカイブに格納されているデータを読み取った場合、テープ位置が進んでしまいます。
# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=2, partition=0.
Tape block size 0 bytes. Density code 0x26 (DDS-4 or QIC-4GB).
Soft error count since last status=0
General status bits on (1010000):
ONLINE IM_REP_EN
確認後、アーカイブを展開するには一度巻き戻しを行い、データを展開します。
# cd /backup
# mt -f /dev/nst0 bsfm
# tar -xvf /dev/nst0
●特定のファイルのみのリストア
すべてのデータを展開することによってファイルシステムの領域を圧迫することが予想されるのであれば、一部のファイルだけを取り出すことも可能です。その場合は、第2引数に取り出したいファイル名を指定します。
ただし、第2引数のファイル名の指定方法は、バックアップを実行したときのコマンドラインに依存します。例えば、ホームディレクトリを以下のようにしてバックアップした場合を検討してみましょう。
# cd /
# tar cvf /dev/nst0 home
home/
home/user1/
home/user1/.bash_logout
home/user1/.bash_profile
home/user1/.bashrc
(略)
このバックアップから/home/user1/file というファイルだけをリストアしたいのであれば、以下のように実行します。
# tar xvf /dev/nst0 home/user1/file
一方、以下のようにしてバックアップした場合はどうなるでしょうか。
# cd /
# tar cvf /dev/nst0 ./home
./home/
./home/user1/
./home/user1/.bash_logout
./home/user1/.bash_profile
./home/user1/.bashrc
(略)
この場合は、以下のように実行する必要があります。
# tar xvf /dev/nst0 ./home/user1/file
dd
ddは、パーティションやCD-ROM上に存在するデータの並びをそのままファイルにするために利用されることが多いツールです。イメージファイルを作成するときによく使われます。
●ddの書式
# dd if=input_file of=output_file bs=block_size
オプション | 説明 |
---|---|
if= | コピー元のファイル名。if=を指定しない場合は標準入力を入力データとする。普通のファイルを利用することもできるが、ddを利用する場合は/dev/hda3や/dev/cdromなどのデバイスファイルを利用することが多い |
of= | コピー先のファイル名。of=を指定しない場合は標準出力へデータを書き出す |
bs= | 一度のI/O操作で転送されるデータサイズ(bytes)を指定 |
例えば、CD-ROMのデータのイメージファイルを作成する場合は、以下のように実行します。
# dd if=/dev/cdrom of=cdrom.iso
また、ハードディスクのMBR(マスターブートレコード:ディスクの先頭512bytesのデータ)にはブートローダおよびパーティションテーブルが含まれます。このデータもddで簡単にバックアップすることができます。
# dd if=/dev/hda of=mbr.img bs=512 count=1
dumpとrestore
dumpは特定のファイル単位ではなく、ファイルシステム単位でバックアップします。Linuxのファイルシステムを通さずに、直接rawデバイスからデータをシーケンシャルに読み取りながらバックアップを実行するため、dump自身が対応しているext2あるいはext3ファイルシステムといった特定のファイルシステムのデータしか扱えません。ただし、ext2やext3ファイルシステム全体をバックアップするには最適です。システム全体をバックアップする用途に使用されることが多いツールです。
●dumpの書式
dumpはext2(あるいはext3)ファイルシステムに特化したバックアップツールです。このプログラムは「ファイル」や「ディレクトリ」ではなく、「ファイルシステム」を対象とするので、基本的には/dev/hda3や/dev/sdb1といったデバイスファイルを使い、以下のように実行します。以下の例の場合、テープに/dev/sda3に関連付けられたパーティションのデータがバックアップされます。
# dump -0uf /dev/st0 /dev/sda3
オプション | 説明 |
---|---|
n | ダンプレベルを表す。0?9まで指定できる |
f | バックアップ先の指定(指定しない場合は/dev/tapeを使用) |
u | /etc/dumpdatesを更新する。増分バックアップには必須 |
nは数値 |
●複数のテープにまたがるdump
バックアップデータが大きく、図3のように複数のテープにまたがってデータを保存しなければならない場合があります。
そのような場合、以下のようにテープの入れ替えを促すメッセージが表示されるので、テープの入れ替えを行って「y」を入力します。
(略)
DUMP: Change Volumes: Mount volume #2
DUMP: Is the new volume mounted and ready to go?: ("yes" or "no") y
●バックアップの種類
dumpコマンドはダンプレベルを指定することで、フルバックアップだけではなく、差分バックアップや増分バックアップを取ることができます。実際にバックアップがどの程度必要なのかを考えて、バックアップスケジュールを設定する必要があります。
バックアップの種類 | 説明 |
---|---|
フルバックアップ | ファイルシステム上すべてのデータをバックアップする |
差分(ディファレンシャル) バックアップ |
フルバックアップ以降に追加あるいは変更されたデータだけをバックアップ対象とする |
増分(インクリメンタル) バックアップ |
フルバックアップまたは増分バックアップ以降に追加あるいは変更されたデータだけをバックアップ対象とする |
●フルバックアップ時の注意
ダンプレベルに0を指定すると、ファイルシステム上の全ファイルをバックアップします。フルバックアップしたデータは、データをリストアする際に非常に重要になるものなので、細心の注意を払って扱う必要があります。
例えば、以下のようなルールを決めておくことをお勧めします。
- バックアップ前には、必ずクリーニングテープでヘッドを清掃する
- シングルユーザーモードでバックアップを取る
- フルバックアップを取ったテープにはほかのデータを追記せず、適切な場所に保管する
シングルユーザーモードで行うことを推奨しているのは、バックアップ中にファイル内容が変更されたり、ファイルを移動/削除してしまった場合、そのファイルが正常にバックアップされるかどうか保証されないからです。
フルバックアップは頻繁に行うことではないので、できる限りシングルユーザーモードで行うことを推奨します。
●/etc/dumpdates
/etc/dumpdatesには、各ファイルシステムに対するdumpコマンドの使用記録がダンプレベルとともに収められています。このファイルには3つのフィールドが存在し、それぞれ以下のような意味があります。
バックアップしたファイルシステム ダンプレベル 日付
このファイルは、増分バックアップの際にdumpレベルを調べるために使用されます。dumpコマンドに-uオプションを付けると、/etc/dumpdatesファイルが更新されます。
このファイルのデータを基に、「指定したダンプレベルより低いレベル」で、かつ「最新のバックアップ」からの差分をダンプします。例えば、以下のような状態から、ダンプレベル5でdumpすると「ダンプレベル5より低く」かつ「最新のバックアップ」である、ダンプレベル4からの増分バックアップを取ります。
# cat /etc/dumpdates
/dev/sda6 0 Sun Dec 1 02:10:49 2002
/dev/sda6 3 Mon Dec 2 02:05:03 2002
/dev/sda6 2 Tue Dec 3 02:05:12 2002
/dev/sda6 5 Wed Dec 4 02:05:03 2002
/dev/sda6 4 Tur Dec 5 02:05:10 2002
/dev/sda6 7 Fri Dec 6 02:05:08 2002
restore
●フルバックアップのリストア
dumpコマンドによって作成したアーカイブは、restoreコマンドで展開します。リストア先はtarの場合と同じで、カレントディレクトリになります。
restoreコマンドは以下のようなオプションとともに利用します。
オプション | 説明 |
---|---|
t | アーカイブ中に含まれるファイル一覧を出力 |
x | 特定のファイルをリストアする |
r | リストアする |
v | 詳細表示する |
i | 対話モードに入り、リストア操作をする |
f | リストア元の指定(指定なしの場合は/dev/tape) |
dumpしたデータに含まれるすべてのファイルをリストアするには、以下のように実行します。
# restore -rf /dev/nst0
restoreを実行すると、restoresymtableというファイルがカレントディレクトリに作成されます。増分バックアップをリストアするときにこのファイルを使って、リストアするファイルの情報を得ます。そのため、すべてのリストアが終了するまではこのファイルが必要になります。リストア終了後は不要になるので、削除しましょう。
●複数のテープにまたがるdumpのリストア
複数のテープにまたがって保存したデータをリストアする場合は、1番目のテープ(Volume 1)をドライブに挿入してrestoreを実行します。
# restore -rvf /dev/st0
(略)
End-of-tape encountered
Mount volume 2
Enter ``none'' if there are no more volumes
otherwise enter volume name (default: /dev/st0)
上記のようなメッセージが表示されたら、2本目のテープ(Volume2)に入れ替えて[Enter]を入力します。その後、順次テープを入れ替えながらリストアしていく形になります。
●特定のファイルのみのリストア xオプションの利用
アーカイブから特定のファイルだけをリストアしたい場合、xオプションを利用します。例えば、/homeパーティションのバックアップデータから/home/user1/fileだけをリストアしたい場合、以下のように実行します。
# restore -xf /dev/nst0 ./user1/file
●特定のファイルのみのリストア 対話的リストア
iオプションを利用すれば、対話的にファイルをリストアできます。
# restore -if /dev/st0
restore >
この状態では、cdやlsを利用しながら、通常のファイルシステムを利用するのと同様の操作で、リストアするデータを選択できます。
リストアするファイルを指定する場合は、addコマンドを利用します。例えばfileをリストアするのであれば、以下のように実行します。
restore > add file
その後、extractコマンドで実際にリストアを行います。
restore > extract
You have not read any volumes yet.
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): 2 1.
Mount volume 2
Enter ``none'' if there are no more volumes
otherwise enter volume name (default: /dev/st0) 2.
1.対象のデータが保存されているテープの番号(volume number)を指定
2.指定した番号に応じたテープを挿入し、[Enter]キーを押す
●増分バックアップのリストア
インクリメンタルバックアップしたアーカイブからファイルシステム全体をリストアする場合、ダンプレベル0から順番にリストアしていく必要があります。すべてのレベルのリストアが終了すれば、restoresymtableファイルは不要になるので削除しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.