我必须使用romfs创建具有自定义可加载模块的文件系统。但是,我有一些困惑(我仍然对内核一无所知):

  • 在阅读romfs文档:romfs之后,据我所知,romfs是类似于ext2, ext3, ext4....的文件系统,该文件系统用于创建内核在启动时所需的初始化ramdisk。但是,据说romfs从版本2.1.21开始被合并到内核中:romfs homepage。在主页上,我们只能下载genromfs实用程序,该实用程序用于创建romfs图像文件。因此,我想在这里说清楚:内核中包含的romfs模块用于读取romfs文件系统,而genromfs用于创建一个模块,不是吗(我尝试了genromfs,但我想确认一下)?
  • initrdmkinitrd -allow-missing -f initrd.img kernel-version在源目录(要加载的文件系统)上创建,并由gzip -dc initrd.img | cpio -idv解包,而在使用romfs时,我必须使用mkinitrd创建其镜像,并使用:genromfs -fdv romfs.img解包。这与内核启动时的initrd相同吗? initrd涉及压缩,而romfs不涉及压缩,这样可以吗?
  • 如果是这样,必须在内核中内置romfs模块以在早期内核引导阶段进行读取,对吗?在我的系统中,我们有一台无盘计算机,目前initrd用作引导阶段文件系统以及最终的根文件系统。但是,由于romfs是只读的,因此使用romfs拒绝用户具有写入文件系统的能力(因此,我们不能像echo "something" > /tmp/something.txt那样做)吗?
  • 最佳答案

    对于(1),是的,模块romfs是支持简单只读文件系统的文件系统,该文件系统的实现非常简单。程序genroms允许您创建romfs文件系统的实例,该实例可以在已加载romfs模块的内核下安装和访问。

    genromfs工具生成文件系统镜像,该镜像可以放在块设备上,也可以放在预先存在的文件系统上的文件上。

    对于(2),您可以将romfs文件系统用作初始ram磁盘-只要存在用于访问romfs文件系统的内置内核支持即可。区别在于initrd加载时间。对于标准initrd镜像,它会被解压缩到用于启动启动的ramdisk中,而对于romfs镜像,它并不会被解压缩,它只是按原样使用。

    使用romfs镜像作为文件系统的主要原因是,可以将Y镜像放置在一个只读内存块中,并以这种方式直接访问,而无需为扩展的ramdisk镜像使用物理内存。

    对于(3),是的,您必须将文件系统作为内置组件而不是可加载模块编译到系统中-即在内核文件系统配置中为rom file system选项选择'genromfs'。

    我不建议将romfs文件系统用作根文件系统-POSIX属性(所有权,权限)不足,无法将其作为适当的文件系统运行以用于日常日常使用(我不知道肯定;我只是发现使用这样的文件系统非常奇怪)

    一个initrd在运行时被解压缩到内存中,因此在系统重新引导后,对文件系统的任何写操作都不会持久。如果该扩展ramdisk上的文件系统具有适当的权限,则内核应防止普通用户对磁盘上的特定内容进行更改。您将不允许用户以root用户身份登录系统,并依赖文件系统的权限来防止对文件的修改。

    它是只读且不可修改的事实意味着,如果您想拥有一个/tmp文件,则需要在FS-Cache/CacheFS调用中创建该目录,然后必须将tmpfs挂载到该挂载点上为了执行对该目录的写操作。

    如果您正在寻找一种具有只读根文件系统的方法,则应考虑从远程文件系统挂载只读共享。这样,用户就没有实际的方式来修改文件系统-服务器将拒绝所有写入工作。通过使用像 ojit_code 这样的功能,性能将非常不错。

    关于linux - 这正是Linux内核中的romfs做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10595624/

    10-13 09:43