ファイルシステムのバックアップ
〜ufsdump & ufsrestore〜
0.改定履歴
- 1998.01.16〜1998.02.04 初版
1.はじめに
このドキュメントは,Solaris2.5.1でファイルをファイルシステム単位でバックアップするためのコマンド,ufsdumpとufsrestoreの使用方法とその手順を示すものである.
最初に,ufsdumpを使ってテープへの追記バックアップをサンプルとして説明し,テープの中身の確認方法と,ufsrestoreコマンドを用いたリストアを行なう. その後,OSのバックアップを行なう手順を示す.
このドキュメントを読む前に,テープの操作と概念について知っておいた方が良いと思われるので,予めドキュメント「mtコマンドでテープの操作 〜テープの早送り&巻き戻し〜」を参照しておくことを推奨する.
2.ufsdumpとufsrestore
ファイルシステム全体をバックアップおよびリストアするコマンドとして,Solarisにはufsdump,ufsrestoreが用意されている.
ufsdumpコマンドでは,ファイルシステムをスライス単位にテープに退避するが,スライス全体を退避するだけでなく増分バックアップ機能も有している.
ufsrestoreコマンドでは,ファイルシステムをスライス,ディレクトリ,ファイル単位に復元することが出来る.
3.ufsdumpコマンドの文法
用語としては,“バックアップ”の方が判りやすい?と思うが,ここではコマンド名にならって“ダンプ”としている. 同じ事だと考えればよい.
|
オプション | 説明 |
---|---|
0〜9 | ダンプレベル. |
u | 退避履歴を/etc/dumpdatesに記述する. |
c | 1/4カートリッジテープへ退避.(デフォルトは1/2テープ) マニュアルにはこのように書かれているが,4mm DATテープでも問題なく稼働するとおもわれる. |
f | 磁気テープ装置のデバイス名(デフォルトは/dev/rmt/0となる) |
ダンプレベルは0〜9まであり,0はスライス全体を示す. つまり,ダンプレベル0はフルダンプとなる. ダンプレベル1〜9を指定した場合には,増分ダンプ(インクリメントダンプ)と呼び,指定したレベルより低いレベルで最後にダンプした時から現在までの変更があった部分をダンプする.
4.ダンプ(バックアップ)の実行
ここでは,実際にufsdumpを使ってテープにバックアップを行なう.
現在のファイルシステムの状態をdfコマンドを利用して表示する.
root@duo: df -k ファイルシステム Kバイト 使用済 使用可 使用率 マウント場所 /dev/dsk/c0t0d0s0 288855 43289 216686 17% / /dev/dsk/c0t0d0s6 384871 169408 176983 49% /usr /proc 0 0 0 0% /proc fd 0 0 0 0% /dev/fd /dev/dsk/c0t0d0s4 173015 55770 99945 36% /var /dev/dsk/c0t0d0s7 48023 17771 25452 42% /export/home /dev/dsk/c0t0d0s5 336863 218725 84458 73% /opt /dev/dsk/c0t0d0s3 316279 239454 45205 85% /usr/openwin /dev/md/dsk/d0 7789757 1529329 5481458 22% /raid5 swap 715992 32 715960 1% /tmp root@duo: |
今回は/usr/openwinと/usrをダンプする.

