편집: 데이터를 삭제하려는 경우가 아니면 테스트하기 위해 이것을 실행하지 마십시오.
내가 무엇을 얻고 있는지 이해하도록 도와줄 수 있는 사람이 있나요?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
Q: 왜 구체적으로 4096인가요
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
Q: 정확히 어떤 역할을 하나요?
경고: 위 코드는 지정된 일부/전체 장치/디스크의 데이터를 쓸모 없게 만듭니다!
답변1
dd if=/dev/zero of=/dev/sda bs=4096 count=4096 Q: 4096이 특별히 카운터에 사용되는 이유는 무엇입니까?
이렇게 하면 드라이브의 처음 16MiB가 0이 됩니다. 16MiB는 "디스크에서 시작된" 구조를 파괴하기에 충분하지만, 시간이 오래 걸리지 않을 정도로 작습니다.
dd if=/dev/zero of=/dev/sda bs=512 count=4096eek=$(expr blockdev --getsz /dev/sda - 4096)
Q: 정확히 어떤 역할을 하나요?
blockdev --getsz
"512바이트 섹터"에서 블록 장치의 크기를 가져옵니다. 따라서 이 명령은 드라이브의 마지막 2MiB를 0으로 설정하도록 설계된 것으로 보입니다.
불행하게도 이 명령은 구문이 깨졌습니다. 나는 명령의 원래 목적이 다음과 같을 것으로 예상했습니다.
dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)
그리고 사람들이 환경 간에 복사/붙여넣기하는 과정에서 백틱이 손실됩니다.
오래된 파티션 테이블, LVM 메타데이터, RAID 메타데이터 등은 드라이브를 재사용할 때 문제를 일으킬 수 있습니다. 드라이브의 시작과 끝 부분에 있는 제로화 섹션은 전체 드라이브를 제로화하는 것보다 훨씬 빠르면서도 이러한 문제를 방지하는 경우가 많습니다.
답변2
4096*4096=16MB
이렇게 하면 복구에 유용한 중요한 구조가 포함된 하드 드라이브의 첫 번째 부분과 마지막 부분이 지워집니다 . 512*4096=2MB
이 코드는 악의적으로 게시된 것 같습니다.
count
1
나는 명시적으로 다른 것을 지정하는 것이 유용한 상황을 본 적이 없습니다 . 나가지다MBR의 흔적을 남기지 않으려면 첫 번째 블록을 지우십시오.
답변3
이 명령은 sda 장치를 0으로 덮어씁니다. 첫 번째 명령은 처음 16MB(블록 크기 4096, 블록 수 4096)를 실행하고 두 번째 명령은 마지막 2MB를 0(블록 크기 512, 블록 수 4096)으로 덮어씁니다. . (기술적으로 이것은 삭제가 아니며 아래의 첫 번째 요점과 관련이 있습니다.)
(이것은 다른 답변에서 언급된 섹션이며 완전성을 위해 여기에 포함되었습니다.)
언급할 가치가 있는 또 다른 점은 블록 크기가 영향을 미치지만 이러한 효과는 일반적으로 대규모 배치 작업에서만 나타납니다. 명령을 실행하는 가장 효율적인(가장 빠른) 방법은 명령의 블록 크기가 장치의 액세스 크기와 일치하는 경우이고, 그렇지 않으면 시간이 낭비됩니다.
관심이 있다면 백만 개의 1 블록 청크로 구성된 파일과 백만 개의 1 블록 청크로 구성된 파일을 생성해 보고 차이점을 확인하십시오.
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s
real 0m2.447s
user 0m0.177s
sys 0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s
real 0m0.003s
user 0m0.001s
sys 0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr 8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr 8 15:51 test2
보시다시피 블록 크기는 효율성에 큰 영향을 미칩니다. 이것은 OP의 사이드바일 수 있지만 여전히 관련성이 있다고 생각합니다.
핵심요약: 온라인에서 찾은 코드나 신뢰하지 않는 사람이 제공한 코드는 실행하지 마세요. 그것은 당신의 하루를 망칠 것입니다.
답변4
다른 사람들은 이미 그들이 하는 일을 설명했으므로 생략하겠습니다.
dd
분리 bs
하고 논쟁하는 포인트 count
는 bs
글의 양을 조절하는 것한 번. 매우 큰 값을 지정하려면 bs
프로그램에서 매우 큰 버퍼를 사용해야 하며, 장치 블록 크기보다 작은 값을 지정하면 커널이 장치에 쓰기 위해 전체 블록을 구축해야 하기 때문에 속도가 느려집니다. 완전한 블록이 있을 때까지 버퍼 쓰기가 가능하며, 다른 경우에는 이미 디스크에 있는 내용을 읽어야 할 수도 있습니다. 두 명령이 서로 다른 값을 사용하기 때문에 bs
두 개의 다른 사이트에서 해당 명령을 찾을 수도 있다고 생각됩니다. 하드 드라이브는 bs=512
후자 에 해당하는 512바이트의 블록 크기를 가지고 있었지만 약(제 생각에는 6~8년 전)쯤에 블록 크기가 4096바이트인 디스크를 만들기 시작하여 bs=4096
최신 디스크에 대한 더 나은 대안을 제시했습니다.