每次往 u 盘里存完文件后是否有必要用 sync 命令将内存写入?

刚才用 dd 命令制作了 u 盘的系统安装盘,命令提示符重新出现后关闭了电脑,然后插入电脑时发现没有图形界面也无法安装,用同一个 u 盘重新再用 dd 制作后执行了 sync 命令,就发现可以正常安装系统了。
所以我担心每次往 u 盘里拷贝东西会不会总是有所遗漏,而有必要每次都使用 sync 命令?

如果 U 盘上有文件系统,并且在挂载状态将数据以文件的形式写入其中,那么在 umount 时系统会自动 sync.

如果使用 dd 或者 fdisk/cfdisk/parted 之类的命令,无视文件系统地写入裸数据,那么需要做一下 sync 操作。但哪怕在这种情况下,除非立刻直接将 U 盘拔出,否则正常关机时系统也会自动做一下 sync 操作。

一般是否有脏数据未落盘,由下面一些因素(可能不全)决定 :
1、块设备的 write_cache (/sys/block/sdX/queue/write_cache)
2、存储子系统的行为

对于 U 盘来说,插入系统后,一般 cache 是"write through"的
而默认情况下 Linux 都会采用回写策略,同时 U 盘写入速度一般较慢,所以短时间内会有大量数据在内存中,并快速返回命令行。

为避免这个情况出现,可采用 dd conv=fsync , 会自动在最后一次进行 sync 操作。相关或类似的参数还有 oflag=direct,sync,nocache 等, 行为跟具体的 dd 版本有关,具体请研究源码或文档吧。

https://zh.opensuse.org/SDB:制作安装_U_盘