Solaris のシステム管理 (基本編)

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

この章では、ufsdump コマンドを使用してバックアップを作成したファイルおよびファイルシステムを、ufsrestore コマンドを使用して復元する方法について説明します。

ファイルおよびファイルシステムの復元に関連した手順については、ファイルおよびファイルシステムのバックアップを復元する (作業マップ) を参照してください。

ファイルやファイルシステムのアーカイブ、復元、コピー、または移動に使用可能な他のコマンドについては、第 51 章「UFS ファイルとファイルシステムのコピー (手順)」を参照してください。

ファイルおよびファイルシステムのバックアップを復元する (作業マップ)

次の作業マップに、ファイルおよびファイルシステムの復元手順を示します。

作業 

説明 

参照先 

ファイルとファイルシステムの復元準備 

復元するファイルシステムやファイル、テープデバイス、およびファイルの復元方法を決定する。 

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

使用するテープの決定 

バックアップテープを調べ、復元するファイルまたはファイルシステムを含む最新のバックアップの日付を確認する。 

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

ファイルの復元 

次のいずれかの復元方法を選択する。 

 

 

ファイルの対話的な復元 - 正確なファイル名を把握していない場合、この方法を使用する。この方法では、メディアの内容を参照して、ファイルやディレクトリ単位で選択できる。 

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

 

ファイルの非対話的な復元 - 復元するファイル名を把握している場合には、この方法を使用して高速に操作できる。 

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

 

ファイルシステムの復元 – 復元時の手順の一部として新規ディスクドライブを使用できる場合は、この方法を使用する。 

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

ルート (/) または /usr ファイルシステムの復元

ルート (/) または /usr ファイルシステムを復元する場合には、ローカル CD またはネットワークからシステムを起動する必要がある。

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

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

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

ファイルまたはファイルシステムの復元を開始する前に、次の点を確認してください。

ファイルシステム名の確認

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

必要なテープデバイスのタイプの決定

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

テープデバイス名の決定

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

ファイルシステムの復元

バックアップを実行すると、ファイルやディレクトリは、それらが含まれるファイルシステムからの相対的な位置に保存されます。ファイルとディレクトリを復元するときは、ufsrestore コマンドが現在の作業ディレクトリにファイル階層を作成し直します。

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

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

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

階層を復元する場合、ファイルを配置するファイルシステム内の一時ディレクトリにファイルを復元する必要があります。復元後に、mv コマンドを使用して階層全体を適切な場所に移動します。


注 –

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


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

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

  2. バックアップ計画を参照し、該当するファイルまたはファイルシステムを含む最後のバックアップの日付を調べます。

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

  3. (省略可能) オンラインアーカイブファイルを保持している場合、使用に適したメディアを判別します。


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

    t

    テープ上の各ファイルを表示する。 

    a

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

    archive-name

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

    ./path/ filename

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

    詳細については、ufsrestore(1M) のマニュアルページを参照してください。

  4. 復元するファイルを含むメディアをドライブに挿入し、適切なメディアであることを確認します。


    # ufsrestore tf /dev/rmt/n ./path/filename ./path/filename
    

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

  5. (省略可能) 同じテープに複数のダンプファイルが入っている場合は、使用するダンプの位置までテープを移動します。


    # ufsrestore tfs /dev/rmt/n tape-number 
    

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

次の例は、オンラインアーカイブに /etc/passwd ファイルが存在するかどうかを確認する方法を示します。


# ufsrestore ta /var/tmp/root.archive ./etc/passwd

次の例は、バックアップテープに /etc/passwd が存在するかどうかを確認する方法を示します。


# ufsrestore tf /dev/rmt/0 ./etc/passwd

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

  1. スーパーユーザーになるか、同等の役割を引き受けます。

  2. (省略可能) 安全性のため、書き込み保護を設定します。

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

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


    # cd /var/tmp
    
  5. 対話式で復元を開始します。


    # ufsrestore if /dev/rmt/n
    

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

  6. 復元するファイルのリストを作成します。

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


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


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


      ufsrestore> add filename filename
      
    4. (省略可能) 必要に応じ、復元するファイルのリストからディレクトリまたはファイル名を削除します。


      ufsrestore> delete filename
      
  7. (省略可能) 復元処理中にファイル名を表示します。


    ufsrestore> verbose
    
  8. ファイルを復元します。


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

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

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

