对于一个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
中,或者现在是否有一个新的磁盘分区?
我的基本问题是:这是怎么回事
2条答案
按热度按时间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”。/dev/loop0
的偏移量Y”。base.img
所在的文件系统(可能是ext 2,也可能不是ext 2),即“将数据B写入base.img
的偏移量Y”。/dev/sda1
”。这些更改是否会反映在base.img中,或者现在是否有新的磁盘分区?
通过ext 2写入
/dev/loop0
,这些更改将反映在base.img
中。wgx48brx2#
Linux使用块设备来保存数据(大多数情况下,在开始时有一个分区表和多个分区,每个分区都有一个文件系统,然后单独挂载),但任何块设备都可以。
您正在使用的循环选项创建了一个块设备(通常在/dev/loop 0中),并将其与您用作映像的文件相关联。
有关更多详细信息,请参见loop(4)