目前我正在使用 Linux 4.0.6。激活核心转储后,我观察到生成的核心文件被创建为稀疏文件。
例如,ls
命令显示我的核心文件大小为 42 MB。但是,du
命令显示它仅分配了 26.3 MB。
我对这一观察结果的疑问:
- 为什么 Linux 内核为核心转储创建稀疏文件?
- 它是如何运作的?它取决于放置核心转储的文件系统吗?
- 我可以配置系统/内核以防止核心转储成为稀疏文件吗?
最佳答案
您应该想一下 coredump 文件是什么:仅仅是进程内存的顺序写入。在现代操作系统上,内存不是简单的连续字节范围,而是可以由映射在不同地址的多个段组成。这就解释了,如果您尝试在映射段之外的地址读取或写入,您会收到段违规信号 (SIGSEGV)。
因此,在转储时,系统按升序写入段,并lseek到每个新段的开头,从而构建一个稀疏文件。
现在回答您的问题:
- Why does Linux kernel create a sparse file for the coredump?
解释就在上面。
- How does it work? Does it depend on the filesystem where the coredump is placed?
并非如此,除非底层文件系统不允许稀疏文件。
- Can I configure the system/ kernel to prevent the coredump as a sparse file?
恕我直言,你不能,而且你也不想。 ls
命令提供程序使用的较高内存地址,而 du
命令提供程序使用的总内存大小,因为未映射未使用的地址并且根本不消耗内存。
关于linux - Linux 内核为什么以及如何为 coredump 创建稀疏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499291/