内核crash>>>磁盘空间小 怎么处理

在内存发生panic时,需要把panic的日志保存下来。以方便日后进行分析。

一般主机为x86的时候,panic 使用 kdump保存log。由于它使用占用大量内存和硬盘。所以当磁盘空间不够时,就会遇到问题。

所以此时使用crashlog.

carshlog
在内核中有一个叫crashlog的东东,它完成如下操作
操作如下
1.在linux内核启动时,保留一64K内存。用于记录panic日志。
2.使用kmsg_dump_register,注册一个回调函数,当发生panic,oops时,把日志记到保留内存。
3.linux内核上电后,把保留内存的内容写入文件
kmsg_dump是oops时进入kmsg_dump的入口。由panic,die,oops_exit等函数调用。它会一一调用回调函数。

每一个回调函数都会用到kmsg_dump_get_buffer---将当前内存log 写入
 
复制代码
oid __meminit crashlog_init_memblock(phys_addr_t addr, phys_addr_t size)
{
    if (crashlog_addr)
        return;
    addr = CRASHLOG_ADDR;

    if (memblock_reserve(addr, xxxxLOG_SIZE)) {
        printk("C
crashlog failed to allocate ramat address 0x%lx\n", (unsigned long) addr);
        return;
    }

    crashlog_addr = addr;
}

static void crashlog_do_dump(struct kmsg_dumper *dumper,
        enum kmsg_dump_reason reason)
{
    struct timeval tv;
    struct module *m;
    char *buf;
    size_t len;

    gettimeofday(&tv);
    crashlog_printf("Time: %lu.%lu\n",
        (long)tv.tv_sec, (long)tv.tv_usec);


    buf = (char *)&crashlog_buf->data[crashlog_buf->len];

    kmsg_dump_get_buffer(dumper, true, buf, get_maxlen(), &len);
    crashlog_buf->len += len;
}
View Code
复制代码

 

 

 

 

 

copy from  https://blog.csdn.net/sunshineywz/article/details/106601116

posted @   codestacklinuxer  阅读(497)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示