web-dev-qa-db-ja.com

同期オプションが `dd`コマンドで使用されるのはなぜですか?

this ページの指示に従って、ページの最後に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. 
10
Chinmaya B

コマンドを誤読しています。それは:

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
20
muru

デフォルトでは、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が空白で埋めるオプションは、さまざまな状況で役立ちます-可変長行を持つファイルを固定長行を持つファイルに変換します。

3
Mark Plotnick

出力にsyncオプションを使用できます。これは、dd記号によってoflagコマンドに含まれます。

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

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

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

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

0