在Linux/UNIX中运行什么代码来管理文件系统?

dgtucam1  于 2023-05-22  发布在  Linux
关注(0)|答案(2)|浏览(90)

对于一个OS项目,我正在创建一个ext2文件系统映像并挂载它。这意味着我将写出一个包含块信息的1MB文件,然后将其用作挂载目标。
例如,假设有一个名为base.img的文件:

fsck.ext2 base.img # checking my file system 
mkdir mnt
sudo mount -o loop base.img mnt

挂载成功后,内部发生了什么?根据我的理解,我的base.img只是正确地初始化了图像。在内部,这些是我的问题:

  • 这个文件系统现在是否有一个驱动器分区?
  • 如何管理对文件系统的更改?

对于第二个,据我所知,存在一个“挂载表”,也许还有一个ext2模块,Linux将使用它来进行进一步的更改。这些更改是否会反映在base.img中,或者现在是否有一个新的磁盘分区?
我的基本问题是:这是怎么回事

s3fp2yjn

s3fp2yjn1#

Ext 2是一个基于块的文件系统,即它需要“块设备”。
磁盘是块设备(例如/dev/sda)。磁盘内的磁盘分区也是块设备(例如,/dev/sda1)。Linux还可以将内存视为块设备(/dev/ram0)。
本质上,任何可以被视为通过偏移量可寻址的连续字节的东西都可以被视为块设备。
这包括像base.img这样的文件,mount将Map到像/dev/loop0这样的块设备。
Ext 2不关心块设备是磁盘、分区、内存还是文件,它只在特定的偏移量中写入内容。
(that这是一种简化,但已经足够好了)。
所以回答你的问题:
这个文件系统现在是否有一个驱动器分区?
没有。有一个新的块设备(/dev/loop0),但不是新的分区-分区是特定于磁盘的东西。
如何管理对文件系统的更改?
...
这是怎么回事

  • 你写mnt,即“将数据A写入/mnt/some/file的偏移量X”。
  • 写入操作转到ext 2。
  • ext 2计算需要在哪个块设备偏移处写入什么数据,写入到块设备,即“将数据B写入/dev/loop0的偏移量Y”。
  • loopback驱动程序接收这个请求并将它们转发到base.img所在的文件系统(可能是ext 2,也可能不是ext 2),即“将数据B写入base.img的偏移量Y”。
  • 该文件系统进行其自己的计算并创建对其自己的块设备的请求,即“将数据C写入偏移Z处的/dev/sda1”。
  • 磁盘驱动程序接收此请求并写入磁盘。

这些更改是否会反映在base.img中,或者现在是否有新的磁盘分区?
通过ext 2写入/dev/loop0,这些更改将反映在base.img中。

wgx48brx

wgx48brx2#

Linux使用块设备来保存数据(大多数情况下,在开始时有一个分区表和多个分区,每个分区都有一个文件系统,然后单独挂载),但任何块设备都可以。
您正在使用的循环选项创建了一个块设备(通常在/dev/loop 0中),并将其与您用作映像的文件相关联。
有关更多详细信息,请参见loop(4)

相关问题