dd가 기존 데이터를 덮어쓰지 않는 이유는 무엇입니까?

dd가 기존 데이터를 덮어쓰지 않는 이유는 무엇입니까?

dd 도구를 사용하여 디스크에 임의의 데이터를 쓰면 이전 데이터에 다시 액세스할 수 있습니다. 테스트하기 위해 먼저 "text.txt" 파일을 디스크에 추가하고 그 안에 "this is text"라고 썼습니다. 내 디스크는 /mnt/backup 디렉터리에 마운트되었습니다.

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

내가 사용한 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
$

디스크 내용을 나열하려고 하면 결과가 나오지 않지만 전체 파일 이름을 입력하면 파일 내용을 인쇄할 수 있습니다.

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

왜 이런 일이 발생합니까? 내가 예상한 것은 기존 데이터도 덮어쓰여지는 것이었습니다. 전체 파일 이름을 알고 있으면 계속 데이터에 액세스할 수 있습니다. 내가 놓친 요점은 무엇입니까?

답변1

데이터가 덮어쓰여졌을 수도 있지만 일부는 여전히 메모리에 캐시되어 있습니다.

이와 같이 장치에 직접 쓰면 Linux 파일 시스템 캐싱 메커니즘을 우회하고 장치로 직접 이동합니다. 당시 캐시에 있는 내용은 적어도 일시적으로 영향을 받지 않습니다. 파일 시스템이 여전히 마운트되어 있는 경우 dd로 디스크를 지운 후 운영 체제에서 일부 더티 페이지를 디스크에 다시 쓸 수도 있습니다.

그러나 Linux는 결국 파일 시스템이 손상되었음을 발견할 수 있으며 이로 인해 커널 패닉이 발생할 수 있습니다.

최상의 결과를 얻으려면 장치에서 직접 낙서를 시작하기 전에 파일 시스템을 마운트 해제해야 합니다.

관련 정보