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