如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?

Posted

技术标签:

【中文标题】如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?【英文标题】:Can mmap() guarantee the data integrity on crash, if I store data chunks in 1/n of Linux PAGE_SIZE?or disk block size? 【发布时间】:2011-01-12 03:01:31 【问题描述】:

我需要设计一个数据持久化和快速重载的系统,用mmap()实现。但是使用mmap() 进行持久化的系统通常会在系统崩溃时丢失数据完整性,例如单节点 MongoDB。

我有一个非常扁平的数据结构来存储:数据被分成 1024 个大小的块,块之间没有依赖关系。在服务器正常运行期间,块会被随机大量访问和更新。

【问题讨论】:

【参考方案1】:

您可以使用msync 将映射的数据刷新到磁盘。

见http://linux.die.net/man/2/msync。

【讨论】:

已经多次使用mmap,但从来没有存在持久性问题,所以我没有涉足msync。学习已经发生。谢谢。

以上是关于如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?的主要内容,如果未能解决你的问题,请参考以下文章

linux 磁盘分区

Linux下驱动开发_块设备驱动开发(内存模拟存储)

深入理解LINUX文件系统

掌握linux文件系统inode与bloke &日志管理

Linux下驱动开发_块设备驱动开发(内存模拟存储)

在执行下一个代码块之前等待多个 RxJS 调用