Solaris のシステム管理 (第 1 巻)

第 44 章 ファイルとファイルシステムの復元 (手順)

この章では、ファイルシステムを復元する手順について説明します。

この章で説明する手順は次のとおりです。

この章では、ufsdump コマンドによってバックアップしたファイルやファイルシステムを復元する場合の、ufsrestore(1M) コマンドの使用方法を説明します。ファイルやファイルシステムを、アーカイブ、復元、コピー、または移動できる他のコマンドについては、第 46 章「UFS ファイルとファイルシステムのコピー (手順)」を参照してください。

ファイルとファイルシステムを復元するための準備

ufsrestore コマンドを使うと、ufsdump コマンドで作成されたバックアップから現在の作業ディレクトリに対する相対パスで指定されるディスク上の位置にファイルが コピーされます。ufsrestore を使うと、ファイルシステムの階層構造全体をレベル 0 ダンプとその後に行われた増分ダンプから再ロードしたり、個々のファイルを任意のダンプテープから復元できます。ufsrestore がスーパーユーザーの権限で実行された場合には、ファイルの所有者、最新の変更時刻、モード (ファイルのアクセス権)は元のまま、ファイルが復元されます。

ファイルやファイルシステムの復元を始める前に、次のことがらをあらかじめ確認しておく必要があります。

ディスクデバイス名の決定

バックアップテープに適切な名前が付いている場合は、テープラベルに入っているディスクデバイス名 (/dev/rdsk/devicename) が使えるはずです。詳細は、「ファイルシステム名を検索する方法」を参照してください。

必要なテープドライブのタイプの決定

ファイルを復元するには、バックアップ媒体と互換性のあるテープドライブを使用しなければなりません。バックアップ媒体の形式によって、ファイルの復元にどんなドライブを使用しなければならないかが決まります。たとえば、使用するバックアップ媒体が 8mm テープの場合、ファイルの復元には 8mm テープドライブを使わなければなりません。

テープドライブ名の決定

テープデバイス名 (/dev/rmt/n) をバックアップテープラベル情報の一部として指定しているかも知れません。同じドライブを使ってバックアップテープを復元しようとする場合には、ラベル内にあるデバイス名を使うことができます。媒体のデバイスとデバイス名についての詳細は、第 47 章「テープドライブの管理 (手順)」を参照してください。

ファイルシステム全体の復元

ファイルシステムは全面的に復元しなければならないほど破壊される場合があります。一般的な例として、ディスクヘッドが破損した場合は、ファイルシステムは全面的に復元しなければなりません。ただし、ソフトウェアを復元する前に、ハードウェアを取り替える必要があります。ディスクの取り替え方については、第 30 章「SPARC: ディスクの追加 (手順)」または第 31 章「IA: ディスクの追加 (手順)」を参照してください。/export/home などのファイルシステムを全面的に復元するには、長時間かかります。ファイルシステムを一貫性のある方法でバックアップしていれば、最後の増分バックアップ時の状態に復元することができます。

個々のファイルとディレクトリの復元

バックアップを実行すると、ファイルやディレクトリは、それらが含まれるファイルシステムからの相対的な位置に保存されます。ファイルとディレクトリを復元するときは、ufsrestore が現在の作業ディレクトリにファイル階層を作成し直します。たとえば、/export/doc/books ディレクトリ (/export はファイルシステムです) からバックアップされたファイルは、/export からの相対的な位置に保存されます。つまり、docs ディレクトリ内の book1 ファイルは、テープ上で ./doc/books/book1 として保存されます。後で、./doc/books/book1 ファイルを /var/tmp ディレクトリに復元する場合、そのファイルは /var/tmp/doc/books/book1 に復元されます。

個別のファイルやディレクトリを復元するときには、/var/tmp などの一時的な場所に復元するのが賢明です。ファイルやディレクトリを確認したら、それを適当な位置に移動させてもかまいません。個別のファイルやディレクトリはそれぞれ元の位置に復元できます。その場合には、新しいファイルをバックアップテープからの古いバージョンで上書きしないかどうか確かめてください。


注 -

一時的な場合でも、/tmp ディレクトリにファイルを復元してはなりません。一般的に /tmp ディレクトリは、TMPFS ファイルシステムとしてマウントされており、 TMPFS は ACL などの UFS ファイルシステム属性をサポートしていません。


ファイルシステムの復元

次のことを知っておく必要があります。

