问题:
内核打印
VFS: Can't find ext4 filesystem
只有第一次启动才会出问题
定位思路:
1,由于刚升级了内核,很有可能是内核导致的
查看内核代码,定位到打印出错信息的位置为函数ext4_fill_super,该函数是一个回调函数,由函数mount_bdev 调用
加入printk打印详细信息,看为什么会出现这种错误,定位到问题代码在
if (sb->s_magic != EXT4_SUPER_MAGIC) {
printk(KERN_ERR, "invalid magic number:0x%x", sb->s_magic);
goto cantfind_ext4;
}
直接原因是magic number不对
于是打印super_block结构,发现全是0,于是想到,设备第一次启动,对于新加入的硬盘,这个盘应该还没有分区,还没有文件系统,所以mount当然失败
问题又出现了,为什么这块盘还没有初始化就被使用了呢?
在内核打印调用栈
dump_stack+0x66/0x90
ext4_fill_super.cold+0x135/0x33fd
? vsnprintf+0x239/0x5b0
? snprintf+0x49/0x60
mount_bdev+0x171/0x1a0
? ext4_calculate_overhead+0x470/0x470
legacy_get_tree+0x22/0x40
vfs_get_tree+0x1b/0x80
? ns_capable_common+0x29/0x50
do_mount+0x72a/0x920
? memdup_user+0x33/0x70
ksys_mount+0x79/0xc0
__x64_sys_mount+0x1c/0x20
do_syscall_64+0x52/0x2f0
entry_SYSCALL_64_aft