Por que o dd não substitui os dados existentes?

Por que o dd não substitui os dados existentes?

Quando escrevo dados aleatórios no disco com a ferramenta dd, posso acessar os dados antigos novamente. Para testá-lo, primeiro adicionei um arquivo “text.txt” ao disco e escrevi “isto é texto” nele. Meu disco está montado no diretório /mnt/backup.

$ cat /mnt/backup/text.txt
this is text
$

O que eu usei dd:

$ dd if=/dev/urandom of=/dev/sdb1 #this is the disk mounted to the /mnt/backup directory
1025+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 14,4948 s, 74,1 MB/s
$

Se eu tentar listar o conteúdo do disco, não obtenho nenhum resultado, mas quando digito o nome completo do arquivo, posso imprimir o conteúdo do arquivo.

$ ls -l /mnt/backup/
total 0
$ cat /mnt/backup/text.txt
this is text

Por que isso está acontecendo ? O que eu esperava era que os dados existentes também fossem substituídos. Se eu souber o nome completo do arquivo, ainda poderei acessar os dados. Qual é o ponto que perdi?

Responder1

Os dados provavelmente foram sobrescritos, mas alguns deles ainda estão armazenados em cache na memória.

Quando você escreve diretamente no dispositivo dessa forma, ele ignora o mecanismo de cache do sistema de arquivos Linux e vai diretamente para o dispositivo. O que está no cache no momento não é afetado, pelo menos temporariamente. Se o sistema de arquivos ainda estiver montado, o sistema operacional pode até gravar algumas páginas sujas de volta no disco depois de limpá-lo com o dd.

No entanto, o Linux pode eventualmente perceber que o sistema de arquivos está corrompido e isso pode causar pânico no kernel.

Para obter melhores resultados, os sistemas de arquivos devem ser desmontados antes de começar a rabiscar diretamente no dispositivo.

informação relacionada