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는 결국 파일 시스템이 손상되어 커널 패닉이 발생할 수 있음을 발견할 수 있습니다.
최상의 결과를 얻으려면 장치에 직접 쓰기를 시작하기 전에 파일 시스템을 마운트 해제해야 합니다.