使用するテープを決定する方法

  1. 復元したいファイルを最後に変更したのはいつごろだったかをユーザーにたずねます。

  2. 自分が作成したバックアップ計画を参照して、そのファイルまたはファイルシステムが入っていた最後のバックアップの日付を調べます。

    ファイルの最新バージョンを検索するには、増分バックアップファイルを最高レベル (0) から最低レベル (9) へ、最新バージョンから最古バージョンへ逆方向に調べます。

  3. オンラインのアーカイブファイルがある場合には、ufsrestore コマンドを使って正しい媒体を指定します。


    # ufsrestore ta archive-name ./path/filename ./path/filename
    

    t

    テープ上に現れる各ファイルを表示する。 

    a

    テープではなくオンラインアーカイブファイルから内容一覧を読み取る。 

    archive-name

    オンラインアーカイブファイル名を指定する。 

    ./path/filename

    オンラインアーカイブ上で検索するファイル名を指定する。コマンドが成功した場合は、ufsrestore は i ノード番号とファイル名を出力する。成功しなかった場合は、エラーメッセージを出力する。

  4. バックアップが入っている媒体をドライブに挿入し、ufsrestore コマンドを使って正しい媒体であるかどうかを確認します。


    # ufsrestore tf device-name ./path/filename ./path/filename
    

    ファイル名には必ず完全パス名を使用してください。ファイルがバックアップに入っていれば、その名前と i ノード番号が表示されます。入っていなければ、そのファイルはそのボリュームに入っていないことを示すメッセージが表示されます。

  5. 同じテープに複数のダンプファイルが入っている場合は、s /dev/rmt/n オプションを使って、自分が使用したいダンプがあるテープの位置に移動してください。


    # ufsrestore tfs /dev/rmt/n tape_number
    

例 - 使用するテープを決定する

ufsdump を使って /usr スライスをダンプする場合、内容一覧には /usr の下にあるファイルとディレクトリが列挙されます。/usr/bin/pwd がオンラインアーカイブに入っているかどうかを調べるには、次のように入力します。


# ufsrestore ta archive-name ./bin/pwd

/usr/bin/pwd がバックアップテープに入っているかどうかを調べるには、次のように入力します。


# ufsrestore tf /dev/rmt/n ./bin/pwd

対話式でファイルを復元する方法

  1. スーパーユーザーになります。

  2. テープを書き込み保護の状態にします。

  3. 最初のボリュームをテープドライブに挿入します。

  4. ファイルを一時的に復元するためのディレクトリに移動します。


    # cd /var/tmp
    

    他のユーザーとの衝突を防ぐために、/var/tmp/restore などのサブディレクトリを作成し、そのディレクトリに移動してファイルを復元することをお勧めします。

    階層を復元する場合は、復元後のファイルを置くファイルシステムと同じファイルシステム上の一時ディレクトリに、ファイルを復元します。復元後、 mv コマンドで、階層全体を目的の場所に移動します。

  5. ufsrestore コマンドを使って対話式で復元を開始します。

    情報を伝えるためのメッセージと ufsrestore> プロンプトが表示されます。


    # ufsrestore if /dev/rmt/n
    
  6. 復元したいファイルのリストを作成します。

    1. ディレクトリの内容を表示します。


      ufsrestore> ls directory
      
    2. ディレクトリを変更します。


      ufsrestore> cd directory-name
      
    3. 復元したいファイルとディレクトリのリストを作成します。


      ufsrestore> add filename filename
      
    4. ディレクトリや、復元したいファイルのリストからファイル名を削除しなければならない場合は、delete コマンドを使います。


      ufsrestore> delete filename
      
  7. verbose モードをオンにして、復元するファイル名を表示します。


    ufsrestore> verbose
    
  8. リストが完了したら、extract コマンドを使います。


    ufsrestore> extract
    

    どのボリューム番号を使用するかを指定するプロンプトが表示されます。

  9. ボリューム番号を入力して、Return キーを押します。ボリュームが 1 つしかない場合には、1 を入力して Return キーを押します。


    Specify next volume #: 1
    

    リスト内のファイルとディレクトリが抽出され、現在の作業ディレクトリに復元されます。

  10. 現在の作業ディレクトリのモードを変更したくない場合は、set owner/mode プロンプトが表示されたときに n を入力します。


    set owner/mode for `.'? [yn] n
    

    ufsrestore が最後の整理が完了すると、ufsrestore プロンプトが表示されます。

  11. ufsrestore プログラムを終了します。


    ufsrestore> quit
    

    シェルプロンプトが表示されます。

  12. ファイルが復元されたことを確認します。

    1. 復元されたファイルとディレクトリを表示します。


      # ls -l
      

      ファイルとディレクトリのリストが表示されます。

    2. リストで指定したファイルとディレクトリがすべて復元されているかどうかを確認するため、リストを調べます。

    3. ファイルを正しいディレクトリに移動します。

例 - 対話式でファイルを復元する

次の例では、ファイル /etc/passwd/etc/shadow がバックアップテープから復元されています。


# cd /var/tmp
# ufsrestore if /dev/rmt/0
ufsrestore> ls
.:
 .cpr_config   etc/          lost+found/   sbin/         usr/
 TT_DB/        export/       mnt/          sccs/         var/
 b/            home/         net/          share/        vol/
 bin           kernel/       opt/          shared/       ws/
 dev/          lib           platform/     src/          xfn/
 devices/      license/      proc/         tmp/
ufsrestore> cd etc
ufsrestore> add passwd shadow
ufsrestore> verbose
verbose mode on
ufsrestore> extract
Extract requested files
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
extract file ./etc/shadow
extract file ./etc/passwd
Add links
Set directory mode, owner, and times.
set owner/mode for `.'? [yn] n
ufsrestore> quit
# 

