Linux挂载Image到根目录实现文件系统可读写的功能

如果把 Image 解压后直接拷贝到内存中,也可以实现写的功能,但是嵌入式系统一直存在内存大小方面的限制,所以将整个 Linux 系统拷入内存是不可取的。本文将介绍一种直接挂载 Image 到根目录下,同时实现文件系统可读写的功能。

本文所描述的的 Linux Image 由 BootLoader、kernel、initrd、rootfs 组成,它们共同存在于一个可以启动的存储设备中(本文以 USB 为例)。组成架构如下:

图 1. 可启动 linux 镜像文件结构

各个模块的作用如下:

Boot Loader:由 BIOS 加载,用于将后续的 Kernel 和 initrd 的装载到内存中 kernel:为 initrd 运行提供基础的运行环境 initrd:检测并加载各种驱动程序 rootfs:根文件系统,用户的各种操作都是基于这个被最后加载的文件系统

其调用顺序是 Boot Loader->kernel->initrd->rootfs。

当机器上电时首先 BIOS 会启动,然后装载 USB 设备中的 Boot Loader、kernel,、nitrd 到内存中,由于这些文件大小总和小于 10M,所以我们直接拷贝到内存中再执行不会有问题。

最后要加载的 rootfs 是用户最终进行读写操作的文件系统。

在非嵌入式系统中,这部分文件通常储存在可直接读写的硬盘上,因此直接挂载到根目录后(
例如:mount /dev/sda1 /mnt)就可以进行读写操作。 在嵌入式系统中,它是一个压缩的文件系统,大小通常是好几百兆,解压后的大小都超过 1G,如果直接 mount 到系统目录,
那么系统目录是只读的,不可进行写入操作。而如果把它加压到内存中可以实现读写的操作,但是这么大的文件直接解压到内存中对于嵌入式设备来说是不可接受的。因此我们需要找到一种不拷贝 rootfs 到内存中,同时又可以对最终的根文件系统进行读写的方法。

只读式压缩文件系统介绍

在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用 RAMDISK(把内存当作 disk)方式来使用文件系统,那么在">系统运行之后,首先要把外存 (Flash) 上的映像文件解压缩到内存中,构造起 RAMDISK 环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在外存中占据了空间 ( 以压缩后的形式存在 ),而且还在内存中占用了更大的空间 ( 以解压缩之后的形式存在 ),这违背了嵌入式环境下尽量节省资源的要求。以下两种方案的诞生就是为了解决这个问题:

CramFS

CramFS 文件系统是专门针对闪存设计的只读压缩的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在 CramFS 中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。CramFS 中的解压缩以及解压缩之后的内存中数据存放位置都是由 CramFS 文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。

SquashFS

SquashFS 也是一个只读的文件系统,它可以将整个文件系统压缩在一起,存放在某个设备,某个分区或者普通的文件中。如果您将其压缩到一个设备中,那么您可以将其直接 mount 起来使用,而如果它仅仅是个文件的话,您可以将其当为一个 loopback 设备使用。

本文主要介绍基于 SquashFS 的可读写文件系统构建。

时间: 2024-09-20 05:28:11

Linux挂载Image到根目录实现文件系统可读写的功能的相关文章

Linux挂载卸载光盘&实践

在Linux下有时候需要挂载光盘,拷贝文件或安装系统,例如拷贝Redhat操作系统镜像文件等.下面介绍一下在Linux系统下挂载.卸载光盘的方法. 在Linux系统中,每一个物理设备都可以看做是一个文件,而像硬盘.光盘等物理设备文件都在/dev目录下(部分信息截图) 其中光驱设备文件一般是cdrom 或dvd, 在执行光驱挂载命令前,我们需要创建一个目录用来做挂载点,关于目录的位置一般随个人习惯而定,我一般习惯将该目录创建在/mnt/hgfs下 挂载光驱 [root@getlnx05 ~]# c

Linux有问必答:如何扩展XFS文件系统

