Answers:
使用此代替:
sudo dd if=install57.fs of=/dev/sdc conv=fsync
这将fsync()
在每个write()
系统调用之后调用。这强制dd
不缓存任何内容。请参见fsync(man 2 fsync
)手册页的以下部分:
fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache
pages for) the file referred to by the file descriptor fd to the disk device (or other
permanent storage device) where that file resides. The call blocks until the device reports
that the transfer has completed. It also flushes metadata information associated with the
file (see stat(2)).
这是内核的默认行为。Linux内核按以下方式管理写入和读取缓存:write()
发出syscall时,数据会快速写入缓存,并将写入完成状态发送到进程。当需要缓冲区或总线上有空闲时间时,数据将从高速缓存写入硬盘。
conv=fsync
在写入dd
不缓存任何内容的块设备时这是默认设置吗?寻找一个很好的答案是:unix.stackexchange.com/questions/312687/...
内核将数据保留在内存中,以避免(相对较慢)进行磁盘读写。这样可以提高性能,但是如果计算机崩溃,则可能会导致数据丢失或文件系统损坏。sync确保将内存中的所有内容都写入磁盘。
注意:(unmount
或弹出)sync
在正常的文件系统使用中自动调用“隐藏”此功能。
/dev/sdc
是实际设备并且没有在写文件/dev/sdc
吗?做ls --color /dev
-/dev/sdc
如果是设备,则应为黄色。