対話式でない方法で特定のファイルを復元する方法

  1. スーパーユーザーになります。

  2. 安全のためにテープを書き込み保護の状態にします。

  3. ボリューム 1 のテープをテープドライブに挿入します。

  4. ファイルを一時的に復元するためのディレクトリに移動します。


    # cd /var/tmp
    

    他のユーザーとの衝突を防ぐために、/var/tmp などのサブディレクトリを作成し、そのディレクトリに移動して、ファイルを復元することをお勧めします。

    階層を復元する場合は、復元後のファイルを置くファイルシステムと同じファイルシステム上の一時ディレクトリに、ファイルを復元します。復元後、mv コマンドで、階層全体を目的の場所に移動します。

  5. ufsrestore コマンドを使ってファイルを復元します。


    # ufsrestore xvf /dev/rmt/n filename ...

    x

    引数 filename 内に指定されたファイルまたはディレクトリをコピーするように ufsrestore コマンドに指定する。

    v

    復元するファイル名を表示する。 

    f /dev/rmt/n

    テープデバイス名を識別する。 

    filename ...

    空白で区切られた 1 つ以上の個別のファイルまたはディレクトリの名前。例 : ./export/home/user1/mail ./export/home/user2/mail.

  6. ファイルが入っているボリューム番号を入力して、Return キーを押します。


    Specify next volume #: 1
    

    ファイルは現在の作業ディレクトリに復元されます。

  7. 現在のディレクトリのモードを変更したくない場合は、set owner/mode プロンプトが表示されたときに n と入力して Return キーを押します。


    set owner/mode for '.'? [yn] n
    
  8. 復元されたファイルを確認します。

    1. 復元されたファイルとディレクトリを表示します。


      # ls -l
      

      ファイルとディレクトリのリストが表示されます。

    2. リストをチェックして、リストに指定したすべてのファイルとディレクトリが復元されていることを確認します。

    3. ファイルを適切なディレクトリに移動します。

例 - 特定のファイルを復元する

この例では、passwdshadow ファイルが /var/tmp ディレクトリに復元されます。


