RESTORE(8)

名称
restore, rrestore - dump で作ったバックアップからファイルやファイルシステムを復元する

書式
restore -i [-cdhmuvyN] [-b blocksize] [-f file] [-s fileno] -R [-cduvyN] [-b blocksize] [-f file] [-s fileno] -r [-cduvyN] [-b blocksize] [-f file] [-s fileno] -t [-cdhuvy] [-b blocksize] [-f file] [-s fileno] [file ...] -x [-cdhmuvyN] [-b blocksize] [-f file] [-s fileno] [file ...]

( 4.3BSD のオプションシンタックスは下位互換のためにインプリメントしてありますが、 ここでは解説しません。)

解説
restore コマンドは dump(8) と逆の動作を行います。 ファイルシステムのリストアを行うには、 まず、フルバックアップのリストアから始め、 続いてその上にインクリメンタルバックアップをリストアします。 フルまたは部分バックアップから、単一のファイルやディレクトリの部分木のみを リストアすることも可能です。 restore は、ネットワークを介した動作も可能です。これを行うには、以下で説明されている -f フラグを参照してください。 コマンドに与えるその他の引数は、リストアされるファイルを指定するための ファイルやディレクトリ名です。 -h フラグが指定されない限り (下記参照)、ディレクトリ名を指定すると、 そのディレクトリ中のファイルやサブディレクトリを (再帰的に) 検索します。

以下のフラグのうちの 1 つだけが必要です:

-i  このモードでは、ダンプデータから対話的にファイルをリストアします。 ダンプデータからディレクトリ情報を読み取ると、 restore はユーザに展開すべきファイルを選択させるために、 シェルに似たインタフェースを提供します。 以下に示したコマンドが利用可能です。これらのコマンドは引数を 1 つ 必要としますが、省略した場合にはデフォルトとしてカレントディレクトリが 指定されたものとみなされます。

    add [arg]
        カレントディレクトリまたは指定した引数のファイルを、展開されるファイルの リストに追加します。ディレクトリ名を指定した場合には、(コマンドラインに -h フラグが指定されない限り) そのディレクトリの下のすべてのファイルが 展開リストに加えられます。 ls でファイルのリストを表示するときに、展開リストに含まれているファイルの頭 には ``*'' がつけられています。

    cd arg
        カレントディレクトリを、引数で指定したディレクトリに変更します。

    delete [arg]
        カレントディレクトリまたは引数で指定したファイル名のファイルを、展開される ファイルのリストから削除します。 ディレクトリ名を指定した場合には、そのディレクトリとその下のすべてのファイルが 展開リストから削除されます (コマンドラインに -h フラグが指定されなかった場合)。 ディレクトリ中のほとんどのファイルを展開する場合には、 ディレクトリ全体を展開リストに加えたあとで不要なファイルだけを 削除するのが一番便利な方法です。

    extract
        展開リストにあるすべてのファイルをダンプデータから展開します。 restore は、どのボリュームへマウントしたいかをユーザにたずねます。 数個のファイルだけを展開する一番早い方法は、最終ボリュームから開始して 最初のボリュームへの方向へ作業を進めることです。

    help,?
        利用可能なコマンドの簡単な説明を表示します。

    ls [arg]
        カレントディレクトリまたは指定されたディレクトリのリストを表示します。 ディレクトリ名の後ろには ``/'' が付け加えられ、展開リストにあるファイルの前に は ``*'' が加えられます。verbose フラグがセットされていた場合には、 各エントリの inode 番号も表示されます。

    pwd カレントディレクトリのフルパス名を表示します。

    quit, xit
        展開リストが空でなくても、リストアを直ちに終了します。

    setmodes
        展開リストにあるすべてのディレクトリの所有者、モード、時刻がセットされる のみで、ダンプデータからはなにも展開されません。 これは、リストアを途中で中断してしまった時の後始末に有効です。

    verbose
        -v フラグの意味を反転します。verbose フラグがセットされている場合には、 ls コマンドは、すべてのエントリに対して、その inode 番号を表示するようになります。 また、 restore コマンドは、ファイルを展開するたびにその情報を表示するようになります。

    what
        dump のヘッダ情報を表示します。

    Debug
        デバッグモードにします。

-R  フルリストアを再開するために、マルチボリュームのテープのうち特定のものを リストアすることを指定します (下記の -r フラグを参照してください)。これはリストア動作が中断されたときに有効です。

