blkdiscard가 전체 드라이브의 모든 데이터를 지우지 않는 이유는 무엇입니까?

blkdiscard가 전체 드라이브의 모든 데이터를 지우지 않는 이유는 무엇입니까?

ASM1153E 컨트롤러가 있는 mSATA-USB 인클로저에 기존 mSATA SSD(모델 이름: Plextor PX-128M6M)가 설치되어 있습니다.

나는 원해요(논리적으로 SSD 컨트롤러 수준에서)모든 데이터를 삭제하십시오.

그러나 다음과 같습니다.

  1. blkdiscard이 명령은 실제로 요청된 데이터 영역 전체를 삭제하지 않고 처음 2GiB에서 32KiB를 뺀 데이터 영역만 삭제합니다.

  2. hdparm --trim-sector-ranges-stdin잘 작동하는 것 같지만 SSD 컨트롤러가 문제입니다.(구체적으로 이 모델의 SSD, 다른 모델은 이렇게 동작하지 않는 것 같습니다)TRIM처음 8개 섹터(4KiB의 데이터) 가 명령에 의해 지워지지 않도록 보호하는 것으로 보입니다 .


나의 시도와 실험은 다음과 같다.

  1. 우분투 23.04에서 했습니다.

  2. Arch Wiki의 안내 덕분에 첫 번째 /sys/block/sdX/device/scsi_disk/*/provisioning_mode로 설정해야 한다는 것을 알게 되었습니다 . unmap그렇게 시작되었습니다 full. 그런 다음 시스템은 SCSI UNMAP명령(UASP를 통해 TRIM컨트롤러에 의해 명령으로 변환됨)을 기존 SSD로 보낼 수 있다고 생각합니다.

  3. 그런 다음 전체 드라이브에 대해 이 작업을 수행했습니다. ( blkdiscard -f -v /dev/sdXsdX실제 장치 이름) 그런 다음 모든 바이트(디스크 용량과 일치)가 삭제(삭제)되었다고 보고했지만 기본 GPT와 백업 GPT가 모두 디스크에 있음을 발견했습니다. space 의 시작/끝이 아직 제거되지 않았습니다.

  4. 2GiB 크기의 파티션을 생성하고 /dev/urandom.

  5. blkdiscard -f -v /dev/sdX전체 드라이브를 수행 hexdump한 결과 첫 번째 파티션의 마지막 1MiB + 32KiB가 지워지지 않은 것으로 나타났습니다(파티션은 섹터 크기가 512바이트인 LBA 2048에서 시작).

  6. blkdiscard -f -v /dev/sdX1전체 드라이브가 아닌 새 파티션에서 재실행한 결과, hexdump해당 파티션의 마지막 32KiB가 삭제되지 않은 것으로 표시됩니다.

  7. hdparm --trim-sector-ranges-stdin그런 다음 표준 입력에서 제공되는 전체 드라이브의 모든 섹터 목록을 사용해 보았습니다 . 이번에는 기본 GPT가 여전히 존재하지만 나머지 데이터는 모두 0으로 지워집니다.

  8. 처음 2048개 섹터를 데이터로 채웠습니다 /dev/urandom. 그런 다음 hdparm --trim-sector-ranges-stdin처음 8개 섹터(4KiB의 데이터)를 제외한 모든 섹터가 삭제된 것으로 나타납니다.


지워지지 않는 처음 8개 섹터의 동작이 mSATA-USB 칩이 아닌 SSD 컨트롤러에 의해 시행되는지 확인하려면:

  1. 그런 다음 USB 인클로저 없이 이 오래된 Plextor SSD를 내부 mSATA 드라이브로 설치했습니다. 그 후에도 처음 8개 섹터는 여전히 남아 있습니다 hdparm --trim-sector-ranges-stdin.

  2. 또 다른 최신 Kingston 브랜드 mSATA SSD가 있습니다. 로 테스트했지만 hdparm --trim-sector-ranges-stdinUSB 캡슐화되었거나 내부 드라이브로 직접 마운트되었는지 예외없이 모든 섹터가 0이었습니다.

관련 정보