# cd /var/tmp
# ufsrestore xvf /dev/rmt/0 ./etc/passwd ./etc/shadow
Verify volume and initialize maps
Media block size is 126
Dump   date: Wed Jul 14 08:42:42 1999
Dumped from: the epoch
Level 0 dump of a partial file system on starbug:/etc
Label: none
Extract directories from tape
Initialize symbol table.
Make node ./etc
Extract requested files
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
extract file ./etc/passwd
extract file ./etc/shadow
Add links
Set directory mode, owner, and times.
set owner/mode for `.'? [yn] n
Directories already exist, set modes anyway? [yn] n
# cd etc
# mv passwd /etc
# mv shadow /etc
# ls -l /etc

リモートドライブを使ってファイルを復元する方法

ufsrestore コマンドを使用するときにテープデバイス名の前に remote-host: を追加して、ファイルをリモートドライブから復元することができます。構文は次のようになります。


ufsrestore xf [user@]remote-host:/dev/rmt/n filename 

例 - リモートドライブを使用してファイルを復元する

次の例では、システム venus 上にあるリモートテープドライブ /dev/rmt/0 を使用してファイルを復元します。


# ufsrestore xf venus:/dev/rmt/0 filename

ファイルシステム全体を復元する方法


注 -

この手順は、ルート (/) または /usr の復元には使用できません。これらのファイルシステムを復元する方法については、「ルート (/) と /usr を復元する方法」を参照してください。


  1. スーパーユーザーになります。

  2. 必要があれば、ファイルシステムをマウント解除します。


    # umount /dev/rdsk/device-name
    
  3. newfs コマンドを使って新しいファイルシステムを作成します。


    # newfs /dev/rdsk/device-name
    

    raw デバイス上で新しいファイルシステムを構築したいかどうかをたずねるプロンプトが表示されます。意図しないファイルシステムを間違って損失してしまわないように、デバイス名が正しいことを確認します。

  4. 新しいファイルシステムを作成しなければならないかどうかを確認します。


    newfs: construct a new file system /dev/rdsk/cwtxdysz:(y/n)? y
    

    新しいファイルシステムが作成されます。

  5. 一時的なマウントポイントに新しいファイルシステムをマウントします。


    # mount /dev/dsk/device-name /mnt
    
  6. ディレクトリを /mnt に変更します。


    # cd mnt
    

    マウントポイントディレクトリに変更しました。

  7. テープを書き込み保護します。

  8. レベル 0 テープの第 1 ボリュームをテープドライブに挿入します。

  9. ufsrestore コマンドを使ってテープ上のファイルを復元します。


    # ufsrestore rvf /dev/rmt/n
    

    レベル 0 ダンプが復元されます。ダンプの実行に複数のテープが必要な場合は、番号の順でテープをロードするようにプロンプトが表示されます。

  10. テープを取り出して、ドライブに次のレベルのテープをロードします。

    テープの復元は必ず 0 から始め、一番高いレベルまで続けてください。

  11. 最低レベルから最高レベルまで、ダンプのレベルごとに、手順 7 から 手順 10 までを繰り返します。

  12. ファイルシステムが復元されていることを確認します。


    # ls
    
  13. restoresymtable ファイルを削除します。


    # rm restoresymtable
    

    ufsrestore によって作成された restoresymtable が削除されます。

  14. 別のディレクトリに変更します。


    # cd /
    
  15. 新しく復元されたファイルシステムをマウント解除します。


    # umount /mnt
    
  16. 最後のテープを取り出し、書き込み保護されていない新しいテープをテープドライブに挿入します。

  17. ufsdump コマンドを使って、新しく復元されたファイルシステムのレベル 0 のバックアップをとります。


    # ufsdump 0uf /dev/rmt/n /dev/rdsk/device-name
    

    ufsrestore はファイルの位置を移動し、i ノード割り当てを変更するので、新しく作成したファイルシステムについては、ただちにバックアップをとるようにしてください。(復元されたファイルシステムは、以前のバックアップ以降に変更されているように見えます)。

  18. 復元されたファイルシステムをマウントします。


    # mount /dev/dsk/device-name /mount-point
    

    復元されたファイルシステムがマウントされ、使用できるようになります。

  19. 復元されマウントされたファイルシステムが使用できることを確認します。


    # ls /mount-point
    

例 - ファイルシステム全体を復元する

この例では、/export/home ファイルシステムが復元されます。


# umount /export/home
# newfs /dev/rdsk/c0t3d0s7
newfs: construct a new file system /dev/rdsk/c0t3d0s7: (y/n)? y
/dev/rdsk/c0t3d0s7:	410400 sectors in 270 cylinders of 19 tracks, 80 sectors
		200.4MB in 17 cyl groups (16 c/g, 11.88MB/g, 5696 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 24432, 48832, 73232, 97632, 122032, 146432, 170832, 195232, 219632,
 244032, 268432, 292832, 317232, 341632, 366032, 390432,
# mount /dev/dsk/c0t3d0s7 /mnt
# cd /mnt
# ufsrestore rvf /dev/rmt/0
Verify volume and initialize maps
Media block size is 126
Dump   date: Wed Jul 14 08:49:33 1999
Dumped from: the epoch
Level 0 dump of /export/home on earth:/dev/dsk/c0t3d0s7
Label: none
Begin level 0 restore
Initialize symbol table.
Extract directories from tape
Calculate extraction list.
Warning: ./lost+found: File exists
Make node ./kryten
Make node ./kryten/letters
Make node ./kryten/reports
Extract new leaves.
Check pointing the restore
extract file ./kryten/.cshrc
extract file ./kryten/.login
extract file ./kryten/b
extract file ./kryten/memos
extract file ./kryten/letters/b
extract file ./kryten/letters/letter1
extract file ./kryten/letters/letter2
extract file ./kryten/letters/letter3
extract file ./kryten/reports/reportA
extract file ./kryten/reports/reportB
extract file ./kryten/reports/reportC
Add links
Set directory mode, owner, and times.
Check the symbol table.
Check pointing the restore
# ls
# rm restoresymtable
# cd /
# umount /mnt
# ufsdump 0ucf /dev/rmt/0 /export/home
                    .
                    .
                    .
# mount /dev/dsk/c0t3d0s7 /export/home
# ls /export/home

ルート (/) と /usr を復元する方法

  1. 新しいシステムディスクを、ルート (/) と /usr ファイルシステムが復元されるシステムに追加します。

    システムディスクを追加する方法についての詳細は、第 30 章「SPARC: ディスクの追加 (手順)」または 第 31 章「IA: ディスクの追加 (手順)」を参照してください。

  2. 新しいファイルシステムを一時的なマウントポイントにマウントします。


    # mount /dev/dsk/device-name /mnt
    
  3. /mnt ディレクトリに変更します。


    # cd /mnt
    
  4. テープを書き込み保護します。

  5. ufsrestore コマンドを使ってルートファイルシステムを復元します。


    # ufsrestore rvf /dev/rmt/n
    

    レベル 0 のテープが復元されます。

  6. テープを外し、次のレベルのテープをドライブにロードします。

    テープの復元は必ず 0 から始め、最も低いレベルから最も高いレベルまで続けてください。

  7. ufsrestore コマンドは必要なだけ続けて使用します。


    # ufsrestore rvf /dev/rmt/n
    

    次のレベルのテープが復元されます。

  8. テープを追加するたびに、手順 6 と手順 7 を繰り返します。

  9. ファイルシステムが復元されていることを確認します。


    # ls
    
  10. restoresymtable ファイルを削除します。


    # rm restoresymtable
    

    ufsrestore によって作成され、復元のチェックポイントに使用された restoresymtable ファイルを削除します。

  11. ルートディレクトリに変更します。


    # cd /
    
  12. 新しく作成されたファイルシステムをマウント解除します。


    # umount /mnt
    
  13. 新しいファイルシステムをチェックします。


    # fsck /dev/rdsk/device-name
    

    復元されたファイルシステムが完全であるかどうかがチェックされます。

  14. installboot コマンドで、ルートパーティションにブートブロックを作成します。


    # installboot /usr/platform/`uname-i`/lib/fs/ufs/bootblk /dev/rdsk/ devicename
    

    SPARC システム上で installboot コマンドを使用する方法については 「SPARC: 例 - ルート (/) ファイルシステムを復元する」を、IA システム上で installboot コマンドを使用する方法については 「IA: 例 - ルート (/) ファイルシステムを復元する」をそれぞれ参照してください。

  15. 新しいテープをテープドライブに挿入します。

  16. 新しいファイルシステムのバックアップをとります。


    # ufsdump 0uf /dev/rmt/n /dev/rdsk/device-name
    

    レベル 0 のバックアップが実行されます。ufsrestore はファイルの位置を移動し、i ノード割り当てを変更するので、新しく作成されたファイルシステムのバックアップは、必ずすぐにとるようにしてください。

  17. 必要があれば、/usr ファイルシステムについて 手順 5 から 手順 18 を実行します。

  18. システムをリブートします。


    # init 6
    

    システムがリブートされます。

SPARC: 例 - ルート (/) ファイルシステムを復元する


# mount /dev/dsk/c0t3d0s0 /mnt
# cd /mnt
# tapes
# ufsrestore rvf /dev/rmt/0
# ls
# rm restoresymtable
# cd /
# umount /mnt
# fsck /dev/rdsk/c0t3d0s0
# installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t3d0s0
# ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0
# init 6

IA: 例 - ルート (/) ファイルシステムを復元する


# mount /dev/dsk/c0t3d0s0 /mnt
# cd /mnt
# tapes
# ufsrestore rvf /dev/rmt/0
# ls
# rm restoresymtable
# cd /
# umount /mnt
# fsck /dev/rdsk/c0t3d0s0
# installboot /usr/platform/`uname -i`/lib/fs/ufs/pboot
/usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t3d0s0
# ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0
# init 6