syncオプションが `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

5
本当に命令は、DDオプションのために呼び出す必要がありますoflag=fsync代わりに(書かれた出力ddをフラッシュ)syncフラッシュコマンド(すべてをシステム上で。
psusi

この答えは誤解を招くものです。DDでは、sync両方の引数であるconviflagか、oflagオプション。
Dan Loewenherz、2016

3

デフォルトでは、ddは一度に1ブロックずつデータを読み込みます。ファイルの最後またはソースデバイスの動作により、ユーザーが指定したよりも短いブロックを読み込む可能性があります。これは部分レコードと呼ばれます。次に、読み取った量と同じサイズのブロックを書き出します。

Ddは、指定されたカウントに達するか、入力でeofが見つかるか、入力または出力でエラーが見つかるまで、これを繰り返します。終了すると、ddは読み取りと書き込みを行った完全なレコードと部分的なレコードの数を報告します。

この動作は、バイトストリームと見なされるため、ファイルシステム内またはTCPネットワーク接続を介して通常のファイルをコピーする場合には問題ありません。ただし、未加工のDVDや磁気テープなどの他のファイルシステムオブジェクトでは、特定の範囲内で、かつ、ある量(512または2048バイトなど)の倍数である書き込みサイズが必要です。たとえば、ディスクサイズが63の512バイトセクターで255トラックのディスクイメージがあり、1024バイトのブロックサイズが必要なテープに書き込む場合は、次のようにする必要があります。

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

ddが最後に512バイトのブロックを書き出そうとしないことを確認するため。末尾の短いブロックには、ゼロまたは空白が埋め込まれます。ゼロによるパディングは安全で一般的な選択です。ddにブランクを埋め込むオプションは、さまざまな状況で役立ちます-可変長行を持つファイルを固定長行を持つファイルに変換します。


0

私は、ddではなくLinuxシステムがバッファをキャッシュすることを発見しました。したがって、ddコマンドが完了したら、次のように同期を実行します

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

バッファフラッシュを引き起こすために内部ddオプションを使用していません。ただし、通常、ディストリビューションのUSBバージョンを作成しているときは、コンピューター上で1人しかいないので、投稿したコマンドが害を及ぼすことに何の心配もありません。&&として同期を実行しているので、同期はsudo権限で行われ、作成したUSBが完全であると確信しています。


0

コマンドにsyncは、ddcomandに含まれている出力のオプションをoflag記号で使用できます。

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.