dd crashing - o que fazer sobre isso

2

Eu tenho dd falhando depois de algumas horas. Normalmente, com uma mensagem como

Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s

Existe algo que eu possa fazer sobre isso? Existe alguma maneira eu posso usar a saída? Ou reinicie de onde parou?

Existe alguma razão para pensar que é porque a partição que está sendo copiada está sendo usada?

Sempre falha em torno de 70 a 80%, geralmente quando a partição deve ser menos usada.

Como esse processo leva tanto tempo, é difícil tentar coisas diferentes.

Eu saio para uma imagem. Eu provavelmente poderia usar uma partição, mas o LVM está envolvido:

sudo lvmdiskscan
/dev/centos/swap [       3.89 GiB] 
/dev/sda1        [     500.00 MiB] 
/dev/centos/root [      50.00 GiB] 
/dev/sda2        [     465.27 GiB] LVM physical volume
/dev/centos/home [     411.38 GiB] 
/dev/sdb1        [     931.51 GiB] 
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume


dd conv=sync,noerror if=/dev/centos/home bs=2000000   of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output error
171062+1 records in
171063+0 records out
342126000000 bytes (342 GB) copied, 4625.3 s, 74.0 MB/s
220856+2 records in
220858+0 records out
441716000000 bytes (442 GB) copied, 6138.1 s, 72.0 MB/s

sexta-feira de manhã ddrescue --sector-size=2048 --cluster-size=$((256*512)) --sparse --verbose /dev/centos/home /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.map

GNU ddrescue 1.18.1 Sobre para copiar 441714 MBytes de / dev / centos / home para /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image     Posições iniciais: infile = 0 B, outfile = 0 B     Copiar tamanho do bloco: 131072 setores Tamanho do salto inicial: 32 setores Tamanho do setor: 2048 bytes

Pressione Ctrl-C para interromper resgatados: 441714 MB, errsize: 8192 B, taxa atual: 0 B / s    ipos: 342124 MB, erros: 1, taxa média: 60675 kB / s    opos: 342124 MB, tempo de execução: 2.02 h, sucesso read: 9 s atrás Acabado

Mas extundelete sd7c_dd.image --restore-directory /home/ob/p -o /tmp/tt extundelete: Bad magic number in super-block when trying to open filesystem sd7c_dd.image

/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota) 
    
por Olav 22.06.2016 / 19:09

3 respostas

6

Você nunca deve executar dd em um sistema de arquivos montado, porque isso pode corromper a imagem, esp. se você quiser fazer um backup. Você pode querer usar tar .

Se você tem certeza de que o dispositivo não está com falha, você pode usar seek (para procurar N blocos no arquivo de saída) e skip=N (para ignorar N blocos da entrada ) bandeiras. Em um sistema Linux, você pode usar o comando dmesg para obter o registro atual do kernel.

Se você não tiver certeza se o dispositivo do qual deseja copiar pode estar em falha, recomendo usar ddrescue para obter uma imagem do dispositivo. Essa ferramenta não aborta em erros de leitura e registra as posições dos blocos que não conseguiram ler corretamente.

    
por 22.06.2016 / 19:38
3

Se você está tentando copiar uma partição que está em uso, você está se preparando para uma queda realmente ruim. Copiar uma partição como essa requer que nada seja gravado nela. Em tudo.

Se você puder quiesce a partição, você pode usar ddrescue , que é projetado para ler discos e partições com setores defeituosos. Uma chamada típica para extrair /dev/sda1 para o arquivo de imagem /media/sda1.img seria assim:

ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/sda1 /media/sda1.img /media/sda1.map

O setor e os tamanhos de cluster definem ddrescue para leitura de 64 MB de unidades. Você pode tentar aumentar isso para 128 MB ou até 256 MB, mas esteja ciente de que isso não aumentará necessariamente a taxa de transferência.

No seu caso particular, sua partição de origem é, na verdade, um volume LVM, portanto, isso é uma grande ajuda: você pode tirar um instantâneo da partição para fazer backup. Neste exemplo, chamei-o de home-snap .

lvcreate --snapshot --name home-snap --size 1G /dev/centos/home
ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/centos/home-snap /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.map
lvremove -y /dev/centos/home-snap
    
por 22.06.2016 / 19:44
2

Se o dispositivo for maior que o 342GB copiado, você provavelmente terá um setor ruim nesse disco.

Você pode usar seek e skip com valores idênticos para retomar.

dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc

68424 provavelmente produzirá o mesmo erro de E / S novamente, então você terá que aumentá-lo. Você não disse qual tamanho de bloco você usou (e eu sou muito preguiçoso para fazer as contas), para pular pequenas regiões de erro você pode preferir um tamanho menor de blocos (então você tem que adaptar seek e skip de acordo).

Não use conv=noerror , ele corrompe as coisas . Se você encontrar mais erros, use ddrescue , é uma ferramenta que lida com erros de leitura melhor que dd .

    
por 22.06.2016 / 19:38

Tags