每次我将文件写入空的原始块设备时,例如
# dd if=image.iso of=/dev/sdb status=progress
Run Code Online (Sandbox Code Playgroud)
我从未使用过任何类型的sync
(即sync
; conv=fsync
; conv=fdatasync
; oflag=sync
; oflag=dsync
)。
我注意到,dd
没有永远退出,直到所有的写作完成。
我总是使用 Conky 的 I/O 工具和grep Dirty /proc/meminfo
. 此外,设备的校验和始终与写入它的文件的校验和相匹配。所以我总是 100% 确定整个文件已写入设备。
我已将文件写入 ext4 卷进行比较。例如使用:
$ dd if=/dev/urandom of=~/file bs=1M count=50 iflag=fullblock
Run Code Online (Sandbox Code Playgroud)
写入 ext4 卷时,dd
退出后在数据实际写入磁盘之前总是有大约 20 秒的延迟。
许多人提倡在sync
命令后使用dd
命令,或者在写入块设备时sync
在dd
命令中包含几个选项之一。例如这里和这里。但是,我不知道有人真正证明这是必要的。
此页面上的评论之一是:
sync
在这里毫无意义[即直接写入/dev/sdX
]。它只影响文件系统操作。
有五个人对这条评论投了赞成票,这与我的经验一致。
那么在写入块设备时,有没有dd
在所有写入完成之前退出的情况?这真的发生在任何人身上吗?
其他书写选项如何,例如cp
和cat …