Mover archivos entre dos recursos compartidos de archivos de Windows en el mismo servidor

Mover archivos entre dos recursos compartidos de archivos de Windows en el mismo servidor

Usando Windows 7 tengo un servidor con carpetas compartidas configurado. Si abro uno de ellos, tomo un archivo y lo muevo a una subcarpeta, es instantáneo; obviamente, el archivo solo se mueve en el servidor. Lo mismo ocurre con dos ventanas que tienen abierta la misma carpeta compartida.

Si, por otro lado, abro otra carpeta compartida en el mismo servidor y muevo un archivo entre ellos, lleva mucho tiempo, como si descargara el archivo del primer recurso compartido a mi computadora en una carpeta temporal y luego lo cargara en el otro recurso compartido. .

¿Hay alguna forma de mover archivos entre diferentes recursos compartidos como este sin que mi computadora los descargue en el medio? Quiero algo de velocidad porque suelen ser archivos bastante grandes.

Respuesta1

Cuando dice "otra carpeta compartida", ¿se refiere a "una carpeta en un recurso compartido de archivos diferente (es decir, una unidad asignada diferente)"? Si es así, ese es el problema y no existe una solución mágica y fácil. Cuando ustedmoverun archivo de una carpeta a otraen el mismo volumen, todo lo que debe suceder es que el sistema operativo escriba una nueva entrada de directorio en la carpeta de destino y borre la entrada de directorio anterior en la carpeta de origen; no es necesario acceder a los datos del archivo. Cuando ustedCopiarun archivo, el sistema operativo debe leer cada bloque de datos y escribirlo en una nueva ubicación. Y un movimiento entre volúmenes también podría ser un movimiento entre discos físicamente separados (debe tratarse como una copia seguida de una eliminación del archivo fuente) porque las entradas del directorio no pueden apuntar a bloques de datos en un volumen diferente.

PD: Irónicamente, un movimiento entre discos físicamente separados podría incluso sermás rápidoque un movimiento entre particiones (volúmenes o “recursos compartidos”) en el mismo disco, porque en el último caso los cabezales de E/S del disco necesitan saltar hacia adelante y hacia atrás entre los cilindros de origen y los cilindros de destino.

Respuesta2

Aunque llego tarde al banquete, aquí está la receta, y creo que es unamétodo práctico, con algunas condiciones previas.

  • la idea centralle está diciendo al servidor que mueva los objetos en una ubicación particular (que por supuesto está en un recurso compartido de Samba) paraotroubicación (que por supuesto está enotroCompartir Samba).

  • inotifywaites el chef, y los cocineros se llaman while, read, y mv. Ese es el equipo para nuestra cena.

  • Y la cocina (o tal vez el comedor) se ve así:

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 │ └─[...] └─[...]

Un usuario inicia sesión en, digamos, share.x. Si el usuario quiere mover/copiar algo dentro de share.x a share.y, aquí está la operación:

  1. Elija los objetos dentro de share.x, muévalos/cópielos a share.x/to.share.y.

  2. El servidor monitorea esas to.share.*carpetas con inotifywait, por lo que sabe que es hora de trabajar.

  3. El servidor mueve los objetos del interior share.x/to.share.ya share.y/recv.

  4. ¡Hecho!

Las condiciones previas incluyen una estructura de carpetas particular como la anterior, un trabajo/servicio/script ejecutado en el servidor para realizar la mvoperación real.

Tengo mi propio código de secuencia de comandos para compartir con ustedes, pero hay muchas mejoras que realizar:

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

Modifíquelos $source_dirpara $dest_diradaptarlos a sus propias necesidades.

Utilizo supervisorpara gestionar un montón de scripts como los anteriores para realizar mi "teletransportación Samba". Si no está familiarizado con supervisor, consultehttp://supervisord.org/y otras respuestas al respecto.

Respuesta3

La forma más fácil/rápida y sucia sería hacerlo desde el propio servidor o crear un recurso compartido que tenga ambos recursos compartidos de destino como subcarpetas (por ejemplo \\servername\c$).

información relacionada