Cópia exata de arquivos do NTFS para outro NTFS usando Linux

14

Tento copiar todos os arquivos de um NTFS para uma unidade externa e quero preservar todas as permissões e atributos. A unidade externa já possui um NTFS e contém outros arquivos.

Eu considerei usar as seguintes ferramentas:

  • ntfsclonenão funciona, pois opera no nível do setor e clonaria todo o FS, destruindo assim os dados antigos. Se usado para criar um arquivo de imagem, não consigo acessar o conteúdo de uma máquina Windows.
  • rsync não preserva todos os metadados.

Uma alternativa seria usar robocopydentro de um Windows em execução, mas eu preferiria copiar os arquivos sem. (A partição de origem é usada como sistema C:\.)

Como posso copiar os arquivos?

Scolytus
fonte
5
Que metadados exatos você está tentando reter aqui que o RSYNC não reterá com os parâmetros apropriados? Você está se referindo aos metadados do tipo software de arquivo de música ou às permissões, estrutura, hora, proprietário, etc. reais do FS? Não sei ao certo o que você já tentou com o RSYNC, mas parece que o uso de parâmetros corretos, como -AXogtpor exemplo, deve reter os metadados do FS em sua maior parte. Por favor, explique o que você tentou que não funciona e quais "metadados" você está vendo que não são retidos entre as partições NTFS.
Juice Pimp TI
Eu sei que os arquivos em si podem ser copiados exatamente byte a byte no linux, mas faltam todas as datas, como criadas, modificadas e acessadas? Ou usuário / proprietário e permissões NTFS? Não há como alterar essas datas e permissões nos arquivos depois que eles são copiados de volta para o Windows NTFS?
Xen2050 26/01

Respostas:

8

Não há como copiar exatamente arquivos NTFS, passando pelo Linux. Até o Wine , a camada de compatibilidade do Windows no Linux, funciona convertendo permissões entre o Linux e o Windows, limitando-se ao seu denominador menos comum (bastante pequeno).

A única solução que vejo é executar o Windows no Linux dentro de uma máquina virtual (ou física).

Acredito que você tenha mencionado essa possibilidade em seu post e prefere evitá-la, mas não vejo outra possibilidade. Somente o Windows pode copiar exatamente arquivos NTFS; O Linux é capaz apenas de copiar partições NTFS.

Este artigo pode ajudar: Como instalar e executar o Microsoft Windows gratuitamente no Linux , usando máquinas virtuais gratuitas disponibilizadas para download pela Microsoft .

harrymc
fonte
Não tenho certeza, mas de acordo com a página de manual do NTFS-3G, a opção streams_interface=xattré definida por padrão. Se eu entendi direito, isso significa que os atributos de arquivo NTFS (incluindo permissões do Windows) são mapeados para xattratributos no linux. Desde cp -ae rsync -Xcopia esses atributos, não deveria ser uma cópia exata?
JJOatXGME
@JojOatXGME: Os modelos de permissões do Windows e Linux são completamente diferentes. Somente os atributos mais básicos têm uma contraparte exata.
harrymc
Eu sei. Não afirmo que o Linux compreenda esses atributos, mas os atributos xattr são um valor-chave-paris que não precisa ser entendido pelo sistema operacional. O NTFS-3G parece disponibilizar permissões do Windows como atributo xattr system.ntfs_acl. O mesmo parece ser verdade para outros matadados no NTFS. Como os atributos xattr são copiados ao usar rsync -Xor cp -a, ele também pode copiar os metadados. Depende das limitações concretas xattre da implementação de ntfs-3g, mas me parece possível.
JojOatXGME
Então, como podemos testar isso corretamente? é isso que precisamos com uma declaração como esta. Só poderia ser útil se puder ser testado ....
UV
1

A primeira coisa é que você precisa se decidir se deseja copiar arquivos, ...

ou você deseja fazer uma cópia completa, setor por setor, da sua partição NTFS, incluindo os "dados antigos", os "outros arquivos", além de "todos os metadados" mencionados acima de maneira ampla.

Para o último, use dd:

dd if=/dev/sda2 of=/mnt/usbdisk/my-ntfs-partition-D.img bs=1M

Diverta-se.

Paxsali
fonte
2
Bem, eu já me decidi e já está em questão. Quero copiar os arquivos com todos os metadados associados. Isso deve ser possível porque o FS de origem e o de destino são NTFS, possuindo assim os mesmos recursos. O uso ddseria uma má escolha, pois não leva em conta as informações de FS. Se você possui um NTFS, sempre deve usá-lo ntfsclonepara criação de imagens.
Scolytus 01/04
Nesse caso, use robocopy ou ntfscopy ( tzworks.net/prototype_page.php?proto_id=9 ), mas nenhum deles está disponível no linux.
Paxsali
Bem, eu também mencionei robocopyna minha pergunta. Então, eu aprecio o seu dinheiro, mas não é realmente uma resposta para minha pergunta.
Scolytus
1

O Linux pode copiar bem o conteúdo dos arquivos NTFS , mas nem todas as datas e atributos modificados / criados / acessados ​​(presumo que seja isso que você deseja preservar).

Então, por que você não apenas anota as datas e atributos atuais ( dirdeve poder exibi-los), copia os arquivos no linux e, depois de executar o Windows, altera novamente as datas e os atributos de volta aos originais.

Use uma ferramenta no Windows que possa alterar os arquivos, como um destes :

Aparentemente , o próprio File Explorer do Windows também não preserva todas as datas do arquivo corretamente . Mas os comandos tar do zip & cygwin devem salvar as datas dos arquivos, portanto, usar um desses no Windows para criar um arquivo primeiro também deve funcionar e, em seguida, basta copiar o arquivo da maneira antiga.


Se os atributos forem super importantes e difíceis de copiar, mesmo no Windows, eles provavelmente deverão ser copiados em um arquivo de texto ou banco de dados ou transformados em parte do nome do arquivo ...

Xen2050
fonte