Estou um pouco confuso com o tamanho real dos arquivos qcow2.
ls -alh VMs/ubuntu-mini.qcow2
-rw------- 1 root root 21G mar 31 23:15 VMs/ubuntu-mini.qcow2
du -h VMs/ubuntu-mini.qcow2
2,7G VMs/ubuntu-mini.qcow2
Eu queria copiar esse arquivo para uma partição diferente (ext4). Parece que este comando copiou na verdade 21G não apenas 2,7G que eu esperava. E agora, no novo local, esses dois comandos (du e ls) me mostram o mesmo tamanho - 21G.
du -h /media/HDD0/VMs/ubuntu-mini.qcow2
21G /media/HDD0/VMs/ubuntu-mini.qcow2
ls -alh /media/HDD0/VMs/ubuntu-mini.qcow2
-rw------- 1 root root 21G mar 31 23:15 /media/HDD0/VMs/ubuntu-mini.qcow2
Qual é a maneira correta de copiar arquivos qcow2? Existe uma opção no comando "cp" que faz com que ele copie apenas 2,7G?
O arquivo é esparso , o que significa que contém um ou vários "buracos". Quando os dados são lidos de dentro de um buraco, zeros são retornados, mas esses zeros não são armazenados no disco, mas gerados pelo sistema de arquivos.
Esse recurso economiza espaço real no disco rígido quando arquivos enormes, em sua maioria zeros, são armazenados. O
ls
utilitário relatará o tamanho aparente do arquivo, masdu
mostrará o tamanho aparente do arquivo menos o tamanho dos furos no arquivo (que é quanto espaço o arquivo usa no disco).Quando você copia o arquivo,
cp
não preserva a economia do arquivo e os zeros preenchem os buracos.Em sistemas GNU, você pode usar o sinalizador
--sparse=auto
ou com ao copiar o arquivo para preservar a dispersão, desde que os furos sejam suficientemente grandes. Em alguns sistemas BSD (pelo menos OpenBSD), tenta reter os buracos em arquivos esparsos por padrão.--sparse=always
cp
cp
Você também pode usar
rsync
com a opção--sparse
(-S
) para copiar o arquivo.Observe que, mesmo que as lacunas sejam preenchidas com zeros (total ou parcialmente), o arquivo resultante será funcionalmente equivalente ao arquivo original, mas usará mais espaço real em disco.
Consulte também: Um arquivo originalmente esparso e depois expandido pode se tornar esparso novamente?