同じサーバー上の2つのWindowsファイル共有間でファイルを移動する

同じサーバー上の2つのWindowsファイル共有間でファイルを移動する

Windows 7 を使用していて、共有フォルダが設定されたサーバーがあります。そのうちの 1 つを開いてファイルを取り出し、それをサブフォルダに移動すると、すぐに処理されます。ファイルは明らかにサーバー上でのみ移動されます。同じ共有フォルダを開いている 2 つのウィンドウの場合も同様です。

一方、同じサーバー上の別の共有フォルダーを開いて、それらの間でファイルを移動すると、最初の共有からコンピューターの一時フォルダーにファイルをダウンロードし、それを別の共有にアップロードするのと同じように、非常に長い時間がかかります。

このように、コンピュータがファイルをダウンロードすることなく、異なる共有間でファイルを移動する方法はありますか? かなり大きなファイルであることが多いため、速度が必要です。

答え1

「別の共有フォルダ」というのは、「別のファイル共有(つまり、別のマップされたドライブ)のフォルダ」という意味ですか?もしそうなら、それが問題であり、簡単な魔法の解決策はありません。動くあるフォルダから別のフォルダにファイルを移動する同じボリュームで必要なのは、オペレーティングシステムが宛先フォルダに新しいディレクトリエントリを書き込み、ソースフォルダの古いディレクトリエントリを消去することだけです。ファイルデータにアクセスする必要はありません。コピーファイルの場合、OS は各データ ブロックを読み取って新しい場所に書き込む必要があります。また、ボリューム間の移動は物理的に別々のディスク間の移動と同じであり、ディレクトリ エントリは別のボリューム上のデータ ブロックを指すことができないため、コピーの後にソース ファイルを削除するものとして扱う必要があります。

PS皮肉なことに、物理的に離れたディスク間の移動はもっと早く同じディスク上のパーティション (ボリュームまたは「共有」) 間の移動よりも高速です。後者の場合、ディスク I/O ヘッドがソース シリンダと宛先シリンダの間を行ったり来たりする必要があるためです。

答え2

宴会には遅れてしまいましたが、それでもレシピはここにあります。いくつかの前提条件を伴う実用的な方法

  • 核となるアイデアサーバーに特定の場所(もちろん1つのSamba共有内)にあるオブジェクトを移動するように指示しています。別の場所(もちろん別のサンバシェア)。

  • inotifywaitはシェフで、、、と呼ばれる調理人がいますwhilereadこれmvが私たちのディナーのチームです。

  • キッチン(ま​​たはダイニングルーム)は次のようになります。

Samba shares ├─share.1 │ ├─recv │ ├─to.share.2 │ ├─to.share.3 │ └─[...] ├─share.2 │ ├─recv │ ├─to.share.1 │ ├─to.share.3 │ └─[...] ├─share.3 │ ├─recv │ ├─to.share.1 │ ├─to.share.2 │ └─[...] └─[...]

たとえば、ユーザーが share.x にログインします。ユーザーが share.x 内の何かを share.y に移動/コピーする場合、操作は次のようになります。

  1. share.x 内のオブジェクトを選択し、 に移動/コピーしますshare.x/to.share.y

  2. サーバーはこれらのto.share.*フォルダーを監視しているためinotifywait、作業する時間であることを認識しています。

  3. サーバーは内部のオブジェクトshare.x/to.share.yを に移動しますshare.y/recv

  4. 終わり!

前提条件には、上記のような特定のフォルダー構造、実際の操作を実行するためにサーバー上で実行されるジョブ/サービス/スクリプトが含まれますmv

皆さんと共有できる独自のスクリプト コードもありますが、改善すべき点が多数あります。

inotifywait -m "$source_dir" --format '%w%f' -e moved_to,create,modify | while read file; do mv -v "$file" "$dest_dir"; done

これらを自分のニーズに合わせて変更し$source_dirます$dest_dir

私はsupervisor「Sambaテレポーテーション」を作るために、上記のようなスクリプトを多数使用しています。 に詳しくない方はsupervisorhttp://supervisord.org/そしてそれについてのその他の回答。

答え3

最も簡単で素早い方法は、サーバー自体から実行するか、両方のターゲット共有をサブフォルダーとして持つ共有を作成することです (例\\servername\c$)。

関連情報