동기화 옵션이 왜`dd` 명령과 함께 사용됩니까?


13

페이지의 지침에 따라 페이지 끝에 dd명령과 sync옵션이 표시되었습니다. 명령은 다음과 같습니다.

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M sync

나는 그것이 무엇 dd이고 어떻게 작동하는지 알고 있지만 sync옵션에 대해 들어 보지 못했고 그와 함께 수동 페이지 항목은 다음과 같습니다.

sync   pad every input block with NULs to  ibs-size;  when  used  with
       block or unblock, pad with spaces rather than NULs

데이터 블록 NUL이 무엇 이며 왜 ibs-size, 왜 데이터 블록을 채우고 명령에 sync옵션을 사용 dd합니까? 왜 간단하고 쉽게 유지하지 않습니까?

sync적절한 위치와 값으로 명령 을 실행하려고 하면 다음 오류가 발생합니다.

dd: unrecognized operand ‘sync’
Try 'dd --help' for more information. 

답변:


21

명령을 잘못 읽고 있습니다. 이것의:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M 
sync

sync여기에 별도의 명령이 있습니다. 참조 man 1 sync:

NAME
       sync - flush file system buffers

SYNOPSIS
       sync [OPTION]

DESCRIPTION
       Force changed blocks to disk, update the super block.

캐싱을 생각하면 왜 사용되는지 분명히 알 수 있습니다.

에 관해서는 dd읽기 옵션은 값의 옵션 :conv

Each CONV symbol may be:
   ascii  from EBCDIC to ASCII
   ...
   sync   pad every input block with NULs  to  ibs-size;  when  used  with
          block or unblock, pad with spaces rather than NULs

사용되지 않은 경우 다음과 같이 사용됩니다.

dd ... conv=sync

3
좋은 답변, 매우 자세합니다. 당신은 심지어 dd ... conv=sync논증을 설명하는 것이 좋습니다 .
바이트 사령관

그들이 당신을 조롱하지 마십시오! ;-) 좋은 답변 : 당신은 내가 보지 못한 문제를 발견했습니다. > :-) +1
Fabby

1
또한 conv=sync옵션에 대한 설명에서 왜 이것이 사용되지 않는지 분명해 보입니다. 기껏해야 아무것도하지 않을 것입니다. 최악의 경우 복사하는 동안 이미지가 손상됩니다.
kasperd December

5
실제로 명령어는 명령 ( 시스템의 모든 것을 플러시 함 oflag=fsync) 대신 dd 옵션 (출력 dd가 sync기록한 플러시) 을 요구해야합니다.
psusi

이 답변은 잘못된 것입니다. DD로, sync모두에 인수 인 conviflag또는 oflag옵션.
Dan Loewenherz

3

기본적으로 dd는 한 번에 한 블록 씩 데이터를 읽습니다. 파일의 끝이나 소스 장치의 동작으로 인해 지정된 사용자보다 짧은 블록을 읽을 수 있습니다. 이것을 부분 레코드 라고합니다 . 그런 다음 읽은 양과 같은 크기의 블록을 작성합니다.

Dd는 지정된 카운트에 도달하거나 입력시 eof 또는 입력 또는 출력에 오류가 표시 될 때까지이를 반복합니다. 완료되면 dd는 읽고 쓴 전체 및 부분 레코드 수를보고합니다.

바이트 스트림으로 간주되기 때문에이 동작은 파일 시스템 또는 TCP 네트워크 연결을 통해 일반 파일을 복사하는 데 좋습니다. 그러나 원시 DVD 및 자기 테이프와 같은 다른 파일 시스템 객체에는 특정 범위 내에 있고 512 또는 2048 바이트와 같은 일정 크기의 쓰기 크기가 필요한 쓰기 크기가 필요합니다. 예를 들어, 63 512 바이트 섹터의 255 트랙 인 디스크 이미지가 있고 1024 바이트의 블록 크기가 필요한 테이프에 쓰려면 다음과 같은 작업을 수행해야합니다.

dd if=disk.img of=/dev/rmt0 bs=1k conv=sync

dd가 끝에 512 바이트 블록을 쓰려고하지 않도록합니다. 끝에있는 더 짧은 블록은 0 또는 공백으로 채워집니다. 0으로 채워 넣는 것이 안전하고 일반적인 선택입니다. 공백으로 채울 dd 옵션은 가변 길이 행이있는 파일을 고정 길이 행이있는 파일로 변환하는 다른 상황에서 유용합니다.


0

나는 dd가 아닌 리눅스 시스템이 버퍼를 캐시한다는 것을 발견했다. 따라서 dd 명령이 완료되면 다음과 같이 sync를 실행합니다.

sudo dd if=my.downloaded.iso of=/dev/sd(?) bs=1M && sync

버퍼 플러시를 유발하기 위해 내부 dd 옵션을 사용하지 않았습니다. 그러나 일반적으로 USB 버전의 배포판을 만들 때 컴퓨터에서 유일한 버전이므로 게시 된 명령이 해를 끼치는 것에 대한 자격이 없습니다. &&로 동기화를 실행하기 때문에 sudo 권한으로 동기화가 수행되며 생성 한 USB가 완료되었다고 확신합니다.


0

쉼표에 sync포함 된 출력 옵션을 기호로 사용할 수 있습니다 .ddoflag

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.