根文件系统介绍及ext3格式文件系统的制作

本文介绍了根文件系统的重要性,它包含了操作系统运行所需的配置文件、命令和库。根文件系统可以是镜像文件或文件夹形式。重点讲述了如何在Ubuntu环境下使用mke2fs、dd等工具制作ext3格式的根文件系统镜像,包括创建空白文件、格式化、挂载、复制文件、检查和修复文件系统以及调整大小的步骤。
摘要由CSDN通过智能技术生成

根文件系统介绍及其制作

一、根文件系统概述

1、为什么需要根文件系统

  • init进程的应用程序在根文件系统上

  • 根文件系统提供了根目录/

  • 内核启动后的应用层配置(etc目录)在根文件系统上。几乎可以认为:发行版=内核+rootfs

  • shell命令程序在根文件系统上。譬如ls、cd等命令

总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等···)相配合才能工作。

2、根文件系统的实质是什么

  • 根文件系统是特殊用途的文件系统。

  • 根文件系统也必须属于某种文件系统格式。rootfstype=

  • 究竟文件系统是用来干嘛的。

    1. 首先,存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是按照块号(扇区号)来访问的。这就很麻烦。

    2. 其次,文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。

    3. 最后,不同的文件系统的差异就在于对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。

二、根文件系统的形式

1、镜像文件形式

  • 使用专用工具软件制作的可供烧录的镜像文件(如烧录linuxQT时烧录的rootfs_qt.ext3)。

  • 镜像中包含了根文件系统中的所有文件。

  • 烧录此镜像类似于对相应分区格式化。

  • 镜像文件系统具有一定的格式,格式是内化的,跟文件名后缀是无关的。

2、文件夹形式

  • 根文件系统其实就是一个包含特定内容(如etc/ bin/ opt/ 等目录文件)的文件夹而已

  • 根文件系统可由任何一个空文件夹添加必要文件构成而成

  • 根文件系统的雏形就是在开发主机中构造的文件夹形式的

3、总结

  • 镜像文件形式的根文件系统主要目的是用来烧录到块设备上,设备上的内核启动后去挂载它。镜像文件形式的根文件系统是由文件夹形式的根文件系统使用专用的镜像制作工具制作而成的。

  • 最初在开发主机中随便mkdir创建了一个空文件夹,然后向其中添加一些必要的文件(包括etc目录下的运行时配置文件、/bin等目录下的可执行程序、/lib目录下的库文件等···)后就形成了一个文件夹形式的rootfs。然后这个文件夹形式的rootfs可以被kernel通过nfs方式来远程挂载使用,但是不能用来烧录块设备。我们为了将这个rootfs烧录到块设备中于是用一些专用的软件工具将其制作成可供烧录的一定格式的根文件系统镜像。

  • 文件夹形式的rootfs是没有格式的,制作成镜像后就有了一定的rootfs格式了,格式是由我们的镜像制作过程和制作工具来决定的。每一种格式的镜像制作工具的用法都不同。

三、自己制作ext3格式的根文件系统镜像

