筆記

筆記

來自 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當寫入裝置時,不會繞過核心磁碟緩存,因此完成後,某些資料可能尚未寫入棒USBdd。如果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系統調用(我用的來源檢查了這一點)。ddfdatasync()dddd

這確認了dd不會繞過或刷新緩存,除非明確指示這樣做。

答案2

從sync(1)手冊頁:「sync - 將快取寫入同步到持久性儲存」。基本上sync確保所有資料都從快取寫入棒。

相關內容