Posso pausar dd escrevendo, remover o meio, montá-lo novamente e continuar sem causar erro de E / S?

0

Estou criando uma imagem compactada da unidade interna de um laptop em um disco USB externo usando um sistema LiveCD GNU / Linux. Também uso pv para monitorar o progresso. Veja como o comando se parece:

dd if=/dev/sda bs=8M conv=noerror,sync | pv -pterab -s 298G /
| gzip -c --fast > /mnt/backup/image.dd.bz

O drive USB é o ADATA HD710. Eu sei que essas unidades tendem a ter um plugue USB muito solto - ele pode facilmente desconectar a unidade se eu a mover. O processo parece estar demorando mais do que eu esperava e tenho medo de ter que mover o laptop e a unidade. Temo que isso desconecte a unidade, interrompa o processo de duplicação e me force a fazer tudo de novo.

Eu já verifiquei se posso desmontar a unidade depois de pausar o processo (com a tecla de atalho Ctrl + Z). Isso só pode ser feito no modo "preguiçoso", o que significa que a unidade não está sendo desmontada, apenas desconectada do diretório de montagem. Esperei até a unidade terminar o trabalho (parou de piscar o LED) e desconectei-o. Eu o conectei novamente, montei no mesmo diretório em que ele foi montado antes e retomei o processo com o comando

fg 1

O Gzip foi encerrado com um erro de E / S.

Por quê? Eu não pude desmontar a unidade mesmo que o dd foi interrompido, porque o kernel sabia que tinha aberto o arquivo naquele disco. Depois que eu removi a unidade, o arquivo aberto deve ter sido fechado, mas não foi reaberto para o processo Gzip acessar depois que eu montei novamente a unidade. Então, quando o Gzip estava tentando continuar escrevendo, ele recebeu um erro de E / S, porque o kernel negou o acesso ao arquivo (o que era inesperado).

Eu também tentei parar o processo, adicionando skip = X (onde X é o número de registros que os relatórios dd gravaram após o encerramento) e anexando o restante da imagem do disco ao arquivo dd.gz. No entanto gunzip sai com um erro dizendo:

gzip: data.dd.gz: invalid compressed data--format violated

Eu acho que poderia funcionar se a imagem não fosse compactada.

É possível interromper o processo (com a tecla Ctrl + C) e continuar anexando ao arquivo criado anteriormente? Como combinar as posições do arquivo? Os dois arquivos Gzip concatenados serão extraídos corretamente para restaurar o disco de sua imagem compactada?

    
por unfa 02.08.2014 / 22:12

1 resposta

0

Como apontado, você pode querer usar o ddrescue.

No entanto, você pode simplesmente acrescentar a um arquivo gzip. Ou seja dd --count 8 | gzip > foo.gz seguido por dd - skip 8 | gzip > > foo.gz simplesmente funciona. O arquivo concatenado será simplesmente extraído para o arquivo de entrada.

Para o primeiro caso que você está descrevendo: geralmente o Linux se esforça para não atrapalhar os processos atuais mantendo um disco montado enquanto estiver em uso. No entanto, se forçar a desconexão do disco, a maneira correta é sinalizar um erro de E / S para o aplicativo. A maneira tradicional do Unix de associar um arquivo aberto com sua contraparte no disco não é pelo seu caminho, mas pelo seu número de inode. Nos usos subseqüentes, este inode pode ter sido reutilizado por um arquivo completamente diferente, ou o inode pode não ser um arquivo. A ideia de persistir arquivos abertos depois de um destacamento da unidade de backup é questionável: os arquivos podem ter sido alterados, portanto, o estado que persistiu pode ser sem sentido. Por outro lado, há um bom caso para 'falhar rapidamente' e fornecer o aviso de aplicação do disco com falha, portanto, pode ser necessário executar uma ação, que nesse caso equivale apenas a interromper o processo de compactação.

O segundo caso diz respeito a quando você para o gzip. O exemplo de trabalho acima permite que o gzip grave o máximo de dados no arquivo que desejar. Por outro lado, quando você suspende o processo ou o interrompe, o arquivo resultante nunca é um arquivo gzip válido. Isso se deve ao fato de que a última coisa que o gzip escreve no arquivo é a soma de verificação dos dados descomprimidos. Embora isso auxilie na detecção de erros em um arquivo, isso não ajuda a tornar o gzip interrompível.

TL; DR: Não, não é possível.

Veja: link

    
por 03.08.2014 / 09:47