restaura o backup do disco escrevendo somente blocos diferentes de zero

0

Supondo que você tenha um backup em disco no formato bruto sda.img e /dev/sda é inicialmente preenchido com zeros, como pular zeros durante a restauração do backup? Um análogo de dd deve detectar o bloco zero no fluxo de entrada e executar uma busca apropriada no dispositivo de saída.

Nota

Eu tentei cp option --sparse=always , mas parece ineficaz, se o destino for um dispositivo de bloco:

[root@vmarch ~]# truncate sda.img -s1G
[root@vmarch ~]# cat sda.img | cp --sparse=always /dev/stdin sdb.img
[root@vmarch ~]# du -h sda.img sdb.img
0       sda.img
0       sdb.img
[root@vmarch ~]# ls -lh sda.img sdb.img
-rw-r--r-- 1 root root 1.0G Jul 31 09:17 sda.img
-rw------- 1 root root 1.0G Jul 31 09:17 sdb.img
[root@vmarch ~]# losetup -f sdb.img
[root@vmarch ~]# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE     DIO
/dev/loop0         0      0         0  0 /root/sdb.img   0
[root@vmarch ~]# cp --sparse=always sda.img /dev/loop0
[root@vmarch ~]# du -h sda.img sdb.img
0       sda.img
1.1G    sdb.img
    
por basin 30.07.2016 / 16:03

1 resposta

0

Com o GNU coreutils (por exemplo, no Linux não integrado), você pode usar cp --sparse=always para tornar o arquivo de saída o mais esparso possível:

cp --sparse=always sda.img /dev/sda

Isso pode ou não ser mais rápido que um straight

cat sda.img >/dev/sda

cp --sparse=always tem que gastar mais tempo lendo e analisando sua entrada. A versão cat gasta mais tempo escrevendo, mas a menos que o dispositivo de saída seja lento, isso não afetará muito a duração da cópia, já que nesse cenário a leitura e a escrita podem ser paralelizadas em grande parte.

    
por 31.07.2016 / 02:45