web-dev-qa-db-ja.com

Windowsで巨大な(数百万の)ディレクトリツリーをどのようにコピーしますか?

500万を超えるディレクトリを保持するフォルダを持つNTFSパーティションがあります。各ディレクトリには、さらに多くのディレクトリとファイルが含まれています。

SSDに移行し、これらすべてのデータを新しいドライブにコピーする必要がありますが、問題が発生しています。

このようなディレクトリはWindowsエクスプローラーをクラッシュさせるので、私も試しませんでした。

私の最初の試みは robocopy で、これは過去にうまく機能しました。しかし、私がコピーをしようとしたとき、それを何日も置いた後でも、それは決して始まりませんでした。コピーを開始する前に、すべてにインデックスを付けようとしていたと思います。

このサイズのディレクトリをどのようにコピーしますか?

5
Pyrolistical

Robocopyがこのように失敗するのを見たことがありませんが、サイズ/事前インデックス作成が原因で失敗する場合は、コピーを実行するための独自のスクリプトを作成してみませんか?私はこれをPerlで記述し、ファイルごとにコピーを実行して再帰的に処理します。チェックインを追加して、ファイルが同じタイムスタンプですでに存在するかどうかなどを確認できます。

マルチスレッドの RichCopy もチェックアウトできます。

3
NoahD

他のいくつかの回答が言っているように、私はRoboCopyがこのように失敗するのを見たことがありません-AFAIK、それは前もってインデックスを作成しません、それは最初のディレクトリから始まり、仕事を続けます。

RoboCopyの最新バージョンはありますか?その日付の周りに浮かんでいる古いコピーがいくつかあり、古いNTの時代にさかのぼり、大きなコピーで問題が発生する可能性があります。

FWIW、比較のために私のインストールからのバージョンヘッダーは次のとおりです。

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows     ::     Version XP010
-------------------------------------------------------------------------------
3
Bevan

パーティションに他に何があるかはわかりませんが、LinuxライブCD(GPartEdなど)を使用して、パーティション全体をまとめて新しいドライブにコピーすることができます。ボーナスとして、パーティションサイズを変更したい場合は、GPartEdでも変更できます。次に、コピーしたくないものをすべて削除します。 :)

2
romandas

ディレクトリ構造でパス長の問題が発生している可能性があります。 NTFSでは、エクスプローラーまたはCMDの両方がアクセスするよりも長いパスが許可されます。これを処理するには、少しの創造性が必要です。一般に、これはどちらの方法も使用しないファイル書き込みが原因で発生します。または、共有が1つまたは3つ下のディレクトリにあり、それを機能させることができます。

for /D %%D in (*.*) do call copydir.cmd %%D

[CopyDir.CMD]
subst m: %1
m:
xcopy *.* F:\newlocation\ /s/e/h/q/y
subst m: /del

これをディレクトリ構造の上部で実行して、ディレクトリ構造の上部を切り取り、パスをすべてに表示できるように小さくします。 xcopyの代わりに、使用する必要のあるコピーツールを使用してください。

2
sysadmin1138

richcopy のようなマルチスレッドを使用する必要があるかもしれません。これにより、スレッドの数とスレッドごとのDigの深さを指定できます。 500万のdirで試したことはありませんが、数千のdirで使用したことがあり、robocopyよりもはるかにうまく機能しました。私のバッグのトリックのもう1つのコピーユーティリティは XXcopy です。それほど高速ではありませんが、かなりクールなディレクトリクローンオプションがいくつかあります。それはコマンドラインなので、構造を列挙しようとさえしないと思います。ただそれをポンプでくみ上げてください。

1
Jim B

Windows NTbackup または同様のユーティリティを使用してバックアップできますか?通常、大量のデータを移動する場合は、あるデバイスからバックアップしてから、別のデバイスに復元します。

1
Aaron

古き良きxcopyを試してみてください

0
Sven

私はそれを使ったことがなく、それを保証することはできませんが、人々は TeraCopy について良いことを言います。

0
Carl C

本当の答えではなく、より提案された攻撃ライン:これを行うための* nixの方法は、tar cf - | tar xvf -を使用することです。基本的に、tarにアーカイブを作成し、それをtarに直接パイプして(別の場所で)抽出します。たぶん、これは同様の方法でウィンドウ上でも行うことができます。

0
Jan Jungnickel

FastCopyを使用しています( http://www.ipmsg.org/tools/fastcopy.html.en )。これは、10年以上にわたって業界標準のオープンソースコピー機でした。私は他に何も使いません。

0
djangofan

これは一種の悪いハックのように聞こえるかもしれませんが、過去数回、巨大なディレクトリ構造をコピーするときに、WinRARを使用して(圧縮して)ファイルにアーカイブし、それを宛先ドライブに抽出しました。

最も優雅な解決策ではないことを私は知っていますが、それはピンチで機能しました。

最近は、cygwinユーティリティのrsyncやtarを使おうと思っています。

0
Geoff Fritz

私が最初に試すのはRichCopyです。

http://technet.Microsoft.com/en-us/magazine/2009.04.utilityspotlight.aspx?pr=blog

次に試してみるのは、Ubuntu LiveCDまたはKnoppixCDで起動し、RSYNCを実行することです。

ここで覚えておくべき重要なことは、ファイルをコピーするだけでなく、ファイルがINTACTを介してコピーされ、破損がないことを確認することです。

Rsyncを使用して数百万を超えるファイル(400万を超える数を数える)ファイルをコピーしましたが、非常に信頼性が高いことが証明されています。

0
KPWINC

これらのタイプのファイル操作について、 Beyond Compare に感銘を受けました。コピーが失敗した場合、または後で続行する必要がある場合は、copy-only-diffをサポートしているため、どこから始めればよいかがわかります。

0
Kelly S. French

セキュリティACLの保持を気にしない場合は、cygwin経由でrsyncを使用できます。それ以外の場合は、他の前述のユーティリティ(robocopy、richcopy、xcopy)のいずれかを使用してコピーを分割する方法を見つけることがおそらく道です。

0
J.Zimmerman