1、mke2fs介绍

  • mke2fs是一个应用程序,在ubuntu中默认是安装了的。这个应用程序就是用来制作ext2、ext3、ext4等格式的根文件系统的。

  • 一般用来制作各种不同格式的rootfs的应用程序的名字都很相似,类似于mkfs.xxx(譬如用来制作ext2格式的rootfs的工具叫mkfs.ext2、用来制作jffs2格式的rootfs的工具就叫mkfs.jffs2

  • ubuntu中的mkfs.ext2等都是mke2fs的符号链接而已。

2、开始制作ext3格式文件系统

我的开发环境:PC(主机Win10,虚拟机ubuntu22.04) + 开发板(X210)

第一步:

找一个合适的目录,我所找的目录是:/root/porting_x210/rootfs

在该目录下输入以下命令:

dd if=/dev/zero of=imagefs.ext3 bs=1M count=50

​这个命令将在当前目录创建一个名为"imagefs.ext3"的文件,并向其中写入50MB大小的全零数据块。这样创建的文件系统是一个空的ext3文件系统,可以用于挂载并添加文件。
​
dd:Linux下的一个常用命令,可以用来进行数据转换和复制。
if=/dev/zero:指定读取源,该参数将会从Linux系统中的伪随机数生成器 /dev/zero 读取数据。
of=imagefs.ext3:指定输出文件,该参数将会把生成的数据写入名为“imagefs.ext3”的文件。
bs=1M:指定每次拷贝的块大小,这里设置为1MB。
count=50:指定要复制块的数量,这里设置为50块,因此会生成一个50MB的文件

 注意:bs=1M count=50有实际情况而定,给定的空间小了后续的文件写入不到里面去,大了会浪费空间

第二步:

运行上述命令后,则会创建一个imagefs.ext3的文件,接下来就创建一个ext3的文件系统镜像。

在该目录下输入以下命令:

mkfs.ext3 -F -L imageroot imagefs.ext3
​
这个命令的含义是将指定的文件系统格式化为EXT4格式,使其可以用于存储文件。具体各个参数的含义如下:
​
mkfs.ext4:用于创建ext4文件系统的命令
-F:表示强制执行,在格式化文件系统前不询问任何问题
-L imageroot:为文件系统指定一个标签为“imageroot”
imagefs.ext3:要格式化的文件系统名称,这里使用之前创建的50MB大小的文件

 注意:四个必须都要显示完成

第三步:

在该目录输入以下命令,创建rootfs_image这个目录,名字可自定义。

mkdir rootfs_image

接着输入以下命令:

mount imagefs.ext3 rootfs_image/

这个命令是将之前创建和格式化好的 imagefs.ext3 文件系统挂载到 rootfs_image/ 目录下,使其中的文件可以被访问和修改。具体各个参数的含义如下:
​
mount:用于挂载文件系统的命令
imagefs.ext3:要挂载的文件系统名称
rootfs_image/:要挂载到的目录,需要提前创建该目录
第四步:

使用以下命令,将所需要制作的文件夹格式的根文件系统(我的这个所在目录是/root/porting_x210/rootfs/rootfs)拷贝到rootfs_image这个目录

cp -rfp ./rootfs/* rootfs_image/
​
-r:递归复制,表示复制目录时包括其下的所有文件和子目录
-f:强制复制,即在目标位置已存在的同名文件会被覆盖
-p:保留文件属性,即在复制过程中保留原文件的权限、拥有者、时间戳等信息

第五步:

完成后,使用下列命令卸载文件系统:

umount rootfs_image/

接下来使用以下命令检查ext3文件系统的正确性

e2fsck -p -f imagefs.ext3 

​
这个命令是用于检查 imagefs.ext3 格式的文件系统是否有错误,如果有,就试图将其修复,使其重新成为完全可用的文件系统。具体各个参数的含义如下:
​
e2fsck:用于检查和修复 ext2/ext3/ext4 文件系统的命令,可以查找文件系统的错误并进行相应的修复
-p:自动修复文件系统中发现的错误,而不询问任何问题
-f:将文件系统强制标记为需要检查,即使它看起来是干净的
 

然后使用以下命令:

e2fsck -p -f imagefs.ext3 
​
这个命令是用于检查 imagefs.ext3 格式的文件系统是否有错误,如果有,就试图将其修复,使其重新成为完全可用的文件系统。具体各个参数的含义如下:
​
e2fsck:用于检查和修复 ext2/ext3/ext4 文件系统的命令,可以查找文件系统的错误并进行相应的修复
-p:自动修复文件系统中发现的错误,而不询问任何问题
-f:将文件系统强制标记为需要检查,即使它看起来是干净的

 

最后使用以下命令:

resize2fs -M imagefs.ext3
​
这个命令是用于减小 imagefs.ext3 文件系统的尺寸,以便回收未使用的空间。具体各个参数的含义如下:
​
resize2fs:用于调整 ext2/ext3/ext4 文件系统大小的命令
-M:将文件系统缩小到最小可能的尺寸

通过上述步骤,就将根文件系统完全打包成ext3镜像文件了。

然后就可以进行烧录了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值