나는 그것을 사용하는 방법을 설명하는 많은 가이드와 포럼 게시물을 읽었 dd
지만 내가 주목한 한 가지는 사람들이 항상 bs=
, count=
및 스위치에 대해 seek=
다른 값을 사용한다는 것입니다.
누군가 이러한 스위치의 기능이 정확히 무엇인지 설명하고( 페이지가 그다지 자세하지 않음) 또는 에서 파일 생성 , 파티션 및 외부 드라이브 덮어쓰기 man
등 다양한 작업에 가장 적합한 설정이 무엇인지 설명해 주실 수 있습니까?/dev/random
/dev/zero
답변1
나는 이것을 매뉴얼 페이지보다 더 잘 설명하는 방법을 정말로 모릅니다.
bs=
블록 크기를 설정합니다(예: bs=1M
1MiB 블록 크기).
count=
이 블록 수만 복사합니다(기본값은 dd가 영원히 계속되거나 입력이 소진될 때까지 계속되는 것입니다). 이상적으로 블록은 bs=
특정 크기이지만 불완전한 읽기가 발생할 수 있으므로 count=
특정 양의 데이터를 복사하기 위해 ()를 사용하는 경우 count*bs
해당 블록도 제공해야 합니다 iflag=fullblock
.
seek=
출력 장치의 맨 처음에 기록하는 대신 출력에서 이 블록 수를 찾으십시오.
예를 들어 이렇게 하면 1MiB의 콘텐츠가 y\n
8MiB의 출력 파일에 복사됩니다. 따라서 총 파일 크기는 9MiB가 됩니다.
$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun 3 21:02 outputfile
$ hexdump -C outputfile
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00800000 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a |y.y.y.y.y.y.y.y.|
*
00900000
/dev/random
파티션을 언급하고 덮어썼기 때문에 ... 너무 느리기 /dev/random
때문에 시간이 오래 걸릴 것입니다. /dev/urandom
직접 사용할 수 있으며 shred -v -n 1
빠르고 일반적으로 어디에서나 작동합니다.
답변2
dd
글쎄요, 매뉴얼 페이지가 상세하지 않다고 말씀하셨기 때문에 이동하는 사람(그의 이름은 ) 에 대한 이해하기 쉬운 비유를 사용하여 그 의미를 설명하겠습니다 .
bs=BYTES
read and write up to BYTES bytes at a time
dd
물건(상자, 꽃병, 침대, 쌀 등)을 집어 필요한 곳으로 옮긴 후 내려놓으세요. 그는 상자의 내용물을 내려놓을 때까지 다른 어떤 것도 선택하지 않을 것입니다. 즉, 또 다른 항목 더미가 들어 있는 또 다른 상자를 의미합니다.
이제 여행당 상자에 얼마나 많은 물건을 넣어야 하는지 그에게 정확히 알려줘야 할 때 해야 할 일은 다음과 같습니다 bs
. 그가 읽고 쓸 데이터의 양을 설정합니다. 이는 모든 유용하고 일반적인 명령에서 거의 필수입니다.
count=N
copy only N input blocks
이것은 그가 이동할 총 상자 수를 결정합니다. 이 경우 상자는 다음과 같습니다.디스크의 블록. 상자 5개를 옮겨달라고 하면 상자가 5개 이상이더라도 상자 5개만 옮기게 됩니다. (상자가 5개 미만이면 상자 옆에 있는 꽃병을 가져와서 합산합니다.) dd
5개만 말하고 count
어딘가에 쓰면, 그는 자신이 본 처음 5개의 블록을 복사하여 원하는 곳에 쓸 것입니다.
seek=N skip N obs-sized blocks at start of output
이 사람은 일반적으로 로드를 떨어뜨릴 수 있는 첫 번째 위치(일반적으로 디스크의 시작 부분)를 찾아 끝까지 계속 채웁니다. 글쎄, 이것은 dd
홀에서 시작하기보다는 더 먼 곳, 즉 더 안쪽 방에서 시작하라는 뜻입니다. 단지 시작 블록을 "건너뛰는" 것뿐입니다.
이제 수행 중인 작업에 따라 소스와 대상, 그리고 이를 읽고 쓰는 형식에 따라 다양한 조합이 필요합니다. 개별적으로 검색해 보시길 권해드립니다.
답변3
예를 들어 지금까지 여기서 언급되지 않은 중요한 사항 중 하나는 dd bs=16G
사용 가능한 RAM이 16GB 이상이어야 한다는 요구 사항입니다. 그러나 그렇지 않은 경우 더 작은 청크 크기 bs
(예: 2G
)를 사용한 다음 counts
1보다 큰 숫자로 설정하여 여러 라운드를 수행할 수 있습니다. (이 경우 8
[입력에 따라] [최대] 16GB의 출력이 달성됩니다.)
그래서:
bs x count = data size
2GB x 8 = 16GB