Linux有问必答:如何扩展XFS文件系统 问题:我的磁盘上有额外的空间,所以我想要扩展其上创建的现存的XFS文件系统,以完全使用额外空间.怎样才是扩展XFS文件系统的正确途径? XFS是一个开源的(GPL)日志文件系统,最初由硅谷图形(SGI)开发,现在大多数的Linux发行版都支持.事实上,XFS已被最新的CentOS/RHEL 7采用,成为其默认的文件系统.在其众多的特性中,包含了"在线调整大小"这一特性,使得现存的XFS文件系统在已经挂载的情况下可以进行扩展.然而,对于XFS文

ubuntu-将硬盘新加卷挂载到到根目录下,怎么办

问题描述 将硬盘新加卷挂载到到根目录下,怎么办 小弟完全是Linux菜鸟,今天不小心添加了一条sudo mount --move /media/m/新加卷 / 将新加卷挂载到了根目录下,如今得filesystem变成了这样,好像新加卷访问不了了.怎么办? Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda5 116693396 9797300 100961712 9% / /dev/sda3 116693396 9797300

学习 Linux,101: 创建分区和文件系统

概述 在本文中,学习磁盘分区和 Linux 文件系统相关内容.学习: 创建分区 使用 mkfs 命令来设置 ext2.ext3.ext4.xfs.Reiser v3 和 vfat 文件系统 创建和管理交换空间 本文帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试 101 中主题 104 下的目标 104.1.该目标的权值为 2. 注意:本文包含适用于 LPI Exam 101: Objecti

linux 挂载 minicom相关问题

问题描述 linux 挂载 minicom相关问题 解决方案 不知道楼主要干嘛,但是如果你要配置minicom的话,可以用 minicom -s 解决方案二: 根据提示先按ctrl+A 再按Z就可以配置了

linux-有关Linux挂载的问题,最近看书,有点疑问关于这些方面的问题

问题描述 有关Linux挂载的问题,最近看书,有点疑问关于这些方面的问题 最近看书,看到挂载这一节的时候,讲到光盘的挂载,很奇怪既然已经在某个文件的一个目录下面了,为什么还要把他在挂在别的目录下呢? 解决方案 在Linux中一般不能直接访问软盘.其他硬盘逻辑分区.光盘等,在Linux中它们都被视为文件,在使用前必须使用装载命令mount将它们装载到系统的/mnt目录中,使用结束后还须卸载.相当与一个文件的打开和关闭的过程 . 百度到的,希望对你有帮助

图片-Linux 挂载启动nfs老是报错

问题描述 Linux 挂载启动nfs老是报错 解决方案 /etc/init.d/nfs-kernel-server 这个文件不存在,你确定nfs安装没有问题? 解决方案二: http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html 解决方案三: 先看下有没有这个目录存在 解决方案四: 应该是没有的,我是拷别人配置好的ubuntu,还有别人启动的时候没事 我自己启动就出现这个问题

取消linux挂载磁盘不在桌面上显示

取消linux挂载磁盘不在桌面上显示         我们每次新装完redhat Linux系统,如果有手动添加的分区,在登陆系统后,桌面上往往都会有自定义添加的盘符显示,而且不能删除,删除就unmount,而我们通常不希望是这样的,这个时候我们必须借助一个包gonf-editor来实现手工管理桌面上显示的内容.这个包在redhat linux光盘Server/目录中存在,我们通过rpm来安装即可. 配置步骤如下:1.安装gonf-editor [root@localhost /]# cd /m

Red Flag Linux Desktop 6.0用户手册:文件系统

文件系统是操作系统在硬盘或分区上保存文件信息的方法和数据结构,也就是文件在硬盘或分区上的组织方式.通常,它也被用作表示保存文件信息的硬盘或分区. 8.5.1系统支持的文件系统类型 Linux系统的重要特征之一就是支持多种文件系统.这样,它更为灵活并可以和许多其他种类的操作系统交换数据,其中昀常用的是以下几种: ext3:ext2的升级版,是 Red Flag Linux http://www.aliyun.com/zixun/aggregation/16493.html">Desktop