テープには,最初に/usr/openwinが入り,引き続いて/usrが入る.
4.1.最初のバックアップ
まず最初に/usr/openwinをダンプする. そのためには,次のようなコマンドを投入する.
|
この場合,引数にダンプレベル0(フルダンプ)を設定し,/dev/rmt/0のテープ装置にスライスc0t0d0s3,つまり前出のdfの結果/usr/openwinをダンプすることになる.
ここで気をつけるのは,ダンプ対象となるデバイスはキャラクタ型で指定する事である. つまり,dfコマンドで表示される“/dev/dsk/〜”のブロック型ではなく,“/dev/rdsk/〜”のキャラクタを指定することになる. これはファイルシステムが使っている方を選んでいると思われるが,詳細は知らない.(サンプルがそうなっていた) 詳細?は,ドキュメント「/etc/vfstabの編集」を参照.
さらに,引き続いて/usrをバックアップするので,テープを巻き戻さないように為なければならない. Solarisでは,テープを巻き戻さない様(No Rewind)にするデバイスがある. その指定はnを付ければよい. たとえばテープデバイスが/dev/rmt/0であれば,/dev/rmt/0nとなる.
root@duo: ufsdump 0ufc /dev/rmt/0 /dev/rdsk/c0t0d0s3 DUMP: Writing 63 Kilobyte records DUMP: Date of this level 0 dump: 1998年01月20日 (火) 16時06分24秒 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/rdsk/c0t0d0s3 (duo:/usr/openwin) to /dev/rmt/0. DUMP: Mapping (Pass I) [regular files] DUMP: Mapping (Pass II) [directories] DUMP: Estimated 485756 blocks (237.19MB). DUMP: Dumping (Pass III) [directories] DUMP: Dumping (Pass IV) [regular files] DUMP: 485728 blocks (237.17MB) on 1 volume at 484 KB/sec DUMP: DUMP IS DONE DUMP: Level 0 dump on 1998年01月20日 (火) 16時06分24秒 root@duo: |
4.2.追記バックアップ
次に/usrをバックアップする. 前出の/usr/openwinのバックアップ時が終了した時点で,テープが停まっているので,その続きにバックアップすればよい.
|
これ以上のデータをバックアップしないのであれば,デバイスはNo Rewindにしなくて良いので,普通のデバイスを割り当てる.
もし,最後ではないのにNo Rewindデバイスを用いてバックアップした場合には,mtコマンドにてテープを巻き戻せばよい. 詳細はドキュメント「mtコマンドでテープの操作 〜テープの早送り&巻き戻し〜」を参照する.
5.テープの中身の確認
ufsdumpコマンドにて,テープへバックアップが終了した後に,その中身を確認する. 中身を確認するには,ufsrestoreコマンドを用いる.
次の表に,内容確認に必要なufsrestoreコマンドのオプションを示す.
オプション | 説明 |
---|---|
|
指定したファイル,ディレクトリがテープ上にあるか否かを表示する. ファイルなどの指定が無ければ,テープ上にあるEOFまでのファイルを表示する. |
|
デバイス名の指定.(デフォルトは/dev/rmt/0) |
|
1つのテープに複数のダンプファイルが格納されている場合,何番目のダンプファイルが復元の対象かを指定. |
|
復元したディレクトリ,ファイルの一覧を表示. |
5.1.テープに1つのダンプがある場合
1つのテープに1つのダンプがある場合,その内容を見る方法を次に例を示す.
root@duo: ufsrestore tf /dev/rmt/0 > /tmp/dump.txt root@duo: head /tmp/dump.txt 2 . 3 ./lost+found 5696 ./openwin 11392 ./share 17088 ./share/release_info 22784 ./share/release_info/Solaris_2.5.1 22785 ./share/release_info/Solaris_2.5.1/bugs 22786 ./share/release_info/Solaris_2.5.1/driverupdate 22787 ./share/release_info/Solaris_2.5.1/eol 22788 ./share/release_info/Solaris_2.5.1/news root@duo: |
この例では,ufsrestoreコマンドにてテープにある全てのファイル一覧を/tmp/dump.txtとして書き出し,その結果をheadコマンドにて先頭だけを表示させている.
5.2.複数のボリュームがある場合
1つのテープに,複数のボリューム(スライスのダンプ)がある場合には,次のようなコマンドを入力することによって内容を確認することが出来る.
root@duo_49: ufsrestore tf /dev/rmt/0n > /tmp/dump1.txt root@duo_50: ufsrestore tf /dev/rmt/0n > /tmp/dump2.txt root@duo_51: ufsrestore tf /dev/rmt/0n > /tmp/dump3.txt root@duo_52: ufsrestore tf /dev/rmt/0n > /tmp/dump4.txt root@duo_53: ufsrestore tf /dev/rmt/0n > /tmp/dump5.txt Media read error: エラー 0 root@duo_54: |
この場合,気をつけるのは,"/dev/rmt/0n"の部分で,テープのリワインドを行なわずに次々とボリュームを読み込んでいる部分である.
"Media read error"となるまで読み続けることによって,テープの最後までを読み込むことが出来る.
5.3.ファイルの詳細情報を調べる
ファイルの詳細を調べるには,ufsrestoreのvオプションを使って表示させることが出来る.
たとえば,次の例では,先ほどのマルチボリュームの場合で,4番目にダンプしたファイルの内容全内容が入っている/tmp/dump4.txtファイルを参照し,その中にある/root/.cshrcファイルの詳細情報を表示させている.
root@duo: head /tmp/dump4.txt 2 . 3 ./lost+found 5696 ./root 5697 ./root/.cshrc 17120 ./root/.fm 5698 ./root/.dtprofile 5714 ./root/.forward 5717 ./root/hello.cc 5723 ./root/hello.c 5750 ./root/infget root@duo: ufsrestore tvfs /dev/rmt/1 4 root/.cshrc Verify volume and initialize maps Media block size is 126 Extract directories from tape Initialize symbol table. Dump date: 1998年01月22日 (木) 18時03分12秒 Dumped from: the epoch Level 0 dump of /export/home on duo:/dev/dsk/c0t0d0s7 Label: none leaf 5697 ./root/.cshrc root@duo: |
これで判るのは,バックアップ日付は元よりroot/.cshrcというファイルは,Solaris上では/export/home/root/.cshrcというフルパスのファイルで存在しており,スライスはc0t0d0s7であることが判る.
6.リストア
ufsdumpでダンプしたものは,ufsrestoreコマンドにてリストアする.
|
オプション | 説明 |
---|---|
|
指定したファイル,ディレクトリがテープ上にあるか否かを表示する. ファイルなどの指定が無ければ,テープ上にある全ファイルを表示する. |
|
ワーキングディレクトリにダンプファイルすべてを復元. |
|
指定したディレクトリ,ファイルだけを復元. |
|
ufsrestoreを対話的に実行. |
|
復元したディレクトリ,ファイルの一覧を表示. |
|
1つのテープに複数のダンプファイルが格納されている場合,何番目のダンプファイルが復元の対象かを指定. |
|
デバイス名の指定.(デフォルトは/dev/rmt/0) |
※オプションのr,x,t,iは排他的コマンドなので,同時に使うことは出来ない
6.1.指定したディレクトリ&ファイルを作業領域に復元する
以下に,指定したディレクトリ&ファイルを元とは違う場所に復元するコマンドと手順を示す.
|
次に,この作業手順と作業例を示す.
root@duo# pwd /temp root@duo# grep shinnai /tmp/dump1.txt 87 ./shinnai root@duo# ufsrestore xf /dev/rmt/0 ./shinnai 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 #: 1 set owner/mode for '.'? [yn] y root@duo# ls -la 合計 30 drwxr-xr-x 3 root root 512 1月 30日 18:32 . drwxrwxr-x 6 root sys 512 1月 19日 17:30 .. -rw-r--r-- 1 root other 4256 1月 19日 11:42 shinnai drwx------ 2 root root 8192 1月 19日 17:13 lost+found root@duo# |
- pwdにて,カレントディレクトリを表示し,/tempである事を確認.
- /tempでなくてもよく,空いている作業領域を指定する.
- テープ内容リストを書き出した/tmp/dump1.txtファイルの中からファイルがあることを確認する.
- 必須作業ではない.
- リストの出し方については「テープに1つのダンプがある場合」を参照する.
- ufsrestoreコマンドにxオプションを付け,テープ装置/dev/rmt/0から,ファイル"shinnai"を呼び出す.
- 多分,“あなたはまだ全てのボリュームを読み出していません. どのボリュームから呼び出しますか”と書いてあると思うので,1を入力する.
- マルチボリュームになっていないテープでも同じメッセージが出力される.
- “オーナ情報とファイルアクセス権限も復旧するか?”と尋ねられているので,完全に復旧する場合にはyを入力する.
6.2.指定したディレクトリに全てのファイルを復元する
ここでは,テープボリュームの全てのファイルおよびディレクトリを復旧する. これを行なうには,"r"オプションを用いる.
“ボリュームの全て”とは,テープがマルチボリュームの場合のテープの最初から最後の全てではなく,今現在テープヘッダの位置から始まるテープボリュームのことである.(つまり,次のEOFまで...と言った方が判りやすいかもしれない...?)
|
6.3.マルチボリュームの場合の復元
マルチボリュームの場合,そのボリュームをオプション"s"を使うことで指定する事により復元が可能になる.
次にファイルを指定する場合と,ボリューム毎の復元の例を示す. "s"オプションとボリューム番号を指定する以外は応用である.
|
|