検索
連載

システム・バックアップを基礎の基礎からLinux管理者への道(5)(3/3 ページ)

管理者として、システムのバックアップは義務である。では、どのようなデバイス/メディアを利用すべきか? また、Linuxではどうやってバックアップするのか? バックアップについて基礎から見直しておこう。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

各バックアッププログラムの基本操作

 バックアップを取るためのツールは多数存在します。ここでは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

gzip圧縮を利用する場合

# tar -jcvf /dev/nst0 /directory

bzip2圧縮を利用する場合

●アーカイブのリストア

 バックアップテープからデータをリストアする場合、まずは取り出すデータの位置までテープを移動させる必要があります。例えば、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

注:ファイルシステムを通さずにデバイスから直接データを受け取るため、CD-ROMをマウントする必要はありません。

 また、ハードディスクの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のように複数のテープにまたがってデータを保存しなければならない場合があります。

図3 複数のテープにまたがったデータ
図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.

前のページへ |       
ページトップに戻る