2

目前我正在使用 Linux 4.0.6。在 coredump 激活后,我观察到生成的 corefiles 被创建为稀疏文件。例如,该ls命令显示我的核心文件的大小为 42 MB。但是,该du命令显示它只分配了 26.3 MB。

我对此观察的问题:

  1. 为什么 Linux 内核会为 coredump 创建一个稀疏文件?
  2. 它是如何工作的?它是否取决于放置核心转储的文件系统?
  3. 我可以配置系统/内核以防止核心转储作为稀疏文件吗?
4

1 回答 1

4

你应该想想核心转储文件是什么:仅仅是对进程内存的顺序写入。在现代操作系统上,内存不是一个简单的连续字节范围,而是可以由映射在不同地址的多个段组成。这解释了如果您尝试在映射段之外的地址读取或写入,则会收到段违规信号 (SIGSEGV)。

因此,在转储时,系统按升序写入段,然后查找每个新段的开头,从而构建一个稀疏文件。

现在为您的问题:

  1. 为什么 Linux 内核会为 coredump 创建一个稀疏文件?

解释就在上面。

  1. 它是如何工作的?它是否取决于放置核心转储的文件系统?

不是真的,除非底层文件系统不允许稀疏文件。

  1. 我可以配置系统/内核以防止核心转储作为稀疏文件吗?

恕我直言,您不能,而且您不想这样做。该ls命令为您提供程序使用的较高内存地址,而该du命令为您提供程序使用的总内存大小,因为未使用的地址没有映射并且根本不消耗内存。

于 2017-06-12T13:03:58.803 回答