가능한 경우 터미널을 통해 USB 플래시 드라이브를 삭제하여 데이터를 복구 할 수없는 방법을 알고 싶습니다.
가능한 경우 터미널을 통해 USB 플래시 드라이브를 삭제하여 데이터를 복구 할 수없는 방법을 알고 싶습니다.
답변:
TL / DR : 올바른 장치 이름을 가져오고 마운트되지 않았는지 확인하고 가능한 한 임의의 덮어 쓰기를 수행하십시오. 최근 배포본이 충분한 경우 플래시 하드웨어 용으로 설계된 지우기 명령을 수행 할 수 있습니다. 이 검사에서는 항상 파티션 이름 (/ dev / sd h1 ) 이 아닌 드라이브 (/ dev / sd h 등 )를 사용하십시오
# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#
이론적으로 0으로 덮어 쓰는 dd
것은 괜찮습니다. 그러나 플래시 드라이브의 내부 구성 방식으로 인해 단일 덮어 쓰기 패스를 사용하는 경우 여전히 남은 정보를 저장하는 실제 블록 뒤에 숨겨진 여러 계층의 데이터가있을 수 있습니다.
일반적으로 플래시 스토리지의 일부에 결함이 있으며 제조 중에 표시됩니다. 잘못 될 수있는 다른 비트도 있습니다 (변경 불가능, 설정 불가능 또는 해제 불가능).이 부품들은 수명 동안 결함으로 표시되어야합니다. 이 정보는 데이터와 동일한 칩의 예약 된 공간에 저장됩니다. 이것은 4GB 썸 드라이브가 2 ^ 32 바이트 용량을 표시하지 않는 몇 가지 이유 중 하나입니다.
플래시 스토리지는 내부적으로 더 큰 블록으로 구성되며 때로는 드라이브에서 작업하는 파일 시스템보다 훨씬 큽니다. 일반적인 파일 시스템 블록 크기는 4KB이며 한 번에 지울 수있는 플래시 세그먼트의 범위는 64KB에서 수 메가 바이트까지입니다. 이 큰 블록은 전체적으로 만 지울 수 있으며 모든 블록을 알려진 상태 (모두 1 또는 0)로 재설정합니다. 이후 데이터 쓰기는 비트를 변경할 수 있지만 (필요한 경우 기본 1을 0으로 변경하거나 기본 0을 1로 변경) 한 번만 가능 합니다. 비트 를 기본값으로 다시 변경하려면 모든 세그먼트를 다시 지워야합니다!
따라서 4KB 블록을 변경하려면 (파일 시스템이 파일 중간에 단일 문자를 변경하도록 요청 받음) 플래시 컨트롤러는 이전 데이터의 64KB를 모두 읽고 버퍼링하고 모든 데이터를 삭제해야합니다. 새로운 내용을 다시 쓰십시오. 이것은 매우 느릴 것입니다. 세그먼트를 지우는 것이 가장 느립니다. 또한 세그먼트는 제한된 시간 (수만)이 지워질 수 있으므로 단일 파일을 너무 많이 변경하면 드라이브가 빠르게 저하 될 수 있습니다.
그러나 이것은 그렇게 된 것이 아닙니다. 인텔리전트 플래시 컨트롤러는 단순히 다른 곳에 4KB의 새로운 데이터를 작성하고 이전 블록의 중간에있는이 4KB의 데이터로 읽기를 리디렉션하도록 메모합니다. 리디렉션에 대한이 정보를 저장할 수없는 공간이 더 필요합니다. 또한 데이터를 저장하기 위해 액세스 가능한 모든 세그먼트를 거치도록 노력합니다 . 이를 마모 레벨링 이라고 합니다 .
이것은 일반적으로 오래된 데이터가 여전히 드라이브 어딘가에 있음을 의미합니다 ! 액세스 가능한 모든 블록을 방금 지운 경우 모든 숨겨진 블록은 여전히 최신 버전의 데이터를 유지합니다. 데이터를 보호하려는 공격자가 액세스 할 수 있는지 여부는 다른 질문입니다.
최근 배포판이 충분하고 USB 드라이브가 플래시 드라이브임을 나타내도록 프로그래밍 된 blkdiscard
경우 TRIM
위에서 언급 한 세그먼트 지우기 인 기본 작업을 사용할 수 있습니다 . 또한 보이지 않는 숨겨진 데이터조차도 하드웨어에 의해 완전히 지워지도록하는 추가 플래그가 있습니다.
# blkdiscard -s /dev/myusbdevice
-s, --secure 보안 삭제를 수행합니다. 보안 삭제는 가비지 수집에 의해 생성 된 삭제 된 블록의 모든 복사본도 삭제해야한다는 점을 제외하고 일반 삭제와 동일합니다. 이를 위해서는 장치의 지원이 필요합니다.
위에서 설명한 것처럼 반드시 작동하지는 않습니다. Operation not supported
커널, 유틸리티 또는 USB 게이트웨이 칩 (플래시 컨트롤러가 USB를 통한 드라이브처럼 보일 수 있음) 을 얻으면 TRIM
명령 전달을 지원하지 않습니다 . 플래시 컨트롤러는 여전히 자체 세그먼트를 지울 수 있어야합니다. 드라이브 공급 업체에서 지원하는 경우 가장 안전한 방법입니다.
이전 데이터 중 일부를 어딘가에 머 무르도록 허용하는 또 다른 안전하지 않은 방법은 가능한 경우 임의의 값으로 여러 번 덮어 쓰는 것입니다.
왜 무작위입니까? USB 드라이브가 너무 지능적으로 만들어져 섹터를 지우고 싶다는 것을 감지하고이 섹터가 현재 비어 있음을 비트 맵으로 변경 한 후 나중에 삭제해야한다고 상상해보십시오. 이것은 0의 쓰기 속도를 높일 수 있다는 것을 의미하므로 펜 드라이브 가 더 효율적으로 나타납니다 . 당신의 드라이브가 그것을하고 있는지 여부는 말하기 어렵습니다.
가장 극단적으로, 드라이브는 처음부터 지운 양을 기억할 수 있으며, 저장하기 위해 필요한 모든 정보는 약 4 바이트의 정보이며, 삭제하려는 데이터에서 아무것도 지우지 않습니다. 모두 매우 빠르게 보일 수 있습니다.
임의의 예측할 수없는 임의의 값으로 데이터를 덮어 쓰는 경우 이러한 최적화가 불가능합니다. 따라서 드라이브는 데이터가 플래시 칩 내부에 저장되도록해야합니다. 그러나 이전에 사용한 섹터 중 일부에 여전히 오래된 데이터가 있음을 배제 할 수는 없지만 드라이브는 정상적으로 액세스 할 수 없으므로 아직 지우지 않는 것이 중요합니다. 실제 TRIM
명령 만 보장 할 수 있습니다.
임의의 값으로 덮어 쓰기를 자동화하려면 다음 shred
과 같이 를 사용하는 것이 좋습니다 .
# shred -vzn88 /dev/myusbdrive
사용 된 옵션 :
가능하면 모두 사용 blkdiscard
하고 shred
있는 경우, blkdiscard -s
드라이브에 의해 지원됩니다, 그것은 최적의 솔루션입니다하지만 할 다치게 할 수 없어 shred
펌웨어 실수를 배제하기 위해 사전.
아, 그리고 항상 지우려고하는 장치를 두 배로 확인하십시오! dmesg는 가장 최근에 삽입 된 장치를 확인하는 데 도움이되며 ls -al
장치 노드 번호 및 blkid
출력에 대해 지우려는 장치 이름을 확인하여 사용 가능한 파티션을 확인할 수 있습니다. 지우고 싶다.
계속 사용하려는 내장 드라이브에서이 명령을 사용하지 마십시오 blkdiscard
. 솔리드 스테이트 드라이브에서만 작동하지만 데이터 손실을 시도 할 가치는 없습니다!
기술이 발전함에 따라 데이터를 안전하게 지우는 다른 방법이있을 수 있습니다.
언급 된 다른 방법은 SECURITY ERASE
명령을 통해 hdparm
실행할 수있는 ATA 명령입니다 . 내 경험상 플래시 드라이브에서는 실제로 지원되지 않습니다. 엔터프라이즈 하드 드라이브 용으로 설계되었으며이 기능이 항상 저비용 스토리지 장치에 구현되는 것은 아닙니다.
TRIM
/의 DISCARD
작업은보다 최신 버전 인 SECURITY ERASE
명령, 그것도 싼 USB 드라이브에서 구현되는 훨씬 더 높은 기회가있다, 그래서 플래시 기능에 대한 응답으로 만들어졌습니다,하지만 여전히 유비쿼터스 아니다. USB 동글에서 SD / 마이크로 SD 카드를 지우고 blkdiscard
지원되지 않는다고보고하려는 경우 다른 동글 / 카드 리더기를 사용하거나 직접 SD / MMC 슬롯이있는 기기에서 시도 할 수 있습니다 .
blkdiscard
Debian Jessie에 있으며 Ubuntu의 최신 두 릴리스에만 있지만 Ubuntu LTS 14.04에는 없습니다. blkdiscard
패키지 util-linux
버전 2.23 에 추가되었습니다 .
blkdiscard
에서 hdparm
솔루션 과 비교 하는 방법을 알고 있습니다.
나는 이것이 실제로 귀하의 질문에 대한 답이 아니라는 것을 알고 있지만 가장 간단한 방법은 드라이브를 물리적으로 파괴하는 것입니다 (슬레지 해머로 반복해서 스매싱하는 것이 일반적으로 트릭이지만 산업 파쇄 또는 소각도 옵션입니다). 데이터를 복구 할 수 없도록하기 위해 보안에 대해 걱정이되는 경우 해당 데이터의 가치는 드라이브 비용보다 몇 배나 더 높으며 물리적 방법은 저렴하고 안정적입니다.
사용 가능한 거의 모든 보안 삭제 기능은 자기 미디어를 회전시키기 위해 설계되었으며 컴퓨터는 일반적으로 파일에 사용 된 블록의 물리적 위치 [1]를 결정하고 동일한 블록 위에 쓸 수 있습니다. SSD (Solid-State Storage Controller) 칩은 시스템에서 데이터의 물리적 위치를 추상화하고 데이터를 옮기는 것을 좋아합니다.
당신의 질문은 실제로 누가 당신의 데이터를 따라 가고 있는지에 달려 있습니다. 무작위 손실 또는 일시적인 도난이 우려되는 경우 일반적인 형식이 좋습니다. 상당한 자원을 가진 동기가 부여되고 기술적으로 유능한 사용자가 목표로 삼을 염려가 있다면 [2] 드라이브를 소각하고 새 드라이브에 10 달러를 소비하십시오.
예, 논리적 블록 매핑이 있습니다. 그러나 논리적 블록 A는 항상 물리적 블록 B에 매핑됩니다.
이 사람은 드라이브를 열고 카드에서 메모리 칩을 꺼내 컨트롤러를 우회하여 플래시 메모리를 직접 읽습니다.
내가 아는 가장 간단하고 빠른 방법은 전체 드라이브에 0을 쓰는 것입니다.
dd if=/dev/zero of=/dev/sdX
/dev/sdX
썸 드라이브의 장치 노드는 어디에 있습니까 ?
일부는 더 많은 반복과 다른 패턴으로 더 철저한 프로세스를 제안합니다. 이를 위해 특정 유틸리티를 사용할 수 있습니다. GNU coreutils 패키지에는 shred
이 목적을위한 명령이 포함되어 있습니다 . 많은 사람들이 또한 badblocks -w
e2fsprogs 패키지의 일부인을 사용 합니다. FreeBSD에서는 shred
유틸리티가 호출 gshred
되며 /usr/ports/sysutils/coreutils
또는 /usr/ports/sysutils/fileutils
포트 에서 사용 가능해야합니다 .
플래시 드라이브를 재사용하려는 경우 플래시 드라이브를 안전하게 지울 수 있습니다. http://linux.die.net/man/1/scrub 그렇지 않으면 녹입니다 ...