Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

volrestコマンドでシャドウ・コピーから以前のバージョンのファイルを取り出す

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2008/06/27
対象OS
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
ボリューム・シャドウ・コピーを使うと、ファイルの過去のバージョンを保存しておくことができる。これにより、削除したファイルや更新したファイルでも元に戻せる。
volrestコマンドを使うと、コマンド・プロンプト上で過去のバージョンのファイルを取り出すことができる。
ただし過去のバージョンのファイルがすべて取り出されるので、不要なバージョンのファイルは手動で削除する必要がある。

解説

 TIPS「シャドウ・コピーでファイルを自動バックアップする(サーバ編)」では、Windows Server 2003やWindows Server 2008上のボリューム・シャドウ・コピー・サービスを使って、更新や削除された以前のバージョンのファイルを取り出せるようにする方法について解説した。サーバ上でボリューム・シャドウ・コピーを有効にしておくと、ファイルが更新されているたびにバックアップが自動的に作成され(デフォルトでは1日2回、変更のチェックとスナップショットの作成が行われる)、間違ってファイルを上書きしたり、削除したりしても、最大で64回分までさかのぼって復旧させることができる(ディスクの空き容量が少ないと、さかのぼれる回数も少なくなる)。

 古いバージョンのファイルを復旧させるには、エクスプローラでサーバの共有フォルダを開き(必ず共有フォルダ経由で作業すること)、ファイルやフォルダを選択して[プロパティ]ダイアログを表示させ、[以前のバージョン]というタブを使って復旧させる。具体的な方法については先のTIPS「シャドウ・コピーで過去のバージョンのファイルを取り出す(クライアント編)」「シャドウ・コピーで削除したファイルを復活させる(クライアント編)」などを参照していただきたい。

 だがWindows XP/Windows Server 2003向けのResource Kitに含まれるvolrest.exeというツールを利用すると、コマンド・プロンプト上から過去のバージョンのファイルを取り出すことができる。大量のファイルを戻したり、複数のサブフォルダの内容をまとめて戻したりするような作業の場合は、コマンド・プロンプト上で作業する方が効率がよい場合がある。本TIPSではその方法について解説する。

操作方法

 volrest.exe(Shadow Copies for Shared Folders Restore Tool)というコマンドはWindows Server 2003/Windows XP向けのリソースキットに含まれているツールである。リソースキット・ツールの入手方法や簡単な解説については、Windows TIPS「Windows OS向けリソースキット・ツールを入手する」を参照していただきたい。いったんこれらのOS上にインストールしてしまえば、そこからvolrest.exeだけをコピーして、Windows Vista上で利用することもできるようである。

volrestコマンドの使い方

 このツールの使い方は、引数なしで起動すると表示される。

C:\>volrest …引数なしで起動するとヘルプが表示される
VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

Usage: VOLREST [options] FileName

Options are:
    /?    - Displays this help.
    /A    - Includes files with specified attributes.
              /AD  Directories (only).
              /AS  System files.
              /AH  Hidden files.
    /B     - Uses bare format (no heading information or summary).
    /S     - Includes files in specified directory and all subdirectories.
    /R:<DirectoryName> -
             Restore all previous versions in target directory.
    /E     - Restores empty directories (use with /R).
    /SCT   - Decorates restored file names with the shadow copy timestamp.
             Use with /R. For example:
             "foo (Wednesday, January 01, 2003, 14.00.00).doc"

             By default files are restored with the same file name. If two
             or more previous versions are restored then the second file is
             renamed with (2), the third one with (3) and so on.

Examples:
    VOLREST Z:\MYDIRECTORY\MYFILE.DOC
    VOLREST \\server\share\MYDIRECTORY\*.DOC /S
    VOLREST Z:\*.* /s /r:C:\OLDFILES
    VOLREST Z:\*.DOC /s /r:C:\OLDFILES /SCT

 引数としてファイル名(ワイルドカード可能)を付けると、そのファイルの過去のバージョンが一覧表示され、/rオプションを付けると、それらのファイルがまとめて指定されたフォルダへ復元される。以下、具体的な手順について説明する。

