标签: linux filesystems
让我们说,我的程序调用write()将一些数据写入用ext3格式化的磁盘分区。磁盘恰好会产生一个坏扇区,数据将被刷新。
将使用errno返回write()吗?或OS将移动到另一个好的扇区,write()返回OK(也标记为不再使用的坏扇区)?
答案 0 :(得分:0)
假设您正在使用刚刚打开()ed的文件描述符,您将通过内核vfs层缓冲对磁盘的访问。当你写()时,你的写入将被放入内核中的缓冲区而不是实际写入磁盘。所以write()将正常成功。
如果您想强制要写入更改,则必须sync()。如果磁盘上有错误,sync()也会成功。错误显示的位置是dmesg。
请注意,如果它是可恢复的错误,则可以静默避免,并为该磁盘更新坏块列表。