Перемещать файлы между двумя общими файловыми ресурсами Windows на одном сервере

Перемещать файлы между двумя общими файловыми ресурсами Windows на одном сервере

Используя Windows 7, у меня есть сервер с настроенными общими папками. Если я открываю одну из них, беру файл и перемещаю его в подпапку, это происходит мгновенно — очевидно, что файл перемещается только на сервере. То же самое для двух окон с одной и той же открытой общей папкой.

С другой стороны, если я открою другую общую папку на том же сервере и перемещу файл между ними, это займет очень много времени — как будто файл загружается из первой общей папки на мой компьютер во временную папку, а затем загружается в другую общую папку.

Есть ли способ перемещать файлы между разными общими ресурсами, как это, без того, чтобы мой компьютер загружал их между ними? Мне нужна скорость, потому что это часто довольно большие файлы.

решение1

Когда вы говорите «другая общая папка», вы имеете в виду «папку в другом общем файловом ресурсе (т. е. на другом сопоставленном диске)»? Если так, то это проблема, и нет простого, волшебного решения. Когда выдвигатьсяфайл из одной папки в другуюна том же объеме, все, что нужно сделать операционной системе, это записать новую запись каталога в папку назначения и стереть старую запись каталога в исходной папке — доступ к данным файла не требуется. Когда выкопияфайл, ОС должна прочитать каждый блок данных и записать его в новое место. И перемещение между томами может быть также перемещением между физически отдельными дисками — оно должно рассматриваться как копирование с последующим удалением исходного файла — поскольку записи каталога не могут указывать на блоки данных на другом томе.

PS По иронии судьбы, перемещение между физически отдельными дисками может быть дажеБыстреечем перемещение между разделами (томами или «общими ресурсами») на одном и том же диске, поскольку в последнем случае головки ввода-вывода диска должны перемещаться вперед и назад между исходным цилиндром(ами) и целевым цилиндром(ами).

решение2

Хоть я и опоздал на праздник, но все равно, вот рецепт, и я считаю, что этопрактический метод, с некоторыми предварительными условиями.

  • Основная идеясообщает серверу о необходимости переместить объекты в определенное место (которое, конечно же, находится в одном общем ресурсе Samba)другойместоположение (которое, конечно, находится вдругойПоделиться Samba).

  • inotifywaitшеф-повар, а повара зовут while, read, и 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-телепортацию". Если вы не знакомы с supervisor, пожалуйста, обратитесь кhttp://supervisord.org/и другие ответы по этому поводу.

решение3

Самый простой/быстрый и грязный способ — сделать это с самого сервера или создать общий ресурс, в котором оба целевых общих ресурса будут в виде подпапок (например, \\servername\c$).

Связанный контент