Eu criei um arquivo esparso com
truncate -s 4T image.img
em um sistema de arquivos ext4 que montei sobre o NFS. O teste a seguir mostra que o sistema tem problemas com o reconhecimento de arquivos esparsos:
cp --sparse=always /mnt/data_extension/a.img /tmp/a.img # where a.img is created the same way image.img is
rsync --sparse /mnt/data_extension/a.img /tmp/a.img
demorarei muito e nunca deixarei que isso demore mais de um segundo, pois o comando mostra que o arquivo esparso não é reconhecido como tal e os furos de cópia / movimentação consomem E / S, o que não deveria ser o caso.
tar --sparse -c -v -f /tmp/a.tar /mnt/data_extension/a.img
retorna imediatamente e produz um tar que pode ser descompactado se a.img estiver vazio, se eu escrever algo dentro (por exemplo, criar um sistema de arquivos btrfs falso com sudo mkfs.btrfs /mnt/data_extension/a.img
), deixa de funcionar, ou seja, demora para sempre como os comandos acima.
Tudo funciona bem no sistema de arquivos ext4 de destino local, ou seja, copiando e movendo a imagem de demonstração a.img
Acontece em 1 segundo ou muito menos.
Quando eu aplico os comandos acima à imagem real image.img
e watch du -h /local/image.img
o tamanho de 0 nunca é atualizado, mas deve depois do primeiro byte ter sido escrito.
montar informações para /mnt/data_extension
:
$ mount | grep /mnt/data_extension
192.168.178.76:/volume1/data_extension on /mnt/data_extension type nfs (rw,addr=192.168.178.76)
Como posso mover / copiar image.img
da montagem NFS para um sistema de arquivos local sem a necessidade de ler 4TB ?!
EDIT: especificando sparse-version=1.0
faz tar
trabalhar no cliente, mas não no NFS (e cifs
que eu tentei entretanto com o mesmo comportamento). Isso permite, pelo menos, tar o arquivo esparso no servidor e transferir o resultado com o custo de uma ação untar desnecessária no cliente.
fonte