Copie a otro disco NTFS y conserve los enlaces duros

10

Tengo que copiar la estructura de directorios de un disco NTFS local a otro (Windows 7+) y preservar los enlaces duros que existen dentro de esta estructura de directorios.

Una solución aceptable sería reemplazar los enlaces duros con enlaces simbólicos (relativos) antes de la copia, pero tampoco estoy seguro de si es factible.

¿Cuáles son las opciones aquí?

Estus Flask
fuente
Según superuser.com/questions/624811/… , un software llamado "Shadow Copy Cloner" puede hacer eso.
Vojtech
1
@Vojtech No es un programa gratuito y parece no estar disponible. Pero ln.exe se adapta a mis necesidades, por otro lado. Sin embargo, preferiría tener una alternativa con GUI.
Estus Flas
1
@PJMahoney Sí, estos son enlaces duros, no habría problemas con la copia de uniones y símbolos, este último podría copiarse y repararse más tarde. No pretendo clonarlo, solo copiar la estructura del directorio (que es parte del disco completo) a otro disco no vacío.
Estus Flask

Respuestas:

9

Herramienta para copiar enlaces duros en particiones de disco separadas

LN - Enlaces de línea de comandos

Mando: ln --copy x:\dir\dir2 y:\dir\newdir

En el ejemplo anterior, los directorios y archivos debajo de x: \ dir \ dir2 se copian en y: \ dir \ newdir, y todos los enlaces duros / uniones / enlaces simbólicos dentro de x: \ dir \ dir2 se copian / atan a sus nuevas ubicaciones en y : \ dir \ newdir.

Recurso: http://schinagl.priv.at/nt/ln/ln.html

Descargar: http://schinagl.priv.at/nt/ln/ln.html#contact

Nota: Parece que acaba de descargar este software para la arquitectura de su CPU desde el archivo ZIP, así como desde vcredist (Visual C ++ Redistributable) e instálelo. Luego simplemente extraiga los archivos y carpetas del archivo ZIP a una nueva carpeta en algún lugar (.eg C:\Temp). En la línea de comandos, simplemente vaya a esa carpeta [directorio] y luego ejecute los comandos necesarios para las ubicaciones de su unidad como se muestra en el ejemplo anterior. Ejecutar ln --helpmuestra detalles de ayuda, pero se supone que el ejemplo de comando anterior debe copiar hard linkssegún la documentación.


Link Shell Extension

Recurso: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

Descargar: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact

Secciones o funciones de interés con este software

  • Smart Mirror
  • Clone
  • Smart Copy

ln - Enlaces de línea de comandos - Descargar captura de pantalla ingrese la descripción de la imagen aquí

Link Shell Extension - Descargar captura de pantalla ingrese la descripción de la imagen aquí


NOTAS INTERESANTES

Parece que hard linksestán bloqueados en la misma partición de disco para sus punteros de archivo, etc. y no se pueden usar en varias particiones. Además, hard linksen NTFS, las particiones son parte de los Master File Tableregistros (o atributos para los recuentos al menos), por lo que copiarlos en un disco existente que tenga el suyo MFTsería un problema si no clona byte por byte en el nivel de partición al menos.

Pimp Juice IT
fuente
4

La utilidad de línea de comandos rsynchace lo que le pides.

Suponiendo que sus datos antiguos están en la ubicación A, y sus datos nuevos están en B, haga lo siguiente:

rsync -ahPruvz --hard-links A B

Citando del manual de rsync:

Esto le dice a rsync que busque archivos vinculados en el origen y vincule los archivos correspondientes en el destino.

¿Cómo obtenerlo rsyncy usarlo? Hay 2 alternativas fáciles para Windows:

Primera alternativa: uso cygwin. Es un software de Windows. Instálelo, agregue rsyncen el paso de selección de paquetes. Deje todo lo demás predeterminado. Después de instalarlo, use su shell para escribir el comando. Si lo desea, puede usar la ruta completa, en /usr/bin/rsynclugar de solo rsync. Si desea acceder a las unidades de Windows, use rutas como "/ cygwin / drives" y siempre trate de completar automáticamente usando TAB.

Segunda alternativa: si se trata de una computadora de escritorio, use una distribución GNU / Linux en vivo. Prepare una imagen USB en vivo, inicie desde ella, monte los discos deseados e invoque rsync. Si la imagen en vivo no tiene rsync, instálela. ( apt-get install rsyncen Debian y sus derivados). Si aún no tiene experiencia con el ecosistema de Linux, cygwin podría ser más fácil.

VasyaNovikov
fuente
Gracias por aclarar esto. He comprobado rsync, y de hecho hace el trabajo en enlaces duros (/ cygwin / driveletter y las barras diagonales causan algunas molestias, pero funciona).
Estus Flask
nota: si Aes un directorio, entonces Bdebería ser el nombre que ese directorio tomará en el destino (a diferencia de, cppor ejemplo, donde el último argumento es el directorio padre)
MM
@estus: ¿Qué métodos probaste y cómo funcionó? ¿Y qué resultados viste y te gustaron más?
Alex S
@AlexS No lo recuerdo, pero probablemente terminé con lo lnque se muestra en otra respuesta. Cygwin rsyncde esta respuesta puede funcionar también, como mencioné.
Estus Flas
1
@AlexS Solía utilidad CLI, ln --copy. En cuanto a la GUI, supongo que 'Smart Copy' es lo que estás buscando.
Estus Flask
3

Intenta buscar ventanas en rsync. Dado que rsync tiene una opción para preservar los enlaces duros (flag -H, --hard-links), debería hacer el trabajo (fuente: https://download.samba.org/pub/rsync/rsync.html ).

Puede intentar buscar algo como cwRsync: https://www.itefix.net/cwrsync# este tiene GUI.

cwRsync es un paquete de Rsync para Windows con una GUI de cliente. Puede usar cwRsync para la copia de seguridad y sincronización rápidas de archivos remotos.

Martynas Smilgevičius
fuente
1
Tenga precaución al recomendar software. Tal como está escrito, su respuesta puede verse como spam. Su respuesta debe incluir una descripción del software y cómo aborda la pregunta. Más información: ¿Cómo recomiendo el software en mis respuestas?
bwDraco
1
No pude lograr esto con rsync anteriormente (creo que he usado DeltaCopy para GUI). Puede ser relevante para la implementación del enlace duro NTFS y el hecho de que rsync es principalmente una herramienta * nix. Se agradecería alguna aclaración.
Estus Flask
1

Muy tarde para la fiesta aquí.

Combatir el fuego con fuego. Como robocopy permitió el desorden, también usaremos robocopy para limpiarlo.

Cree un directorio vacío y luego use robocopy para copiar el directorio vacío al destino (que tiene las rutas súper largas) usando la opción de purga.

md %temp%\foo
robocopy %temp%\foo target /purge
rd target
rd %temp%\foo

Eso debería funcionar.

Robert Ricketts
fuente