Este comando: terá dd if=/dev/zero of=/dev/sda bs=1M
êxito se o comando dd estava originalmente em / dev / sda? Isso será concluído porque dd está na memória naquele momento?
10
Há três coisas que podem acontecer:
Até agora, para a teoria. Agora, para um teste prático.
Eu instalei um novo Ubuntu 12.10 em uma VM. (Estação de trabalho VMware em win7-x64, usando opções padrão e um disco virtual de 10 GB).
O comando dd foi concluído com êxito e fui suspenso no que parecia um prompt de trabalho. Eu poderia inserir novos comandos, embora eles falhassem por razões óbvias.
Segmentation fault
e você afirma que foi concluído com êxito ...?Um experimento rápido em uma máquina virtual usando o Damn Small Linux indica que o comando dd é concluído como esperado; o programa é inicialmente carregado na memória para execução e faz muito pouco sentido carregar o executável repetidamente durante o processo. Eventualmente, o dd sairá e informará 'não há espaço no dispositivo'.
Posteriormente, o sistema operacional parece funcionar normalmente à primeira vista, mas trava após o primeiro comando que não pode mais ser executado por razões óbvias e deixa de responder. Uma breve inspeção do conteúdo do disco rígido mostra que a partição foi zerada.
fonte
Na
mmap
página no Linux:Os executáveis são mapeados para a memória pelo kernel através de uma chamada interna para a
mmap
função. UmMAP_PRIVATE
mapeamento de tipo é solicitado (procure nafs/binfmt_elf.c
árvore de origem do kernel).Portanto, tudo se resume ao comportamento de
mmap
: se as alterações no arquivo ou no dispositivo de bloco subjacente ao qual esse arquivo é referenciado são propagadas de volta para as páginas do mapeamento que já foram paginadas e estão presentes.Essa página é baseada nos padrões da API, e não no comportamento do kernel, daí o "não especificado". O comportamento real é que as alterações no arquivo não são propagadas de volta para as páginas já presentes. Obviamente, se o programa saltar repentinamente para uma página de código que não foi paginada e a exclusão já tiver ocorrido, ele receberá uma página com todos os zeros.
Mas, provavelmente, quando o tempo se
dd
apaga, ele paginou todas as páginas de código necessárias para continuar o ciclo de apagamento. Existe a possibilidade de que, uma vez que o loop termine, ele possa atingir algum código que esteja em uma página não presente: como, digamos, uma função se estenda através do limite de uma página, para alcançar a instrução de retorno, é necessário buscar uma página.Mas essa página também pode ser armazenada em cache de uma
dd
chamada anterior .fonte
Sim. Claro, isso também custará a maior parte do seu sistema de arquivos, mas presumivelmente você já sabe disso ...
fonte
Eu cometi um erro recentemente. Eu pretendia colocar um img de 2 GB no cartão SD, mas fiz isso por sda por engano
dd if=rasberrypi.img of=/dev/sda
. Percebi meu erro e cancelei o dd, mas até então ~ 600MB (em um disco com ~ 500GB usado) havia sido gravado. Mesa de partição foi arruinada.A área de trabalho (com 10 GB de memória e esgotada por semanas) continuou funcionando por algumas horas, caso nada acontecesse. Conseguiu transferir arquivos importantes recentemente alterados para o dropbox, navegados normalmente no chrome. Na verdade, eu poderia executar o dd no cartão SD como eu queria originalmente, funcionou bem.
Depois de algumas horas, meu sistema de arquivos entrou no modo somente leitura e programas aleatórios começaram a morrer. Eu estava no sshed em muitos outros sistemas, eu poderia continuar usando essas sessões, mas fazer uma nova sessão deu erro, pois ele não consegue encontrar o programa ssh. Nesse momento, eu podia alternar as abas abertas no chrome, mas o conteúdo das guias parecia "travar". Se eu atualizar, fico com a tela branca para sempre. O rsyslogd estava usando 100% da CPU (1 núcleo) por algum motivo, provavelmente estava confuso por que não conseguia liberar os logs para o disco ... talvez.
Eu tinha um vídeo de 350 MB aberto (e pausado) no VLC, ainda podia reproduzi-lo e pular para qualquer parte do vídeo. Provavelmente desde que é um download recente.
Eu poderia desligar o sistema normalmente usando a GUI, sem erros.
Portanto, isso não responde exatamente à sua pergunta, mas diz o que acontece se você acabar com o início do disco.
A maioria das coisas no disco ainda pode ser recuperável, mas não vou incomodar, já que (espero) tudo o que me interessa é feito.
fonte
Provavelmente ele não será concluído, pois algum outro componente em execução solicitará um arquivo que está faltando e entrará em pânico no kernel. se você realmente deseja zerar o disco, use um CD ao vivo; caso contrário, você nunca poderá garantir o resultado.
fonte