Linux 增加dmesg 输出log的大小

【前因】目前Linux 3.4.0 默认Dmesg的buffer是128K,超出时前面的log就看不到了; 


  [解决方法]

  方法1:1.1 使用 make menuconfig; 

                         ( make menuconfig -> General Setup -> Kernel log buffer size).

                  1.2  make bootimage or under kernel 文件夹下 执行make

   方法2: 2.1 修改 kernel/printk.c 这个参数 __LOG_BUF_LEN
                         可以看到 __LOG_BUF_LEN equals (1 << CONFIG_LOG_BUF_SHIFT);

                          所以根本上是要修改: CONFIG_LOG_BUF_SHIFT

                    2.2 重新编译


【说明及参考文档】

           其实dmesg 是读取 /proc/kmsg文件节点,所以也可以 cat /proc/kmsg 来模拟实时串口样子的打印方式;

           参考自下面的网址,这里还有其他更详细的帮助,比如使用参数,只打印一次如何实现等等。
           http://elinux.org/Debugging_by_printing
<think>好的,用户的问题是关于如何调整Linux系统中dmesg内核环形缓冲区的大小。我需要根据提供的引用信息来构建一个准确的回答。首先,回顾一下引用内容: 引用[1]和[2]介绍了dmesg命令的基本用途,它用于查看内核环形缓冲区的内容,这个缓冲区存储了启动信息和内核消息。引用[3]提到dmesg直接从内核环形缓冲区读取,而该缓冲区的大小可能有限,且日志可能被覆盖。引用[4]讨论了环形缓冲区的实现,涉及到读/写指针和缓冲区大小的控制,这提示调整缓冲区大小可能需要修改内核参数或使用特定的命令。 用户的需求是增加这个环形缓冲区的大小。根据我的知识,调整环形缓冲区的大小通常涉及修改内核的启动参数,比如通过sysctl或者修改grub配置文件。然而,我需要确认这些方法是否在提供的引用中有支持或相关的线索。 在引用[3]中的C代码示例里,使用了klogctl系统调用来访问内核日志,这可能意味着缓冲区的大小在内核编译时就已经确定,或者可以通过运行时参数调整。不过用户希望的是配置方法,所以可能需要修改内核参数。 引用[4]提到环形缓冲区的实现有读/写指针和缓冲区大小控制,可能通过模块参数或内核启动参数来调整。因此,可能的步骤包括: 1. 修改内核启动参数,如log_buf_len,通过GRUB配置。 2. 使用sysctl动态调整,但需要确认是否支持。 3. 检查当前缓冲区大小的方法,比如dmesg -s或查看/proc/cmdline。 需要验证这些方法是否正确。例如,在grub配置中添加log_buf_len=4M来设置缓冲区大小为4MB。然后更新grub并重启系统。此外,可能还可以通过内核参数ignore_loglevel来保留所有级别的日志,避免被覆盖。 另外,引用[3]中的代码示例里,BUFFER_SIZE被定义为8192,这可能影响读取的缓冲区大小,但用户的问题是调整内核中的环形缓冲区本身,而不是读取时的缓冲区,所以修改内核参数更为关键。 需要确保回答中包括具体的步骤,如编辑grub文件、更新grub、重启,并验证更改是否生效。还要提醒用户注意,动态调整可能有限,可能需要重新编译内核,或者某些系统可能不支持动态调整。此外,临时调整可以使用dmesg -n来设置日志级别,但这可能不会改变缓冲区大小,而是过滤日志级别。 总结步骤: - 修改GRUB_CMDLINE_LINUX,添加log_buf_len=值 - 更新grub - 重启系统 - 验证/proc/cmdline中的参数 - 检查dmesg输出是否显示更大的缓冲区 同时,需要指出永久性和临时性方法,以及可能的限制,比如某些系统可能需要内核支持或特定的版本。</think>### 如何调整Linux dmesg内核环形缓冲区大小 #### 1. **内核启动参数调整(永久生效)** Linux内核环形缓冲区大小在系统启动时通过内核参数`log_buf_len`设定[^4]。具体步骤如下: **步骤1**:编辑GRUB配置文件 ```bash sudo vim /etc/default/grub ``` 在`GRUB_CMDLINE_LINUX`行中添加`log_buf_len=4M`(示例为4MB,可自定义): ```bash GRUB_CMDLINE_LINUX="... log_buf_len=4M" ``` **步骤2**:更新GRUB配置 ```bash sudo update-grub ``` **步骤3**:重启系统 ```bash sudo reboot ``` **验证**: 检查内核启动参数是否生效: ```bash cat /proc/cmdline | grep log_buf_len ``` 或通过`dmesg`观察日志末尾的缓冲区初始化信息: ```bash dmesg | grep "kernel command line" ``` --- #### 2. **动态调整(临时生效,部分系统支持)** 某些内核版本支持通过`sysctl`动态调整缓冲区大小,但需内核编译时启用`CONFIG_LOG_BUF_SHIFT`选项[^4]。 **示例**: ```bash # 设置缓冲区大小为16MB(需计算为2的幂次) sudo sysctl kernel.log_buf_len=16777216 ``` --- #### 3. **内核编译参数调整(高级方法)** 若需彻底修改默认大小,可重新编译内核时设置`CONFIG_LOG_BUF_SHIFT`参数: ```bash CONFIG_LOG_BUF_SHIFT=21 # 2^21 = 2MB ``` 此方法需熟悉内核编译流程[^4]。 --- #### 4. **日志级别过滤(减少覆盖风险)** 通过调整日志级别保留更多信息(不直接改变缓冲区大小): ```bash sudo dmesg -n debug # 记录所有级别日志 ``` 或在内核参数中添加`ignore_loglevel`[^3]。 --- #### 注意事项 1. **兼容性**:`log_buf_len`参数需内核支持,部分旧版本可能无效。 2. **内存占用**:缓冲区大小增加会占用更多内核内存(非用户空间内存)[^4]。 3. **日志持久化**:缓冲区满后新日志会覆盖旧内容,建议结合`rsyslog`或`journald`持久化存储[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值