内核crash>>>磁盘空间小 怎么处理
阅读原文时间:2023年07月08日阅读:3

在内存发生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;  

}

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章