dd를 사용하여 드라이브를 1로 채우는 방법

dd를 사용하여 드라이브를 1로 채우는 방법

드라이브를 채우는 것이 /dev/urandom매우 느린 것 같아서 다음 내용으로 파일을 만들었습니다 FF.

dd if=/dev/zero ibs=1k count=1000 | tr "\000" "\377" >ff.bin

드라이브를 파일 복사본으로 채우고 싶지만 다음 명령은 한 번만 씁니다.

dd if=ff.bin of=/dev/sdb count=10000

파일 복사본으로 드라이브를 채우는 방법 또는 드라이브를 채우는 더 빠른 방법이 있습니까?1의?

답변1

다음을 수행하세요.

tr '\0' '\377' < /dev/zero > /dev/sdb

드라이브가 가득 차면 오류와 함께 중단됩니다.

여기서 사용하는 것은 의미가 없습니다 dd. 이를 사용하여 dd읽기 및 쓰기가 특정 크기를 갖도록 할 수 있습니다. 여기서는 그렇게 할 이유가 없습니다. tr4 또는 8kiB 읽기/쓰기를 수행하면 충분합니다.

답변2

더 빠른 대안을 위해 (의사 무작위가 괜찮은 경우) 또는 무작위 키를 사용하고 이를 0으로 만드는 방법(암호화의 경우 0)이 /dev/urandom있습니다 . AES 가속이 없어도 속도를 쉽게 앞지를 수 있습니다.shred -v -n 1cryptsetup/dev/urandom

tr그렇지 않으면 얼마나 빨리 할 수 ​​있는지 잘 모르겠습니다 dd if= | tr | dd of=.

파일을 패턴 소스로 사용하는 방법은 다음과 같습니다.

(while [ 1 ]; do cat file; done) | dd of=...

원격으로 효율적으로 사용하려면 파일 크기가 상당히 커야 합니다.

중요한 경우 명령 에 count=추가하세요 . 부분 읽기가 가능하며 이로 인해 부분 블록이 전체 블록으로 계산됩니다. 특히 더 큰 블록 크기(예 : )를 사용할 때 속도를 원한다면 이렇게 해야 합니다.iflag=fullblockddbs=1M

답변3

불량 블록 -v -w -s -b물리적 블록 크기-t 0xff /dev/장치

ff모든 것을 4K 기본 HDD에 쓰고 /dev/sdb다시 읽어 ff각 블록이 실제로 기록되었는지 확인하는 예:

$ sudo badblocks -v -w -s -b 4096 -t 0xff /dev/sdb

답변4

SSD 속도를 테스트하기 위해 명령줄에 제공된 블록 장치에 0, 1 또는 영숫자를 쓰는 작은 Perl 프로그램을 작성했습니다. 꼭두각시를 호출하지 않고 dd직접 쓰고 동기화합니다. 여기에 도움이 될 수 있습니다:

https://github.com/dtonhofer/wild_block_device_filler

그냥 다음과 같이 실행하세요.

wildly_fill_block_device.pl --dev=sdX1 --fillpat 1 --chunksize=1024P --sync

fdatasync()를 사용하는 동안 각 쓰기 후 데이터를 디스크에 동기화하는 동안 "1024개의 물리적 블록" 블록으로 /dev/sdX1(버퍼링되지 않음, Perl의 syswrite() 사용)에 0xFF를 씁니다. 내 SSD에서는 약 70MiB/s로 실행됩니다.

파티션이나 디스크 공격을 진행하기 전에 확실한지 묻는 메시지가 표시됩니다.

관련 정보