进程挂掉后,操作系统会如何处理没有 flush 的文件?

如果一个进程 write 文件了,但是在 flush 之前,进程就挂掉了。

那么操作系统会怎么处理 write 的文件呢?自动 flush?还是丢弃 write 的文件?

这个疑问来自看《高性能Mysql 第四版》,里面提到的

红圈圈内的

为什么进程崩溃,不会丢失事务?这里只是调用了 c 语言的 write 但是没有 flush

关于这个问题,我先问了 chatGPT,它会只是 write 但是「进程挂了 && 没有 flush」 就丢数据

但是我又看到一个文章: 7.2 进程写文件时,进程发生了崩溃,已写入的数据会丢失吗?

因为进程在执行 write (使用缓冲 IO)系统调用的时候,实际上是将文件数据写到了内核的 page cache,它是文件系统中用于缓存文件数据的缓冲,所以即使进程崩溃了,文件数据还是保留在内核的 page cache,我们读数据的时候,也是从内核的 page cache 读取,因此还是依然读的进程崩溃前写入的数据。

所以我懵了

这个问题貌似和写入模式有关系,但是 mysql 不可能使用「直写模式」,都是带 buffer 写的吧


回答:

文档好像是说会丢:
innodb_flush_log_at_trx_commit

With a setting of 0, logs are written and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.

With a setting of 2, logs are written after each transaction commit and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.

以上是 进程挂掉后,操作系统会如何处理没有 flush 的文件? 的全部内容, 来源链接: utcz.com/p/945266.html

回到顶部