dd 명령에서 "bs", "count" 및 "seek"의 차이점은 무엇입니까?

dd 명령에서 "bs", "count" 및 "seek"의 차이점은 무엇입니까?

나는 그것을 사용하는 방법을 설명하는 많은 가이드와 포럼 게시물을 읽었 dd지만 내가 주목한 한 가지는 사람들이 항상 bs=, count=및 스위치에 대해 seek=다른 값을 사용한다는 것입니다.

누군가 이러한 스위치의 기능이 정확히 무엇인지 설명하고( 페이지가 그다지 자세하지 않음) 또는 에서 파일 생성 , 파티션 및 외부 드라이브 덮어쓰기 man등 다양한 작업에 가장 적합한 설정이 무엇인지 설명해 주실 수 있습니까?/dev/random/dev/zero

답변1

나는 이것을 매뉴얼 페이지보다 더 잘 설명하는 방법을 정말로 모릅니다.

bs=블록 크기를 설정합니다(예: bs=1M1MiB 블록 크기).

count=이 블록 수만 복사합니다(기본값은 dd가 영원히 계속되거나 입력이 소진될 때까지 계속되는 것입니다). 이상적으로 블록은 bs=특정 크기이지만 불완전한 읽기가 발생할 수 있으므로 count=특정 양의 데이터를 복사하기 위해 ()를 사용하는 경우 count*bs해당 블록도 제공해야 합니다 iflag=fullblock.

seek=출력 장치의 맨 처음에 기록하는 대신 출력에서 ​​이 블록 수를 찾으십시오.

예를 들어 이렇게 하면 1MiB의 콘텐츠가 y\n8MiB의 출력 파일에 복사됩니다. 따라서 총 파일 크기는 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개 미만이면 상자 옆에 있는 꽃병을 가져와서 합산합니다.) dd5개만 말하고 count어딘가에 쓰면, 그는 자신이 본 처음 5개의 블록을 복사하여 원하는 곳에 쓸 것입니다.

   seek=N skip N obs-sized blocks at start of output

이 사람은 일반적으로 로드를 떨어뜨릴 수 있는 첫 번째 위치(일반적으로 디스크의 시작 부분)를 찾아 끝까지 계속 채웁니다. 글쎄, 이것은 dd홀에서 시작하기보다는 더 먼 곳, 즉 더 안쪽 방에서 시작하라는 뜻입니다. 단지 시작 블록을 "건너뛰는" 것뿐입니다.

이제 수행 중인 작업에 따라 소스와 대상, 그리고 이를 읽고 쓰는 형식에 따라 다양한 조합이 필요합니다. 개별적으로 검색해 보시길 권해드립니다.

답변3

예를 들어 지금까지 여기서 언급되지 않은 중요한 사항 중 하나는 dd bs=16G사용 가능한 RAM이 16GB 이상이어야 한다는 요구 사항입니다. 그러나 그렇지 않은 경우 더 작은 청크 크기 bs(예: 2G)를 사용한 다음 counts1보다 큰 숫자로 설정하여 여러 라운드를 수행할 수 있습니다. (이 경우 8[입력에 따라] [최대] 16GB의 출력이 달성됩니다.)

그래서:

 bs x count = data size
2GB x   8   = 16GB

관련 정보