¿Cómo puedo conservar los atributos de archivo de Windows al copiar archivos en Linux?


8

Estoy usando un script Bash personalizado que se ejecuta en una máquina Linux para duplicar en masa unidades USB con formato FAT32.

Necesito preservar los atributos del archivo de Windows como "oculto".

Yo uso rsync(o ddcon findy mkdiren una versión más nueva para forzar la sincronización de E / S para una mejor estabilidad y un uso óptimo del ancho de banda).

Intenté ciegamente -Xy -Acambié por rsync, que se dice que conservan algunos atributos de archivo, pero no parecen funcionar para los atributos de archivo de Windows.

¿Hay alguna forma de leer y escribir atributos de archivos de Windows en un entorno Linux?

Podría aplicarlos después de copiar si no hay una manera más fácil.

No quiero ddun sistema de archivos fuente completo, porque eso no será optimizado, especialmente cuando necesite escribir cientos de unidades. A veces, las unidades tienen una capacidad de 16 GB y solo unos pocos GB de archivos en ellas, y un tonto ddcopiaría los 16 GB, lo que llevaría demasiado tiempo para que esto funcione en la producción.

He buscado en la web, pero parece que los atributos extendidos de Linux no tienen nada que ver con los atributos de los archivos de Windows, y no he encontrado ninguna forma de leer y escribir esta información (o simplemente copiarla con los archivos).


¿Es "oculto" el único que desea preservar o hay otro?
M. Becerra

2
Interesante. ¿El controlador VFAT de Linux incluso exporta esos atributos de alguna manera que pueda escribirse?
ilkkachu 01 de

@ M.Becerra: actualmente solo necesito el atributo "oculto" y probablemente no necesite otro en el futuro.
unfa

@StephenKitt: necesito poder leer eso desde el sistema de archivos fuente y transferir esa información a mis nuevos sistemas de archivos duplicados. Supongo que un método muy burdo para anular este problema sería llenar a cero el sistema de archivos de origen (para limpiar el espacio vacío), crear una imagen dd comprimida y escribirla en las nuevas unidades omitiendo partes dispersas para evitar escribir partes vacías del imagen. Eso es un poco de fuerza bruta y supongo que no tendría un rendimiento comparable rsynco una operación manual find/ mkdir/ ddque uso en este momento.
unfa

1
@ilkkachu sí, sí, hay dos ioctls que se pueden usar para recuperar y establecer atributos FAT. Vea fatattrpara una implementación de una herramienta usando estos.
Stephen Kitt

Respuestas:


1

Puedo pensar en un par de formas de manejar esto.

El primero es usar Mtools para copiar los archivos. Para que esto funcione, necesitaría definir "unidades" (por ejemplo, A: para la unidad de origen, B: para el destino), entonces debería poder copiar todo, preservar los atributos y las marcas de tiempo, utilizando

mcopy -s -p -m a: b:

(no probado)

El segundo es procesar los atributos usando fatattr(que está disponible en la mayoría de las distribuciones). Maneja los sistemas de archivos montados, por lo que debe copiar sus sistemas de archivos de la misma manera que lo hace actualmente, luego usarlos fatattrpara enumerar todos los atributos FAT de todos los archivos de origen y analizarlos para indicar fatattrque establezca los atributos adecuadamente en los archivos de destino .


He tenido problemas mcopy, se bloqueó al intentar copiar la carpeta "Información del volumen del sistema", lo que provocó un error de GCC "stack smashing detect". Así que intentaré usarlo fatattr.
unfa

¿Tienes "Información del volumen del sistema" en un sistema de archivos FAT32? Pensé que era solo una cosa de NTFS.
Stephen Kitt

Tendría que volver a consultar.
unfa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.