次の例では、/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
    
  5. ファイルを復元します。


    # 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. リストをチェックして、リストに指定したすべてのファイルとディレクトリが復元されていることを確認します。

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

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

次の例では、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 Dec 12 10:54:45 2001
Dumped from: the epoch
Level 0 dump of / on earth:/dev/dsk/c0t1d0s0
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
# cd etc
# mv passwd /etc
# mv shadow /etc
# ls -l /etc

例 — リモートのテープデバイスからファイルを復元する

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

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


# ufsrestore xf venus:/dev/rmt/0 ./etc/hosts

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

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


注 –

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


  1. スーパーユーザーになるか、同等の役割を引き受けます。

  2. 必要に応じ、ファイルシステムをマウント解除します。


    # umount /dev/rdsk/device-name
    
  3. ファイルシステムを新規作成します。


    # newfs /dev/rdsk/device-name
    

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

    詳細については、newfs(1M) のマニュアルページを参照してください。

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


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

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

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


    # mount /dev/dsk/device-name /mnt
    
  6. マウントポイントのディレクトリに移動します。


    # cd /mnt
    
  7. (省略可能) 安全性のため、書き込み保護を設定します。

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

  9. ファイルを復元します。


    # ufsrestore rvf /dev/rmt/n
    

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

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

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

  11. ダンプレベルごとに、一番低いレベルから一番高いレベルまで、手順 8 から 手順 10 までの操作を繰り返します。

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


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


    # rm restoresymtable
    

    復元のチェックポイントのために ufsrestore コマンドが作成し、使用した restoresymtable ファイルを削除します。

  14. 別のディレクトリに移動します。


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


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

  17. 新しく復元されたファイルシステムのレベル 0 の バックアップを作成します。


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

    レベル 0 のバックアップが実行されます。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: Sat Jul 14 08:49:33 2001
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. スーパーユーザーになるか、同等の役割を引き受けます。

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

    システムディスクの追加方法については、第 34 章「SPARC: ディスクの追加 (手順)」または第 35 章「x86: ディスクの追加 (手順)」を参照してください。

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


    # mount /dev/dsk/device-name /mnt
    
  4. /mnt ディレクトリに移動します。


    # cd /mnt
    
  5. (省略可能) 安全性のため、書き込み保護を設定します。

  6. ルートファイルシステムを復元します。


    # ufsrestore rvf /dev/rmt/n
    

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

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

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

  8. 必要に応じ、復元を続行します。


    # ufsrestore rvf /dev/rmt/n
    

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

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

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


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


    # rm restoresymtable
    

    復元のチェックポイントのために ufsrestore コマンドが作成し、使用した restoresymtable ファイルを削除します。

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


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


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


    # fsck /dev/rdsk/device-name
    

    復元されたファイルシステムの整合性がチェックされます。

  15. ルートパーティションにブートブロックを作成します。


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

    詳細については、installboot(1M) のマニュアルページを参照してください。

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

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

  17. 新しいファイルシステムのバックアップを作成します。


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

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

  18. 必要に応じ、/usr ファイルシステムについて手順 5 から 16 を繰り返します。

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


    # init 6
    

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

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

次の例は、SPARC システム上でルート (/) ファイルシステムを復元する方法を示します。この例では、システムはローカルの CD またはネットワークから起動するものとします。


# 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/sun4u/lib/fs/ufs/bootblk /dev/rdsk/c0t3d0s0
# ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0
# init 6

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

次の例は、x86 システム上でルート (/) ファイルシステムを復元する方法を示します。この例では、システムはローカルの CD またはネットワークから起動するものとします。


# 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/c0t3d0s2
# ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0
# init 6