RESTORE(8)

名称
restore, rrestore - dump コマンドで作ったバックアップからファイルやファイルシステムをリストアする

書式
restore -i [-cdhmNuvy] [-b blocksize] [-f file | -P pipecommand] [-s fileno] restore -R [-cdNuvy] [-b blocksize] [-f file | -P pipecommand] [-s fileno] restore -r [-cdNuvy] [-b blocksize] [-f file | -P pipecommand] [-s fileno] restore -t [-cdhNuvy] [-b blocksize] [-f file | -P pipecommand] [-s fileno] [file ...] restore -x [-cdhmNuvy] [-b blocksize] [-f file | -P pipecommand] [-s fileno] [file ...]

rrestore は restore の別名です。

(4.3BSD 形式のオプションは後方互換性のために実装されていますが、 ここでは説明していません。)

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

以下のいずれか 1 つ (複数指定不可) のフラグが必要です:

-i  バックアップからの対話的なリストアを行います。バックアップからディレクトリ情報 を読み取ると、 restore はユーザに展開すべきファイルを選択させるために、 シェルに似たインタフェースでコマンドを受け付けます。 以下のコマンドが使用可能です。引数が必要なコマンドにおいて引数を省略すると、 デフォルトとしてカレントディレクトリが使われます。

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

    cd arg
        カレントディレクトリを指定したディレクトリに移動します。

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

    extract
        展開ファイルリストにあるすべてのファイルをバックアップから展開します。 restore ユーティリティは、どのボリュームをマウントしたいかをユーザにたずねます。 数個のファイルのみを展開するのにもっとも早い方法は、最終ボリュームから開始して 最初のボリュームへと戻ることです。

    help
        利用できるコマンドの簡単な説明を表示します。

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

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

    quit
        即座に中断します。展開リストに何かファイルがあったとしても終了します。

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

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

    what
        ダンプヘッダ情報を表示します。 これには、日付、レベル、ラベル、 ダンプの元となったファイルシステムとホストが含まれます。

-R  フルリストアを再開するために、マルチボリュームのテープのうち特定のものを リストアすることを要求します (下記 -r フラグを参照)。 これはリストア動作を中断したときに使われます。

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

        newfs /dev/da0s1a
        mount /dev/da0s1a /mnt
        cd /mnt
        restore rf /dev/sa0

    restore は、インクリメンタルリストアのための情報を、ルートディレクトリの restoresymtable に記録します。このファイルは、すべての増分をリストアしたあとで削除すべきです。

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

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

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

以下の追加オプションを指定可能です:

-b blocksize
    ダンプレコードあたりのキロバイト数です。 -b が指定されないときは、 restore はメディアのブロックサイズを動的に求めようとします。

-c  通常 restore は、ダンプ対象のファイルシステムフォーマットが 新しいか古い (4.4 以前) かを動的に決定します。 -c フラグはこのチェックを無効にし、 古いフォーマットのダンプからのみ読み込むことを許します。

-d  冗長なデバッグ出力を標準エラーへ送ります。

-f file
    バックアップを file から読み込みます; file は、 /dev/sa0 (テープドライブ) や /dev/da1c (ディスクドライブ) といったスペシャルデバイスファイル、 通常のファイル、 ‘-’ (標準入力) のいずれかです。 ファイル名が “host:file” や “user@host:file” という形式である場合は、 restore は rmt(8) を用いて指定したファイルを指定のホストから読み取ります。

-P pipecommand
    pipecommand で定義された sh(1) スクリプト文字列をバックアップの各ボリュームに対する入力として実行するために popen(3) を使います。 この子のパイプラインの 標準出力 (/dev/fd/1) は restore の入力ストリームにリダイレクトされ、環境変数 RESTORE_VOLUME には現在読み込まれているボリューム番号が設定されます。 ボリュームを 1 つロードする毎に、それがテープドライブ 1 つであるかのように、 pipecommand スクリプトが開始されます。

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

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

-N  通常通り展開しますが、実際には変更をディスクへ書き込みません。 ダンプメディアの完全性の確認や他のテスト目的に使用可能です。

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

-u  特定のタイプのファイルを作成する時に、 リストア先ディレクトリに既に同名のファイルが存在する場合には、 リストアは警告診断を生成し得ます。 この動作を抑制するために、 -u (アンリンク) フラグを指定すると、リストアは古いエントリを削除してから 新しいエントリを作成しようとします。

-v  普通、 restore は何も表示せずにリストア動作を行います。 -v (verbose, 冗長) フラグを指定すると、 扱うファイルのタイプとファイル名が表示されます。

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

診断
リードエラーが発生すると restore ユーティリティはメッセージを表示します。 もし、 -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 は自分自身で再同期をとらなければなりません。 このメッセージはスキップしたブロックの個数を表示します。

環境変数

TAPE
    バックアップを読み取るデバイス。

TMPDIR
    一時ファイルが作成されるディレクトリの名前。

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

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

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

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

ネットワークを介したリストアを行う場合、 root 権限で restore を実行する必要があります。 これは、以前の dump と restore のセキュリティ上の歴史によるものです。 (restore は root に setuid されて使われるように書かれていますが、 restore のコードから全てのバグが取れているとは思わないので、 setuid にて使用する場合は自己の責任において行って下さい。)

一時ファイル /tmp/rstdir* と /tmp/rstmode* は、ダンプの日付とプロセス ID に基づいて、ユニークに生成されます (mktemp(3) を参照してください)。ただし -r または -R が使用された場合は例外です。 これは、中断された -r の動作を -R によって再開可能とするためであり、 別々の処理において同一の一時ファイルを使用することが必要であるためです。 他の場合には、ファイルはユニークです。 これは、同時に 2 個の異なったダンプが開始する可能性があるためであり、 別々の処理が衝突しないようにすべきだからです。

歴史
restore ユーティリティは 4.2BSD から登場しました。