robocopyによるバックアップ#1 古いPCから新しいPCへ

最近、robocopy.exeを使ってフォルダーのバックアップしたのですが、少しはまったことがあったので、その点について投稿します。

新しいPCの導入とデータの移行

新しいPCに乗り換えることにしたので、古いPCから新しいPCにデータを移すことを考えました。古いPCをすぐに別の用途に使う予定です。そのため、データを一つ一つ取捨選択して必要なファイルのみ新しいPCに持っていくことはできません。取捨選択に時間がかかるためです。

幸い、新しいPCは、ストレージの容量が、古いPCのストレージ容量の倍以上あるため、丸ごとデータを持っていくことができます。とりあえず、古いPCのデータを新しいPCに丸ごとバックアップして、新しいPC上で、取捨選択することにしました。

移行するデータの対象

Windows 10の場合、主なフォルダーは以下の通りです。

  • C:\Windows\
  • C:\Program Files\
  • C:\Program Files (x86)\
  • C:\Program Files\
  • C:\ProgramData\
  • C:\Users\Public\
  • C:\Users\{ユーザ名}\
  • C:\{ユーザーが作成したフォルダー名}\

これらについて必要なフォルダーを丸ごと新しいPCにバックアップします。

C:\Windows\ フォルダー

このフォルダーは、Windowsのシステム系ファイル、ドライバーファイルなどが存在するフォルダーです。新しいPCのこのフォルダーには、必要なファイルが存在しているので、古いPCのこのフォルダーはバックアップしないものとします。

C:\Program Files\ フォルダー と C:\Program Files (x86)\ フォルダー

このフォルダーは、Winodws上で動作するアプリのプログラムファイルが存在するフォルダーです。Windowsに標準でついてくるアプリやユーザーが後からインストールしたアプリのファイルが存在します。

このフォルダーのファイルはそのまま新しいPCにコピーしても正常に動作するものではありません。新しいPCにアプリを再インストールすることにより回復することができます。

そのため、古いPCのこのフォルダーはバックアップしないものとします。

ただし、新しいPCでアプリを再インストールするときに、古いPCでは何をインストールしていたのかがわかるアプリ一覧はあると便利です。インストール済みのアプリの一覧は、このフォルダーのサブフォルダー名から推測することもできますが、Windowsの設定でアプリの一覧を確認する方が容易です。インストールしたアプリの一覧は以下の方法で確認できます。

  • 設定」アプリの「アプリ」→「アプリと機能
  • コントロールパネルの「プログラム」→「プログラムと機能」(Windows+R appwiz.cpl)

前者の場合は、一覧にデスクトップアプリとマイクロソフトストアアプリが含まれています。後者の場合は、デスクトップアプリのみの一覧となります。

この一覧の情報を画面キャプチャーなどで保存しておきます。

C:\ProgramData\ フォルダー

このフォルダーは、アプリケーションなどが、全ユーザーに共通のデータを置く場所に使われます。ただし、個々のファイルは、アプリケーション独自の内部的な情報であることが多く、ユーザーはファイルの存在を意識せず、また、ファイルを直接開くことはありません。

なお、Hyper-Vの仮想マシン環境を利用している場合は、既定では仮想マシン環境の構成情報も置かれていることがあります。ただ、仮想マシン環境は、別途、Hyper-Vマネージャーでエクスポートするので、ここでは気にしません。

以上より、基本的にアプリケーションを再イストールすれば回復するものが多いですが、一部後で必要になることもあるかもしれないので、このフォルダーは、バックアップするものとします。ただし、Hyper-Vの仮想マシン環境の構成情報の既定の保存先であるフォルダーはバックアップ対象からはずします。

C:\Users\Public\ フォルダー

このフォルダーは、アプリケーションなどが、全ユーザーに共通のファイルを置く場所に使われます。ここに置かれるファイルは、ユーザーにファイルの存在を意識させるもので、直接開くことができるファイルの場合が多いです。

なお、Hyper-Vの仮想マシン環境を利用している場合は、既定では仮想マシン環境の仮想ストレージファイルも置かれていることがあります。ただ、仮想マシン環境は、別途、Hyper-Vマネージャーでエクスポートするので、ここでは気にしません。

以上より、このフォルダーは、ユーザーデータおよびユーザーファイルが含まれる可能性があるフォルダーなのでバックアップ対象です。ただし、Hyper-Vの仮想マシン環境の既定の保存先である、C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\ はバックアップ対象からはずします。

C:\Users\{ユーザ名}\ フォルダー

このフォルダーは、個々のユーザーのデータやファイルが置かれます。

  • ドキュメント フォルダー
  • ピクチャ フォルダー
  • ミュージック フォルダー
  • ビデオ フォルダー
  • ダウンロード フォルダー
  • デスクトップ

などに置いたファイルもこのフォルダー配下に存在します。

このフォルダーは、ユーザーデータおよびユーザーファイルが含まれる重要なフォルダーなのでバックアップ対象です。

C:\{ユーザーが作成したフォルダー名}\ フォルダー

このフォルダーは、Windowsが使用する既定のフォルダーではありません。しかし、ストレージのルートフォルダーにユーザーがフォルダーを作成してファイルを置くことがあるので、一覧として列挙しました。

ユーザーが作成したフォルダーは、ユーザーファイルが含まれているので、バックアップ対象です。

Hyper-Vの仮想マシン環境のバックアップ

