하드 드라이브의 마지막 1MB 삭제


25

하드 드라이브의 마지막 1MB를 제로화하는 데 사용할 수있는 쉬운 명령이 있습니까?

드라이브의 시작을 위해 나는 것 dd if=/dev/zero of=/dev/sdx bs=1M count=1입니다. seekdd에 대한 옵션은 유망 해 보이지만 누군가 내가 얼마나 멀리 탐색해야하는지 쉽게 결정할 수 있습니까?

드라이브 끝에 일부 RAID 구성을 저장하는 하드웨어 RAID 어플라이언스가 있습니다. 드라이브를 구성되지 않은 것으로 보려면 RAID 어플라이언스가 필요하므로 드라이브를 완전히 지우는 데 시간을 소비하지 않고 RAID 구성을 제거하고 싶습니다. 2TB 드라이브가 12 개 있는데 모든 드라이브를 완전히 지우는 데 시간이 오래 걸립니다.

답변:


22

Linux에서 디스크 크기를 얻는 가장 간단한 방법은 다음과 blockdev --getsz같습니다.

sudo -s
dd bs=512 if=/dev/zero of=/dev/sdx count=2048 seek=$((`blockdev --getsz /dev/sdx` - 2048))

훌륭합니다. 크기를 쉽게 얻을 수있는 도구가 있어야한다는 것을 알고있었습니다.
Zoredache

1
솔루션이 마음에 sda들지만 캐리지 리턴을 복사하여 복사하여 붙여 넣으면 예제로 사용 하는 것이 끔찍합니다. sdx훨씬 더 적합합니다. 나는 예방책을 취하지 만, 그로 인해서 만 지금 내 디스크를 파괴하지 않았습니다.
emk2203

좋은 지적이야. 궁금한 점이 있습니다. 이러한 시나리오에 대해 어떤 예방 조치를 취하고 있습니까?
Hashim

1
붙여 넣기 전에 작은 따옴표를 사용합니다. 행에 캐리지 리턴이 포함 된 경우, 견적에 대한 누락 된 끝으로 인해 쉘 프롬프트에 포착됩니다. 모든 것이 정상이면 Ctrl-A를 사용하여 줄의 시작 부분으로 이동 한 다음 따옴표를 삭제 한 다음 반환하십시오. 그만한 가치가있는 보험에 대한 세 번의 키 입력.
emk2203

/ dev / sdx 대신 nvme-SAMSUNG_MZVLW1TXXXX-000XX_XXXXXXXXX와 같은 / dev / disk / by-id /의 링크를 확인하십시오. ls -l / dev / disk / by-id /는 링크 이름과 링크 된 / dev / sdX를 표시합니다.
rcpa0

6

모든 파티션의 크기는에서 사용할 수 있습니다 /proc/partitions. 다음 명령은 크기를 sdxkB 단위로 보여줍니다 .

awk '$4 == "sdx" {print $3}' </proc/partitions

그러므로:

dd if=/dev/zero of=/dev/sdx bs=1k count=1024 \
   seek=$(($(awk '$4 == "sdx" {print $3}' </proc/partitions) - 1024))

마지막에 -1024의 이유는 무엇입니까?
Hashim

1
@Hashim이 질문은 마지막 1MB를 지우는 방법을 묻습니다. 마지막 1MB는 ​​끝 전에 1024kB로 시작합니다.
Gilles 'SO- 악마 그만해'

3

드라이브의 끝에 도달하기 위해 탐색을 사용하면 다음과 같이 매우 잘 작동합니다.

seek = $ (( blockdev --getsz /dev/sda-2048))

그러나이 값을 사용할 때는 카운트 값이 올바른지 또는 전혀 사용하지 않는 것이 좋습니다. 내가 말하는 이유는 드라이브가 512 바이트 섹터 또는 4k 섹터를 가질 수 있고 4k 섹터가있는 드라이브와 함께이 솔루션을 사용하면 해당 카운트 값으로 드라이브 끝으로 가지 않을 것입니다. 마지막에 RAID 정보를 놓칠 수 있습니다 (이 문제가 발생했습니다).


어떻게해서 정확히 당신이 마주 쳤는지 공유 할 수 있습니까? 나는 장치의 펌웨어 또는 리눅스 커널에 의해보고 된 실제 블록 크기보다 작거나 큰 dd사용자 정의 bs값으로 사용될 때 섹터를 어떻게 다루는 지 오해하고 있는지 궁금합니다 .
sjas

2

를 사용하여 디스크의 섹터 수를 얻을 수 있습니다 hdparm -v /dev/sdx. number_of_sectors-2048 (512 바이트 섹터 가정)을 찾으십시오.


hdparm은 편리해 보이지만 섹터 크기를 어떻게 확인합니까?
Peter.O

1
/sys/block/sdx/queue/physical_block_size정보를 제공 할 수도 있지만 일부 최신 디스크는보고 된 섹터 크기로 빠르고 느슨하게 재생됩니다. 디스크의 레이블을 읽거나 제조업체 데이터 시트에서 찾아 보는 것이 좋습니다.

1
고마워. 방금 hdparm -I /dev/sda섹터 크기의 두 가지 "버전" 이 나열 Logical되어 Physical있습니다. 이것이 "빠르고 느슨"하다는 의미입니까? .... 그런 식으로 행동한다면 RAID 시스템
Peter.O

1
@red : 나는 지금 참조를 fid 할 수 없지만 4096 바이트 섹터를 가진 일부 드라이브는 시스템에 512 바이트임을보고하고 내부적으로 변환을 처리 할 수있는 곳을 읽었습니다.

1

다음을 dd통해 장치 크기를 사용 하고 가져올 수 있습니다 fdisk.

dd if=/dev/zero of=/dev/sda bs=1k \
   seek=$(( (`fdisk -l /dev/sda | grep 'Disk /' | cut -d' ' -f 5` -1024*1024)/1024  )) count=1024

반올림 오류를 피하기 위해 1m의 블록 크기를 사용하지 않습니다.

또는 작은 C 프로그램 (또는 스크립트)을 작성 하여 1mb의 음수 오프셋으로 lseek함수 SEEK_END를 호출 한 다음을 호출 할 수 write있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.