内核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 @ 2020-06-10 12:49  codestacklinuxer  阅读(474)  评论(0编辑  收藏  举报