首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核如何知道在哪里找到文件系统?

内核如何知道在哪里找到文件系统?
EN

Unix & Linux用户
提问于 2020-05-29 09:30:29
回答 2查看 685关注 0票数 1

我对Linux非常陌生,尤其是嵌入式Linux。

我正在一个嵌入式设备上进行一个已经开发的项目,其中根文件系统类型是SquashFS (压缩只读文件系统类型)。

当内核启动时,它如何知道如何查找和挂载根文件系统,特别是当它是SquashFS类型而不是普通的EXT4类型时?提前谢谢。

EN

回答 2

Unix & Linux用户

发布于 2020-05-29 09:54:05

有两种方法可以做到这一点:

  • 您可以将根设备名称作为参数(root)传递给内核,并且内核必须拥有(内置)所有必需的模块来定位存储设备、标识和挂载启动init的文件系统。您可以指示内核它是哪个文件系统(使用rootfstype),但我不确定这是必需的;
  • 现在,绝大多数系统都使用initramfs,它是一个小的文件系统映像,粘在内核上(或由引导加载程序引用),在执行switch_root操作后,在实际根文件系统中将控制权传递给实际根文件系统中的init进程之前,在用户地准备和挂载根文件系统;
票数 2
EN

Unix & Linux用户

发布于 2020-05-29 11:03:11

有一个概念幻数,您可以参考。

magic.h头文件中定义的幻数列表

例如,如果您检查磁盘:

代码语言:javascript
复制
sudo file -Ls /dev/mapper/vg-home               
/dev/mapper/vg-home: Linux rev 1.0 ext4 filesystem data, UUID=fd8eb0e8-073d-4ae3-810a-87e8af0981d7 (needs journal recovery) (extents) (64bit) (large files) (huge files)

file命令根据神奇的数字匹配类型。您可以通过十六进制工具看到这些值:

代码语言:javascript
复制
sudo hexdump /dev/mapper/vg-home -C  | grep "53 ef"
00000430  1b da d0 5e 49 00 ff ff  53 ef 01 00 01 00 00 00

这里0x53ef是ext4文件系统的神奇数字

适用于squashfs (幻数0x73717368)

代码语言:javascript
复制
sudo hexdump /dev/somedisk -C  | head -n 1    
0000000  73 71 73 68 00 00 14 7e  01 ea 27 0d 00 01 00 00 |sqsh...~..'.....|
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/589694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档