Como preservar os atributos de arquivo do Windows ao copiar arquivos no Linux?

8

Estou usando um script Bash personalizado em execução em uma máquina Linux para duplicar em massa unidades USB formatadas em FAT32.

Eu preciso preservar atributos de arquivo do Windows, como "oculto".

Eu uso rsync(ou ddcom finde mkdirna versão mais recente para forçar a sincronização de E / S para melhor estabilidade e uso ideal da largura de banda).

Eu tentei cegamente -Xe -Atroque rsync, que dizem preservar alguns atributos de arquivo, mas eles não parecem funcionar para os atributos de arquivo do Windows.

Existe alguma maneira de ler e gravar atributos de arquivo do Windows em um ambiente Linux?

Eu poderia aplicá-los após a cópia, se não houver uma maneira mais fácil.

Não quero ddum sistema de arquivos de origem inteiro, porque isso não será otimizado, especialmente quando você precisa gravar centenas de unidades. Às vezes, as unidades têm 16 GB de capacidade e apenas alguns GB de arquivos - e um idiota ddcopiava todos os 16 GB, demorando muito para que isso funcionasse na produção.

Eu pesquisei na web, mas parece que os atributos estendidos do Linux não têm nada a ver com os atributos de arquivo do Windows e não encontrei nenhuma maneira de ler e escrever essas informações (ou simplesmente copiá-las com os arquivos).

unfa
fonte
"Escondido" é o único que você deseja preservar ou existe outro?
M. Becerra
2
Interessante. O driver Linux VFAT exporta esses atributos de qualquer maneira que possa ser gravada?
Ilkkachu
@ M.Becerra - atualmente, só preciso do atributo "hidden" e provavelmente não precisarei de nenhum outro no futuro.
UNFA
@StephenKitt - preciso ler isso no sistema de arquivos de origem e transferir essas informações para meus novos sistemas de arquivos duplicados. Eu acho que um método muito grosseiro para substituir esse problema seria zerar o sistema de arquivos de origem (para limpar o espaço vazio), criar uma imagem dd compactada e escrever isso nas novas unidades, ignorando partes esparsas para evitar escrever partes vazias do arquivo imagem. Isso é um pouco de força bruta e acho que não teria um desempenho comparável rsyncou operação manual find/ mkdir/ que ddeu uso agora.
unfa 2/06
1
@ilkkachu sim, existem dois ioctls que podem ser usados ​​para recuperar e definir atributos FAT. Veja fatattruma implementação de uma ferramenta usando estes.
Stephen Kitt

Respostas:

1

Eu posso pensar em algumas maneiras de lidar com isso.

O primeiro é usar o Mtools para copiar os arquivos. Para que isso funcione, você precisa definir "unidades" (digamos A: para a unidade de origem, B: para o destino), então você poderá copiar tudo, preservando atributos e registros de data e hora, usando

mcopy -s -p -m a: b:

(não testado).

O segundo é pós-processar os atributos usando fatattr(que está disponível na maioria das distribuições). Ele lida com sistemas de arquivos montados, para que você copie seus sistemas de arquivos da mesma maneira que faz atualmente, use fatattrpara listar todos os atributos FAT de todos os arquivos de origem e analise-os para instruir fatattra definir os atributos adequadamente nos arquivos de destino .

Stephen Kitt
fonte
Eu tive problemas com mcopy, ele travou ao tentar copiar a pasta "Informações do volume do sistema", gerando um erro do GCC "pilha quebrada detectada". Então, eu vou tentar usar fatattr.
unfa 5/06
Você tem “Informações sobre o volume do sistema” em um sistema de arquivos FAT32? Eu pensei que era apenas uma coisa NTFS.
Stephen Kitt
Eu teria que voltar.
unfa,