Linuxでのバックアップ

11月 17, 2009

Linux LPIC編。(第6章 システムメンテナンス)
Linuxでの各種バックアップ。
まずローカルで実行するバックアップ用コマンド、tar、cpio、 dd、dumpについて。

tarコマンドのオプションで覚えておきたいのが、-zオプションでgzip形式の圧縮/展開
をサポートすること(bzip形式なら-j )。
以下、オプションで気になるところだけメモ。

-c  アーカイブ作成で、-xがファイルの抽出 (ド基本だけど、、、)
-C  処理を開始する前に指定したディレクトリに移動。
-p パーミッション保持
-P パス名の” / “を削除しない(アーカイブ内のパスを絶対パスにしたい時)
-t アーカイブの内容を表示
-r アーカイブにファイルを追加


以下例では/varのアーカイブをSCSIテープドライブに作成。

# tar cvf /dev/st0 /var


SCSIテープドライブ内のtarアーカイブの内容を確認するには、以下のように。

# tar tf /dev/st0


以下ではバックアップされた/varディレクトリから/var/log/secureファイルを抽出。
/varディレクトリの最初の” / “がないことに注意。

# tar xvf /dev/st0 var/log/secure


cpioコマンドはファイルをアーカイブにコピーまたは、アーカイブからファイルをコピー。
以下の例は、カレントディレクトリ以下を/tmp/backupファイルとしてバックアップしている。

# ls | cpio -o > /tmp/backup


作成したバックアップファイルの内容を見るには以下のように。

# cpio -it < /tmp/backup


-oはコピーアウトモード(アーカイブを作成)、-iはコピーインモード(アーカイブから
ファイルを抽出)ってことだけでも頭に入れておきたい。
あと、-dは必要ならディレクトリを作成する。

以下サイトなども参考に。
↓ ↓ ↓
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/434usecpio.html

cpioオプションいろいろ(試験には関係ないと思うけど…)
↓ ↓ ↓
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230735/

ddコマンドは入力側に指定したファイルの内容を、ファイルや標準出力におくる。

if=入力側ファイルで、of=出力側ファイル、bs=nで入出力のブロックサイズを指定、
count=nで指定した回数分の入力ブロックをコピー。
以下例では/dev/sdaを/dev/sdbへ丸ごとコピーしている。

# dd if=/dev/sda of=/dev/sdb


dumpコマンドはファイルシステム単位でバックアップを作成する。(ext2/ext3)
バックアップからファイルを取り出すにはrestoreコマンドを利用する。
dumpコマンドはdumpレベルを指定することにより増分バックアップに対応可能。
レベル1のdump実行後にレベル2でdumpを行うと、その間の更新分のみがバックアップ
される。なお、dumpレベル0はファイルシステム内すべてのファイルが対象となる。

オプション
0-9 dumpレベルを指定
u /etc/dumpdatesにバックアップファイルを記録する
f バックアップ装置のデバイス名を指定

以下例は、dumpレベル0で/dev/sda3をSCSIテープドライブにバックアップしている。

# dump 0uf /dev/st0 /dev/sda3


以下は、restoreコマンドでバックアップされたデータをすべて取り出している。
(rオプションですべてを指定)

# restore rf /dev/st0


ここまで書いておいてアレだけど、dump、restoreコマンドは範囲外だそうだ。
でも勉強しておいて損はないことだしね…w

メモ
テープデバイスの、デバイスファイル名による違い。
/dev/st0はフルバックアップを1本で取るような場合に適している。
同じテープに続けてバックアップをする場合は、/dev/nst0を使う。

/dev/st0 →自動巻き戻しをする
/dev/nst0 →自動巻き戻しをしない


ネットワーク経由でのバックアップについて。
rsyncは、ネットワーク経由で他のホストにバックアップしたい場合に利用される。
(ローカルホスト内でも利用できる)差分のみのコピーなど、細かい設定ができる。
例えばオプションの指定により、コピー元で削除したファイルはバックアップ先でも
削除されるため、バックアップ元とバックアップ先の内容を常に同期させることも可能。

書式
rsync [オプション] B/U元ディレクトリ [ホスト名:] B/U先ディレクトリ


コマンド実行時において、コピー元ディレクトリの末尾に「 / 」(スラッシュ)があるか
ないかで動作が変わるので注意!以下の例では、スラッシュありの場合/test内のファイル
が、スラッシュなしの場合、/testディレクトリそのものが対象となる。

# rsync -av test/ /backup ←testディレクトリ内のファイルを/backupにコピー

# rsync -av test /backup ←testディレクトリ自体を/backupディレクトリにコピー


オプション
-v コピー中のファイルを表示
-a アーカイブモード(ファイルやディレクトリの属性をそのままコピー)
  ※つまり-aオプションをつければ以下rlptgoDオプションは必要なし
-r ディレクトリ内を再帰的にコピー
-l シンボリックリンクをそのままコピー
-H ハードリンクをそのままコピー
-D デバイスファイルを保ったままコピー
-p パーミッションを保ったままコピー
-t タイムスタンプを維持
-o オーナーをそのまま維持
  ※指定しないとオーナー属性はコピーしたユーザーとなる
-g グループをそのまま維持
  ※指定しないとグループ属性はコピーしたユーザーのグループとなる
-n テストのみ行い、実行結果を表示
-e 実行するコマンドを指定(デフォルトはrsh)
  ※ネットワーク越しに別のホストにコピーする時に、-e sshなど。
-z ファイルを圧縮
-u 変更・追加されたファイルのみコピー

--existing 更新されたファイルのみコピー、追加されたファイルは無視
--delete コピー元ファイルが削除されたらコピー先でも削除
--exclude 指定したディレクトリを除外する
--exclude-from File 指定したファイルに記載のディレクトリを除外する


ずらずらと書き連ねたけど、まずは-aオプション!って気がする。

ネットワーク経由でリモートホストにコピーする際は、コピー先ホストを指定する。
以下の例はtestディレクトリを圧縮し、host77の/backupディレクトリ内に差分コピー
している。

# rsync -auvz --delete -e ssh test host77:/backup


単純なコピーであればtarとsshの組み合わせだけでも可能。

# tar capf – test | ssh host77 tar -xzpf – -C /backup


しかしrsync コマンドは毎回ファイルを丸ごとコピーするのではなく、オプションによって
新旧ファイル間の差分のみをコピーすることができる。なので初回以降は高速にデータ
の同期を取ることができる、ってことが大きなメリットかな。

補足(試験範囲外)
上記以外にも沢山オプションがあり、なかなか深いrsync。
ついでに参考サイトをここに貼っておこう。

http://x68000.q-e-d.net/~68user/unix/pickup?rsync

http://itpro.nikkeibp.co.jp/article/COLUMN/20070822/280169/?ST=neteng

リモートでrsyncコマンドを実行するとパスワードを聞かれる。
cronで定期的にバックアップを取りたい場合に、パスワードを聞かれずに済むには。
いろんなやり方があるんだろうけど、こんなのありました。
↓ ↓ ↓
Red Hat Linux でリモートマシンへバックアップ(rsync & cron)

次回からは気合いを入れて、第7章 DNSへ。突っ走ります。

出典
Linux教科書LPICレベル2(翔泳社)


Linux記事一覧はこちらをどうぞ
↓ ↓ ↓
Linux-index

Categories: LPIC

No Responses so far | Have Your Say!

Comments are closed.