來自 Arch Linux 維基:https://wiki.archlinux.org/index.php/USB_flash_installation_media
# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
[...] 做不是在拔出 USB 隨身碟之前錯過同步完成。
我想知道
- 它有什麼作用?
- 如果遺漏了會有什麼後果?
筆記
dd
與可選命令一起使用的命令status=progress
:
tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync
或用於pv
進步
tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync
答案1
dd
當寫入裝置時,不會繞過核心磁碟緩存,因此完成後,某些資料可能尚未寫入棒USB
中dd
。如果USB
此時拔掉棒子的插頭,USB
棒子上的內容就會不一致。因此,您的系統甚至可能無法從該USB
棒啟動。
Sync
將所有仍在快取中的資料刷新到裝置。
sync
您可以使用fdatasync
dd
的轉換選項來代替呼叫:
資料同步
完成之前物理寫入輸出文件數據
在你的情況下,命令是:
tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync
在退出之前的傳輸結束時有效地調用conv=fdatasync
系統調用(我用的來源檢查了這一點)。dd
fdatasync()
dd
dd
這確認了dd
不會繞過或刷新緩存,除非明確指示這樣做。
答案2
從sync(1)手冊頁:「sync - 將快取寫入同步到持久性儲存」。基本上sync
確保所有資料都從快取寫入棒。