ddコマンドがディスクに完全に書き込むのを待つ


13

ddコマンドを使用して、ISOファイルから起動可能なUSBを作成しています。

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M

Enterキーを押すと、一時的に終了し、次のように表示されます。

915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s

フラッシュドライブが機能していることがわかるので、バックグラウンドで実行しているようなものです。最終的にはコピーが停止し、ドライブを正常に取り外すことができますが、問題は、ddコマンドがコピーの完了を待機しない理由です。バックグラウンドで実行されるのはなぜですか。そして、どうすればそれを待つことができますか?


4
試しましたsyncか?
チョロバ

1
@chorobaシステムが既にフラッシュドライブにデータを書き込んでいる場合、「同期」を実行するのは理にかなっていますか?
キールイヴレフ

わからない、sync待っているかもしれない。
チョロバ

2
ddまた、いくつかの同期オプションもありますconv=fsync。そうは言っても、私は/dev/sd*自分でドライブでそれを使う必要はなかった。あなたが文字通り/dev/sdx私の推測を使用した場合、あなたは今/dev(ramdisk)に役に立たない959MBファイルを持っていたでしょう
...-frostschutz

1
@frostschutzフラッシュドライブに/ sdcを使用した
Kir Ivlev

回答:


21

一般的な信念にもかかわらずdd、これはまったく普通のコマンドであり、catまたはよりも低レベルではありませんcp。コマンドは、ディスクキャッシュから読み取り、他のコマンドと同様にディスクバッファーに書き込みます。

データが物理メディアに完全に書き込まれるようにするには、を呼び出す必要がありますsync。このコマンドは、syncすべての出力バッファーをディスクにフラッシュします。ときにsyncコマンドが返す、データが完全に書き込まれています。

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M; sync

ほとんどの場合sync、ファイルシステムのアンマウントは同じ仕事をするため、を呼び出す必要はありません。umountコマンドが返されるとき、または「取り出し」をクリックした後に確認メッセージが表示されるとき、バッファはディスクに書き込まれています。ここでは、マウントされたファイルシステムを経由せずにディスクに直接書き込むため、バッファを明示的にフラッシュする必要があります。

の代わりにをdd使用できることに注意してくださいtee。これには2つの利点があります。タイプミスによりソースとデスティネーションを逆にするリスクが少なく、おそらく少し速いです。

<~/Desktop/ubuntu.iso sudo tee /dev/sdx >/dev/null; sync

1
「イジェクト」または「安全に削除」ボタン/アイコンはどうですか。「削除しても問題ありません」という通知を送信する前に、同期を呼び出しませんか?
-user68186

1
を使用する可能性がありますsudo tee /dev/sdx >/dev/null。そうしないと、データがコンソール出力に書き込まれるため、コピープロセスが依然として非常に遅くなります。
-Lekensteyn

1
@ user68186彼らはsyncコマンドを呼び出しませんが、内部では同じ仕事をします。
ジル 'SO-悪であるのをやめる'

5
この答えは間違っています。なしconv=fdatasyncではdd、OPが要求したとおり、データがディスクに書き込まれるまで、コマンドは終了を待機しません。さらに、syncコマンドは同期操作をスケジュールしますが、すぐに戻ります。データがディスクに書き込まれるまで、戻るのを待ちません。
vy32

1
@ vy32 ddは、キャッシュがフラッシュされるのを待つなどしないのは正しいことですconv=fdatasyncが、非古代のLinuxでは、sync待機しないことについて間違っています。coreutils sync(8)sync(2)syscallを作成していることがわかりますsync(2)マン・ページには、「バージョン1.3.20以前のLinuxは、I / Oが復帰する前に完了するのを待ちませんでした。」と言います そのためsync(8)、ディスクが書き込みを確認する(またはエラーがトリガーされる)まで戻りません。
アノン

13

これを試して:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx conv=fdatasync bs=1m

conv=fdatasync伝えdd必ずデータが物理デバイスに書き込まれますことを確認するために特別なオプションを使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.