笔记

笔记

来自 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确保所有数据都从缓存写入棒。

相关内容