手順1――過去のバージョンのファイルを一覧表示させる

 まずは、希望する過去のバージョンのファイルがサーバ上のボリューム・シャドウ・コピーのスナップショットとして保存されているかどうかを確認する。このためには、確認したいファイル名を付けてvolrestコマンドを起動する。単一のファイル名でもよいし、ワイルドカードを使ったファイル名を指定してもよい。ただしいずれの場合でも、指定可能なのはリモートのファイル・サーバの共有フォルダ上のファイルだけである。\\server\userのような共有フォルダ名を直接指定してもよいし、そのフォルダをローカルのドライブにマップしたものでもよい。ローカルのコンピュータ上のフォルダを直接指定することはできない(「以前のバージョン」機能は共有フォルダ経由でしか利用できないため)。なお指定できるファイル名(ワイルドカード)は1つだけである。対象が複数ある場合は、引数を変えて複数回実行する。

 例えば、「*.doc」というファイルの過去のバージョンの一覧を表示させるには、次のようにする(すべてのファイルを調べたければ「*」や「*.*」と指定する)。

Z:\user01\企画原稿>volrest *.doc …長形式で表示させる
VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

 Searching previous versions on Z:\user01\企画原稿\*.doc

06/23/2008  05:27            561,664 Z:\@GMT-2008.06.22-23.00.02\user001\企画原稿\企画原稿01.doc
06/18/2008  01:16            561,664 Z:\@GMT-2008.06.22-07.00.03\user001\企画原稿\企画原稿01.doc
06/18/2008  07:42            539,648 Z:\@GMT-2008.06.17-23.00.03\user001\企画原稿\企画原稿01.doc
06/17/2008  03:12            536,576 Z:\@GMT-2008.06.17-07.00.02\user001\企画原稿\企画原稿01.doc
06/16/2008  09:54             23,552 Z:\@GMT-2008.06.16-23.00.02\user001\企画原稿\企画原稿01.doc

               5 File(s)  2,223,104 bytes
               0 Dir(s)

※ Z:\ は、サーバのユーザー共有フォルダをマップしたドライブ

 この例では、ファイル名が長くなって折り返しており、見づらくなっている。そこで/bを付けて実行してみよう。ファイル名の部分のみが表示される。

Z:\user01\企画原稿>volrest *.doc /b …短形式で表示
Z:\@GMT-2008.06.22-23.00.02\user001\企画原稿\企画原稿01.doc
Z:\@GMT-2008.06.22-07.00.03\user001\企画原稿\企画原稿01.doc
Z:\@GMT-2008.06.17-23.00.03\user001\企画原稿\企画原稿01.doc
Z:\@GMT-2008.06.17-07.00.02\user001\企画原稿\企画原稿01.doc
Z:\@GMT-2008.06.16-23.00.02\user001\企画原稿\企画原稿01.doc

 同じ名前のファイル名が5つ表示されているが、これがサーバ上に保存されている過去のバージョンの全ファイルである。最初の長形式の結果を見ると分かるが、ファイルの更新日付がすべて異なっている。またこのファイル名をよく見ると分かるように、先頭の方に(正確には\\server\sahreなどの共有名や、マップしたドライブ名Z:などの直後に)「\@GMT-2008.06.16-23.00.02」などという文字列が付加されている。これはスナップショットを作成した日付と時刻である。この例なら「GMTの2008年06月16日 23時00分02秒」のスナップショットであることが分かる(GMT:グリニッジ標準時のこと)。

 サブフォルダまで検索したければ/sオプションを付ければよい。また/ahや/asオプションを付けると、隠しファイルやシステム・ファイルも検索対象となる。

 なお過去のバージョンのファイルが見つからない場合は、次のように「0 File(s)」と表示される。

Z:\user01\企画原稿>volrest *.xls …存在しないファイルの場合
VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

 Searching previous versions on Z:\user01\企画原稿\*.xls


               0 File(s)  0 bytes …ファイルは見つからない
               0 Dir(s)

手順2――過去のバージョンのファイルを取り出す

 過去のバージョンのファイルが見つかったら、それを取り出してみよう。そのためには、先ほどのコマンドの最後に「/r:<展開先フォルダ>」というオプションを追加する。展開先はどこでもよいが、いったんローカルのディスク上に展開してから、必要なファイルだけを探したり、コピーしたりすればよいだろう。フォルダが存在しない場合は自動的に作成される。

 なおこのコマンドを実行すると、先ほど表示された過去のバージョンのファイルがすべて展開、コピーされる。先のTIPSで紹介したGUIベースの操作と違い、特定のバージョンだけを選んでコピーすることはできない。