-r  リストアします (ファイルシステムの再構築を行います)。 レベル 0 バックアップの復元の前には、復元先となるファイルシステムは newfs(8) で初期化しておき、マウントして、ユーザはその初期化したファイルシステムへ cd(1) しておく必要があります。 レベル 0 バックアップのリストアに成功したら、必要な全ての インクリメンタルバックアップを -r フラグをつけて復元するとよいでしょう。 -r フラグは対話的なファイル展開を行わないため、注意して扱わないと 損害を与えることがあります (ディスクは言うに及ばず、精神的にも)。 一例を挙げます:

        newfs /dev/rrp0g eagle
        mount /dev/rp0g /mnt
        cd /mnt
        restore rf /dev/rst8

    restore がインクリメンタルリストアのための情報をルートディレクトリにあるファイル restoresymtable に残すということを忘れないで下さい。このファイルは、 最後の増分をリストアしたあとで削除すべきです。

    restore は、 newfs(8) や dump(8) と組み合わせることで、ファイルシステムのサイズやブロックサイズといった パラメータを変更するのに使うこともできます。

-t  指定した名前のファイルがバックアップ中にあれば、その名前を表示します。 ファイル名引数がない場合にはルートディレクトリが表示されるため、 -h フラグが指定されない限り、結果としてバックアップ中のすべてのファイルを 表示することになります。このフラグは、以前存在していた dumpdir(8) プログラムのかわりの機能を持つことに注意してください。

-x  メディアから、指定した名前のファイルを読みます。 指定ファイルがディレクトリで、そのディレクトリの内容がバックアップ中に存在し、 かつ -h フラグが指定されていないときには、ディレクトリの内容が再帰的に展開されます。 (可能であれば) ファイルの所有者、修正日時、モードも復元されます。 ファイル名引数が与えられていなければルートディレクトリが展開されるので、 -h フラグが指定されない限り、結果としてバックアップの内容全てが展開されることに なります。

以下の追加オプションも指定できます:

-b blocksize
    ダンプメディア 1 つごとの容量のキロバイト数です。 -b が指定されないときは、 restore はメディアのブロックサイズを動的に求めようとします。

-c  通常 restore は、ダンプデータが古い (4.4 より前) ファイルシステムから作られたものか 新しいフォーマットから作られたものかを動的に決定しようとします。 -c フラグはこのチェックをやめ、古いフォーマットのダンプデータの読み込み だけを許可します。

-d  デバッグモードにします。

-f file
    バックアップを file から読みます。 file は /dev/rst0 (テープデバイス) のようなスペシャルデバイスでも、 /dev/rsd1c (ディスクデバイス) でも、 通常ファイルでも、 ‘-’ (標準入力) でもいいです。 ファイル名が “host:file” または “user@host:file” という形式である場合は、 restore はそのリモートホスト上の指定したファイルを rmt(8) を用いて読みます。 もしファイルが ‘-’ であった場合は、 restore は標準入力からデータを読みます。 よって、 dump(8) と restore を以下のようにパイプラインでつなげてファイルシステムのダンプとリストアを 行うことができます。

        dump 0f - /usr | (cd /mnt; restore xf -)

-h  ディレクトリ名を指定された場合に、その中のファイルではなく、 ディレクトリそのものを展開するようにします。 これによって、ダンプからディレクトリのサブツリーを階層的に 展開してしまうことを防ぎます。

-m  展開を、ファイル名ではなく inode 番号によって行います。 これは、数個のファイルのみを展開したい場合で、ファイルの完全なパス名を 再生することを防ぎたい場合に有用です。

-s fileno
    マルチファイルテープ中の ファイル番号 fileno のファイルを読みます。 ファイル番号は 1 から始まります。

-u  -u (unlink) フラグを指定すると、ファイルを展開する前に削除します。これは、 実行ファイルが使用中の場合に有効です。

-v  通常、 restore は何も表示せずにリストア動作を行います。 -v (verbose) フラグを指定すると、扱ったファイルの名前が、その先頭にファイルタイプ をつけて表示されます。

-y  エラーが発生したときに、リストア動作を中断するかどうかの問い合わせを 行いません。 不良ブロックは常にスキップして、動作を継続しようとします。

-N  実際にはディスクへの書き込みを行いません。

