Como um sistema de arquivos pode ser copiado exatamente como está?

10

Eu tenho um sistema de arquivos para um dispositivo que estou programando e gostaria de fazer uma cópia exata. Idealmente, gostaria que esta cópia fosse idêntica à pasta da qual foi copiada. Eu tentei usar cp -r cp -a e rsync -azvP para tentar alcançar isso. Cada um deles resulta em uma pasta com tamanho diferente (usando du -s ) e, em última análise, mesmo que meu dispositivo seja executado fora da pasta original, ele não será executado do que eu copiei.

  • O que está sendo deixado de fora de que os comandos que usei não estão respondendo?
  • É possível manter tudo idêntico ao copiar um sistema / pasta de arquivos? Se sim, como eu faria isso?

P.S. Postei perguntas semelhantes em StackOverflow , mas rapidamente percebi que eu tinha pedido na troca errada

Editar: Isso pode não ser útil, mas não importa qual método eu uso o diretório copiado sempre faz com que a máquina em questão para Kernel Panic com a seguinte saída.

VFS: Unable to mount root fs via NFS, trying floppy. VFS: Cannot open root device "nfs" or unknown-block(2,0) Please append a correct "root=" boot option; here are the available partitions: 1f00 64 mtdblock0 (driver?) 1f02 64 mtdblock2 (driver?) 1f04 2432 mtdblock4 (driver?) 1f05 128 mtdblock5 (driver?) 1f06 4352 mtdblock6 (driver?) 1f07 204928 mtdblock7 (driver?) 1f08 50304 mtdblock8 (driver?) 0800
8388608 sda driver: sd Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

    
por TopGunCoder 17.10.2013 / 21:29

5 respostas

12

Geralmente, uso uma das seguintes alternativas:

  • rsync -aHAX (adicionar v para verbosidade) garante que você preserve qualquer estrutura de link e x-attrs na pasta de destino durante a cópia. Não se esqueça de a significa arquivar e preservar tempo, propriedade e permissões já.
  • Simples tar cvf (não comprima para economizar tempo, apenas as aplique) é o que eu uso se o primeiro não atender o que eu preciso por qualquer motivo e não tenho tempo, mas eu sempre tento o primeiro um.

Para verificar se tudo correu como deveria, você pode executar diff -r <folder1> <folder2> depois, se desejar.

    
por 17.10.2013 / 21:59
4

Ao ler sua resposta nos comentários, parece que você está possivelmente tentando copiar a pasta raiz ("Meu dispositivo não inicializa usando o diretório copiado"). Nesse caso, há várias coisas que você deve fazer.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

Depois de copiar a pasta raiz para o novo sistema, você precisará atualizar o grub antes de inicializar.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
    
por 18.10.2013 / 02:00
2

Você pode tentar o FSArchiver . É o sucessor da peça semelhante, que agora está sem manutenção. Eu usei partimage e FSArchiver no passado, e ambos funcionaram bem. Tanto quanto sei, ambos fazem cópias de um sistema de arquivos que é o mais próximo do original possível. Eu acho que o FSArchiver é um pouco mais poderoso que o partimage. Por exemplo, ele funciona com o ext4, enquanto o partimage não. Veja a tabela de comparação do FSArchiver / partimage .

    
por 17.10.2013 / 21:50
2

Usar du para comparar pastas é inerentemente problemático. Se você quiser realmente comparar dois diretórios baseados apenas em seus tamanhos, use du da seguinte forma:

$ du -sh --apparent-size <dir>

Essa opção informará o tamanho real dos diretórios em relação à quantidade de espaço em disco consumida quando armazenados na mídia da unidade física. Os discos são organizados em blocos e os arquivos são gravados nesses blocos. Se um arquivo precisar apenas de BLOCK + 1 de espaço, ele consumirá 2 BLOCOS de espaço, e é isso que du normalmente informa. Lembre-se que o nome da ferramenta é o uso do disco!

Dado que você está lidando com o que soa como um sistema de arquivos inteiro, eu estaria inclinado a usar dd para fazer uma cópia exata da partição na qual o diretório está

$ dd if=/dev/sda1 of=/srv/boot.img

Você pode usar esse boot.img para restaurar a partição onde quiser.

$ dd if=/srv/boot.img of=/dev/sdb1
    
por 18.10.2013 / 03:34
0

Depende um pouco do que você quer dizer com "idêntico".

  • Basta fazer rsync ficar bem na maior parte do tempo. Às vezes você quer usar tar para empacotar tudo em um arquivo e extraí-lo em outro lugar.
  • Se você quiser um clone do sistema de arquivos completo, poderá usar dd para copiar todo o sistema de arquivos.

Se você tiver algum meio de depurar seu dispositivo, tente descobrir qual é exatamente o problema do motivo atual.

    
por 17.10.2013 / 21:43