Z:\user01\企画原稿>volrest *.doc /r:extracted …extractedフォルダへ展開させる
VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

 Restoring previous versions from Z:\user01\企画原稿\*.doc to extracted …展開中であるというメッセージ

06/23/2008  05:27            561,664 Z:\user01\企画原稿\extracted\企画原稿01.doc
06/18/2008  01:16            561,664 Z:\user01\企画原稿\extracted\企画原稿01(1).doc
06/18/2008  07:42            539,648 Z:\user01\企画原稿\extracted\企画原稿01(2).doc
06/17/2008  03:12            536,576 Z:\user01\企画原稿\extracted\企画原稿01(3).doc
06/16/2008  09:54             23,552 Z:\user01\企画原稿\extracted\企画原稿01(4).doc

               5 File(s)  2,223,104 bytes

 この例では、「Restoring previous versions from ……」というメッセージとともに、過去のファイルがすべて展開されている。ただしこのままではファイル名がすべて同じになってしまうので、それを避けるため、2つ目以降のファイルには末尾に「(1)」「(2」「(3)」……というふうに、数字が付けられている。展開先のフォルダを確認すると、次のようになっている。

Z:\user01\企画原稿>dir extracted …展開した先のフォルダを見てみる
 ドライブ P のボリューム ラベルは USER です
 ボリューム シリアル番号は BC76-4D39 です

 Z:\user01\企画原稿\extracted のディレクトリ

2008/06/26  14:38    <DIR>          .
2008/06/26  14:38    <DIR>          ..
2008/06/18  13:16           561,664 企画原稿01(1).doc …5つのファイルがある
2008/06/18  07:42           539,648 企画原稿01(2).doc
2008/06/17  15:12           536,576 企画原稿01(3).doc
2008/06/16  21:54            23,552 企画原稿01(4).doc
2008/06/23  05:27           561,664 企画原稿01.doc
               5 個のファイル           2,223,104 バイト
               2 個のディレクトリ  38,379,933,696 バイトの空き領域

 過去のバージョンの5つのファイルが、異なる名前に変更されて展開されていることが分かるだろう(それぞれ、ファイルの更新日付がすべて異なっている)。なおこの中には、現在サーバ上に存在する最新のファイルは含まれていない(ファイルが変更されたり削除されたりしない限り、過去のバージョンとして扱われないため)。

 このように、volrestコマンドを利用すると、過去のバージョンのファイルがすべて取り出されるので、不要なファイルは手動で削除する必要がある。

 ところで展開時にさらに/scrオプションを指定すると、スナップショットが作成された日付/時刻の情報がファイル名の一部に組み込まれる。ファイル名だけで簡単に識別できるようにしたい場合は、このオプションを使うとよいだろう。

Z:\user01\企画原稿>volrest *.doc /r:extracted2 /sct …/sctオプション付きで実行する
VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

 Restoring previous versions from Z:\user01\企画原稿\*.doc to extracted2

06/23/2008  05:27            561,664 Z:\user01\企画原稿\extracted2\企画原稿01 (月曜日, 6月 23, 2008, 08.00.02).doc
…(中略)…
               5 File(s)  2,223,104 bytes

Z:\user01\企画原稿>dir extracted2 /b …展開先のフォルダを確認する
企画原稿01 (日曜日, 6月 22, 2008, 16.00.03).doc …ファイル名に日付情報が含まれている
企画原稿01 (月曜日, 6月 23, 2008, 08.00.02).doc
企画原稿01 (水曜日, 6月 18, 2008, 08.00.03).doc
企画原稿01 (火曜日, 6月 17, 2008, 08.00.02).doc
企画原稿01 (火曜日, 6月 17, 2008, 16.00.02).doc

 このファイル名の途中にある「(火曜日, 6月 17, 2008, 16.00.02)」などが、スナップショットの作成時刻である(ファイルの更新時刻ではない)。なお、日付の表記が日本語になっているが、コマンド・プロンプトを英語モードにしておくと(usコマンドを実行しておく)、「企画原稿01 (Wednesday, June 18, 2008, 08.00.03).doc」といったファイル名になる。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間