診断
リードエラーが発生するとメッセージを表示します。 もし、 -y が指定されているか、あるいはユーザが ‘y’ の応答をしたならば、 restore はリストアを続行しようとします。

1 巻以上のテープにバックアップが行われていたならば、 restore は次のボリュームをマウントすべき時点でそれをユーザに知らせます。 もし、 -x あるいは -i フラグが指定されていたならば、 restore は、ユーザがマウントしたいのがどのボリュームであるかを問い合わせます。 少数のファイルを最も早く展開する方法は、最終ボリュームから開始して、 最初のボリュームへ向けて作業を進めることです。

restore は数多くの一貫性検査を行っていて、それを表示することがあります。 ほとんどの検査結果の表示は自明なものか、あるいは ``決して起こらない'' ものです。良くあるエラーを以下に示します。

Converting to new file system format.
    古い形式のファイルシステムで作られたダンプテープがロードされました。 この場合、自動的に新しいファイルシステムの形式に変換されます。

<filename>: not found on tape
    指定したファイル名はテープのディレクトリには記録されていましたが、 テープのなかに本体が見当たりませんでした。 このような事態が起きるのは、ファイルを探している間にテープのリードエラー が発生した場合や、稼働中のファイルシステムにおいて作成したダンプテープ を使った場合です。

expected next file <inumber>, got <inumber>
    ディレクトリに記録されていなかったファイルが示されます。 稼働中のファイルシステムにおいて作成したダンプを使った場合に発生することが あります。

Incremental dump too low
    インクリメンタルリストアを行う際に、ダンプが直前のインクリメンタルダンプ よりも前に書かれたものであったり、増分レベルが低すぎるダンプがロード された場合に表示されます。

Incremental dump too high
    インクリメンタルリストアを行う際に、ダンプが直前のインクリメンタルダンプの 続きの範囲から開始していなかったり、あるいは増分レベルが高すぎるダンプが ロードされた場合に表示されます。

Tape read error while restoring <filename>
Tape read error while skipping over inode <inumber>
Tape read error while trying to resynchronize
    テープ (あるいはその他の媒体) のリードエラーが発生しました。 ファイル名が表示されていたならば、その内容はおそらく部分的に不正なものに なっているでしょう。 もし inode がスキップされたり、テープの resynchronize (再同期) が試みられて いたならば、展開されたファイルには問題はありません。しかし、テープ 上からいくつかのファイルを見付けることができないかもしれません。

resync restore, skipped <num> blocks
    ダンプのリードエラーが発生した後に、おそらく restore は自分自身で再同期をとらなければなりません。 このメッセージはスキップしたブロックの個数を表示します。

環境変数
restore は、以下の環境変数が存在する場合はそれを利用します:
TMPDIR
    テンポラリファイルを保存するディレクトリとして、 /tmp の代りに TMPDIR で指定されたディレクトリを用います。 詳細は environ(7) を参照してください。

関連ファイル
/dev/rst0
    デフォルトのテープドライブ
/dev/rst*
    SCSI tape の raw デバイス
/tmp/rstdir*
    テープ中のディレクトリを保持するファイル
/tmp/rstmode*
    ディレクトリの所有者、モード、タイムスタンプ
./restoresymtable
    インクリメンタルリストア間で渡される情報

関連項目
environ(7), dump(8), newfs(8), mount(8), rmt(8)

バグ
使用中のファイルシステムから作成されたダンプから インクリメンタルリストアを行うと、 restore は誤動作を起こすことがあります。

フルリストアの終了後にはレベル 0 ダンプを行う必要があります。 restore はユーザコードで動作するので、inode の割り当てを制御することができません。 したがって、ファイルの内容が変更されていない場合でも、新しい inode 割り当てを 新しいディレクトリ集合に反映させるためには、 フルダンプを行わなければなりません。

テンポラリファイル /tmp/rstdir* と /tmp/rstmode* は、 -r や -R を使用しない限り、 ダンプした日付とプロセス ID を基にしてユニークな名前で生成されます (mktemp(3) を参照して下さい)。なぜならば、 -R は -r で中断した可能性のある操作を再開することが出来るので、 別プロセスであってもテンポラリファイルは同じにすべきだからです。 他の全ての場合は、2 つの別個のダンプを同時に開始する可能性があり、 各操作が互いに競合してはいけないため、ファイルはユニークでなければなりません。

歴史
restore コマンドは 4.2BSD から登場しました。