%20-%20%EB%94%94%EC%8A%A4%ED%81%AC%EC%9D%98%20%EC%96%B4%EB%8A%90%20%EC%98%81%EC%97%AD%EC%9D%84%20%EB%8D%AE%EC%96%B4%EC%93%B0%EB%82%98%EC%9A%94%3F.png)
실수로 2Tb 외장 HDD에서 mkfs.ntfs -Q /dev/sda
(대신 ) 실행했습니다 . /dev/sda6
운 좋게도 처음에는 1G의 사용되지 않은 파티션이 있고 끝에도 충분한 공간이 있습니다.
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2099199 2097152 1G b W95 FAT32
/dev/sda2 * 2099200 3739256831 3737157632 1.8T 7 HPFS/NTFS/exFAT
/dev/sda4 3739256832 3907029166 167772335 80G 5 Extended
/dev/sda5 3739258880 3751841791 12582912 6G 83 Linux
/dev/sda6 3751843840 3907029166 155185327 74G 7 HPFS/NTFS/exFAT
는 /dev/sda2
안전하다? 아니면 mkfs.ntfs가 대상 공간 중앙에 메타데이터를 기록합니까?어느경고 없이 파일이 손상될 수 있나요?
답변1
는
/dev/sda2
안전하다?
일반적으로: 아니요. 내가 그렇게 생각하는 이유를 알아 보려면 계속 읽으십시오.
예시 절차
내 2TB HDD의 크기는 2000398934016바이트입니다. 목표는 mkfs.ntfs -Q
이 크기의 장치에 어떤 영향을 미칠지 조사하는 것입니다.
다음과 같은 정확한 크기의 스파스 파일을 만듭니다.
$ # the filesystem must support sparse files
$ truncate -s 2000398934016 fakesda
ls -ls
전체 파일이 희박한지 확인합니다.
$ ls -ls fakesda
0 -rw-r--r-- 1 kamil kamil 2000398934016 Oct 31 18:48 fakesda
(첫 번째가 0
이것을 말해줍니다). 하지만 또한sparsemap
(나중에 유용할 것임)은 다음을 수행합니다.
$ sparsemap fakesda
HOLE 2000398934016
할 수는 있지만 mkfs.ntfs -FQ fakesda
섹터 mkfs.ntfs
크기가 512바이트라고 가정합니다. 이 예에서는 내 디스크가 논리 섹터 크기로 4096바이트를 사용한다고 가정합니다. 그런 경우에는 (참조 ) --sector-size
옵션을 사용할 수 있다고 생각합니다 . 그러나 단독이 내 디스크에 어떤 영향을 미치는지 확인하기 위해 다음에서 루프 장치를 만들기로 결정했습니다 .mkfs.ntfs
man 8 mkfs.ntfs
mkfs.ntfs -Q
fakesda
$ sudo losetup -f --show --sector-size 4096 fakesda
/dev/loop0
sparsemap
fakesda
아직 완전히 희박하다고 말해줍니다 . mkfs.ntfs -Q
루프 장치에서 실행합니다 .
$ sudo mkfs.ntfs -Q /dev/loop0
sync
다음과 같은 경우에 루프 장치를 파괴합니다 .
$ sudo losetup -d /dev/loop0
$ sync
이제 파일이 얼마나 희박합니까?
$ sparsemap fakesda
DATA 12288
HOLE 4096
DATA 110592
HOLE 250049753088
DATA 61460480
HOLE 750088122368
DATA 67125248
HOLE 1000132341760
DATA 4096
sparsemap -h
이것을 해석하는 방법을 배우려면 참조하십시오.
파일은 데이터와 홀의 시퀀스로 해석됩니다. 예를 들어 8192바이트 데이터, 4096바이트 홀, 8192바이트 데이터가 있는 파일이 있는 경우 sparsemap의 출력은 다음과 같습니다.
DATA 8192 HOLE 4096 DATA 8192
내 결과에서 각 DATA
줄은 의 영향을 받은 조각을 나타냅니다 mkfs.ntfs
.나는 볼 수 있다mkfs.ntfs
하다대상 공간 중앙에 무언가를 쓰세요.
마지막으로 rm fakesda
.
귀하의 구체적인 사례
디스크의 정확한 크기(및 섹터 크기)와 mkfs.ntfs
사용한 것과 동일한 것을 사용하여 자체 테스트를 수행할 수 있습니다. 이렇게 하면 영향을 받은 조각을 정확하게 식별하고 조각이 속한 파티션(이전 파일 시스템)을 알 수 있습니다. 이전 파일 시스템의 특정 파일이나 메타데이터에 조각을 매핑하는 것은 쉽지 않을 수 있으며 이는 다른 문제입니다.
귀하가 게시한 파티션 테이블에 따르면 귀하의 경우 섹터 크기는 512바이트입니다. mkfs.ntfs -FQ fakesda
놀지 않고도 사용할 수 있을 것 같아요 losetup
. 내 예에서는 의도적으로 다른 섹터 크기를 사용하므로 대답이 더 일반적입니다.
의심
가 작동하는 파일의 일부에 0을 쓰고 mkfs.ntfs -Q
파일을 희소화하여 이를 달성할 만큼 똑똑하다면 내 프로시저는 이를 감지하지 못합니다. 솔직히 도구가 그렇게 하는지는 모르겠습니다. 그렇다면 내 절차보다 더 많은 것이 필요합니다.모두영향을 받은 조각.
이러한 절차의 불완전성은 결론을 바꾸지 않습니다. 즉, 파일 시스템이 /dev/sda2
부분적으로 덮어쓰여졌을 수 있습니다.
나는 실제로 0을 쓰지 mkfs.ntfs
않고 메모합니다.-Q
없이파일을 스파스화하는 것; 실제로는 전체 파일을 역분산합니다. 2TB보다 훨씬 작은 파일로 테스트했지만 여전히 그렇습니다. 나는 단지의심하다 mkfs.ntfs -Q
유사하며 파일을 스파스화하지 않습니다.
노트
내 테스트베드: Debian GNU/Linux 10.
내
mkfs.ntfs -V
지문mkntfs v2017.3.23AR.3 (libntfs-3g)
.나는 설치
sparsemap
했다sudo apt-get install python3-pip sudo pip3 install sparseutils