Hyper-Vの仮想マシン環境は、仮想マシン環境作成時に既定の場所に保存した場合、構成情報や仮想ストレージファイルなどは、一つの場所に保存されるのではなく、

  • C:\ProgramData\Microsoft\Windows\Hyper-V\
  • C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\

など複数のフォルダーに配置されます。複数のフォルダーにファイルが配置されているとバックアップも面倒です。

Hyper-Vマネージャーで仮想マシン環境をエクスポートすると、構成情報や仮想ストレージファイルなどは、一つのフォルダーにまとめて保存されます。仮想マシン環境を新しいPCでもそのまま利用したい場合は、このように仮想マシン環境をエクスポートすると、わかりやすい形でバックアップできます。新しいPC側では、エクスポートした仮想マシン環境をHyper-Vマネージャーでインポートすると元の仮想マシン環境が新しいPCで復元できます。

以上より、古いPCの仮想マシン環境のうち、新しいPCでも引き続き使いたい仮想マシン環境はHyper-Vマネージャーでエクスポートしたうえで、バックアップします。

なお、仮想マシン環境をエクスポートした場合はそれがバックアップ相当なので、仮想マシン環境の既定の置き場所である

  • C:\ProgramData\Microsoft\Windows\Hyper-V\
  • C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\

のフォルダーは、バックアップしません。

バックアップの方法

外付けストレージを使って、バックアップをします。バックアップの手順は、

  1. 古いPCに外付けストレージを接続
  2. 古いPCから外付けストレージに仮想マシン環境をエクスポートしてバックアップ
  3. 古いPCから外付けストレージにバックアップが必要なフォルダーをコピー
  4. 古いPCから外付けストレージを外す
  5. 新しいPCに外付けストレージを接続
  6. 外付けストレージから新しいPCにフォルダーをコピー
  7. 外付けストレージから新しいPCに仮想マシン環境をインポートして復元
  8. 新しいPCから外付けストレージを外す

となります。

仮想マシン環境のエクスポート・インポート

仮想マシン環境のエクスポート、および、インポートは、Hyper-Vマネージャーを使います。

Hyper-Vマネージャーでの仮想環境のエクスポートとインポート

図のように、エクスポートのときは、エクスポートしたい仮想マシン環境を選択して、コンテキストメニュー(右クリックメニュー)からエクスポートします。

インポートのときは、右ペインメニューの「仮想マシンのインポート…」から仮想マシン環境をインポートします。

フォルダーのコピーの方法

バックアップするフォルダーのコピーする方法は、

  • 市販のバックアップ専用のツールを使う
  • エクスプローラーでフォルダーをドラック&ドロップしてコピーする
  • Windowsに標準で存在するrobocopy.exeを利用してコピーする

などが考えられます。

1番のバックアップ専用のツールは別途入手する必要があり、今回はこの方法を使いません。

2番のエクスプローラーでのコピーは、非常に手軽です。しかし、この方法はエラー発生時にはコピーが中断してしまいます。エラーで中断した場合、続きから再開する方法がありません。そのため、どこまでバックアップしたかわからなくなります。

また、エクスプローラーでのコピーは、ファイルの更新日時は保持されるのですが、ファイルの作成日やフォルダーの更新日時などは、コピーをした時間に変わってしまします。バックアップでは、これらの日付もできる限り保持したいです。これらの特徴があるため、今回は、エクスプローラーでのコピーの方法は使いません。

3番のrobocopy.exeの方法ですが、Windowsにはファイルやフォルダーをコピーするrobocopy.exeというコマンドラインツールが付属しています。このrobocopy.exeは、エラー発生時の処理を指定することがき、また、ファイルの作成日やフォルダーの更新日時なども保持したコピーが可能です。

今回は、3番のWindows標準で利用できるrobocopy.exeを使うことにします

robocopy.exe

robocopy.exeを引数なしで実行すると、簡単な使い方が表示されます。

C:\Users\admin>robocopy

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

  開始: 2021年3月20日 22:18:19
       簡易な使用法 :: ROBOCOPY コピー元 コピー先 /MIR

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \\共有\パス)。
               /MIR :: 完全なディレクトリ ツリーをミラー化します。

    詳細な使用方法については、ROBOCOPY /? を実行してください。


****  /MIR はファイルをコピーできるだけでなく、削除もできます。

C:\Users\admin>

指定のフォルダーだけコピー

バックアップ(コピー)をしたいだけなら、コピー元とコピー先を指定して実行すればよいです。

robocopy {コピー元フォルダー} {コピー先フォルダー}

です。しかし、これでは、サブフォルダーがコピーされません。

指定のフォルダーをサブフォルダーも含めてコピー

サブフォルダーもコピーしたいので、/MIR もしくは /E のオプションも必要です。ここでは、/MIRを使います。

robocopy {コピー元フォルダー} {コピー先フォルダー} /MIR

この指定で実行すると、ユーザーが作成したフォルダーであれば、多くの場合成功します。しかし、コピー元のファイルが使用中などでコピーができないときは、コピーが進まず、ずっと待ち状態になります。


今回の投稿は、古いPCから新しいPCへrobocopyを使ってバックアップするときの導入の内容となりました。記事が長くなってきたため、robocopyを使ってコピーで問題が発生させないための対処は、次回の投稿で説明したいと思います。

“robocopyによるバックアップ#1 古いPCから新しいPCへ” への1件の返信

コメントを残す