UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

ファイルシステムのバックアップ 〜ufsdump & ufsrestore〜


ファイルシステムのバックアップ

〜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コマンドの文法

 用語としては,“バックアップ”の方が判りやすい?と思うが,ここではコマンド名にならって“ダンプ”としている. 同じ事だと考えればよい.

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をダンプする. そのためには,次のようなコマンドを投入する.

/usr/openwinのダンプのコマンド

ufsdump 0ufc /dev/rmt/0n /dev/rdsk/c0t0d0s3

 この場合,引数にダンプレベル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となる.

/usr/openwinのダンプを行なった例
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のバックアップ時が終了した時点で,テープが停まっているので,その続きにバックアップすればよい.

/usrのダンプのコマンド

ufsdump 0ufc /dev/rmt/0 /dev/rdsk/c0t0d0s6

 これ以上のデータをバックアップしないのであれば,デバイスはNo Rewindにしなくて良いので,普通のデバイスを割り当てる.

 もし,最後ではないのにNo Rewindデバイスを用いてバックアップした場合には,mtコマンドにてテープを巻き戻せばよい. 詳細はドキュメント「mtコマンドでテープの操作 〜テープの早送り&巻き戻し〜」を参照する.

5.テープの中身の確認

 ufsdumpコマンドにて,テープへバックアップが終了した後に,その中身を確認する. 中身を確認するには,ufsrestoreコマンドを用いる.

 次の表に,内容確認に必要なufsrestoreコマンドのオプションを示す.

オプション 説明

t
 指定したファイル,ディレクトリがテープ上にあるか否かを表示する. ファイルなどの指定が無ければ,テープ上にあるEOFまでのファイルを表示する.

f
 デバイス名の指定.(デフォルトは/dev/rmt/0)

S
 1つのテープに複数のダンプファイルが格納されている場合,何番目のダンプファイルが復元の対象かを指定.

v
 復元したディレクトリ,ファイルの一覧を表示.

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 [オプション] [引数] ディレクトリ,ファイル名

オプション 説明

t
 指定したファイル,ディレクトリがテープ上にあるか否かを表示する. ファイルなどの指定が無ければ,テープ上にある全ファイルを表示する.

r
 ワーキングディレクトリにダンプファイルすべてを復元.

x
 指定したディレクトリ,ファイルだけを復元.

i
 ufsrestoreを対話的に実行.

v
 復元したディレクトリ,ファイルの一覧を表示.

s
 1つのテープに複数のダンプファイルが格納されている場合,何番目のダンプファイルが復元の対象かを指定.

f
 デバイス名の指定.(デフォルトは/dev/rmt/0)

※オプションのr,x,t,iは排他的コマンドなので,同時に使うことは出来ない

6.1.指定したディレクトリ&ファイルを作業領域に復元する

 以下に,指定したディレクトリ&ファイルを元とは違う場所に復元するコマンドと手順を示す.

指定したディレクトリ&ファイルを復元するとき

ufsrestore xf /dev/rmt/0 /user1/.cshrc

 次に,この作業手順と作業例を示す.

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ファイルの中からファイルがあることを確認する.
  • ufsrestoreコマンドにxオプションを付け,テープ装置/dev/rmt/0から,ファイル"shinnai"を呼び出す.
  • 多分,“あなたはまだ全てのボリュームを読み出していません. どのボリュームから呼び出しますか”と書いてあると思うので,1を入力する.
  • “オーナ情報とファイルアクセス権限も復旧するか?”と尋ねられているので,完全に復旧する場合にはyを入力する.

6.2.指定したディレクトリに全てのファイルを復元する

 ここでは,テープボリュームの全てのファイルおよびディレクトリを復旧する. これを行なうには,"r"オプションを用いる.

 “ボリュームの全て”とは,テープがマルチボリュームの場合のテープの最初から最後の全てではなく,今現在テープヘッダの位置から始まるテープボリュームのことである.(つまり,次のEOFまで...と言った方が判りやすいかもしれない...?)

テンポラリのディレクトリに全てのファイル&ディレクトリを復元する場合

ufsrestore rf /dev/rmt/0

6.3.マルチボリュームの場合の復元

 マルチボリュームの場合,そのボリュームをオプション"s"を使うことで指定する事により復元が可能になる.

 次にファイルを指定する場合と,ボリューム毎の復元の例を示す. "s"オプションとボリューム番号を指定する以外は応用である.

4番目のボリュームにある.cshrcファイルを復元する場合

ufsrestore xfs /dev/rmt/0 4 .cshrc

4番目のボリュームを復元する場合

ufsrestore rfs /dev/rmt/0 4


参考資料



広告スペース
Google