实验目标:
- 使用dd命令创建磁盘镜像文件ext2.img并格式化为ext2文件系统,然后通过mount命令挂载到Linux主机文件系统。
- 查看ext2文件系统的超级块的信息,以及数据块的数量、数据块的大小、inode个数、空闲数据块的数量等信息
- 在文件系统中创建文件xxxxx.txt(其中xxxxx为你的学号),在该文件中写入你的学号文本。编写一个C程序,根据文件名,读出文件的全部内容并打印出来。要求:对原始img文件fopen("ext2.img")后进行处理和提取,不能直接fopen("xxxxx.txt")
实验设备:
- 硬件:微机,hyper-V虚拟化平台或者远程linux终端
- 软件:gcc
1、用dd和mkfs.ext2创建一个ext2的文件系统镜像
dd if=/dev/zero of=ext2.img bs=1K count=256
mkfs.ext2 ext2.img -b 1024
mkdir vt
mount -t ext2 -o loop ext2.img vt
然后在vt目录里创建一个文本文件你的学号.txt,该文件的内容也是你的学号
保存文件并退出,运行ls -li 命令,记录下你的学号.txt的索引节点号
然后运行umount vt,再重新mount -t ext2 -o loop ext2.img vt 目的是把缓存写入磁盘
dumpe2fs ext2.img 运行后记录下输出结果
【过程1】
1.输入,如下图
# 创建并格式化文件系统
dd if=/dev/zero of=ext2.img bs=1K count=256
mkfs.ext2 ext2.img -b 1024
2.# 创建挂载点并挂载
mkdir vt
sudo mount -t ext2 -o loop ext2.img vt
表明系统在尝试为 ext2.img 文件设置循环设备(loop device)时失败了。
如下图,输入:losetup -a
查看当前已使用的循环设备,发现ext2.img 已经被挂载到 /dev/loop14 这个循环设备上了。
因此,我继续输入
cd vt
sudo bash -c 'echo "123456789123" > 123456789123.txt'
如下图所示,创建、写入成功
3.#先返回原目录,如下图
cd /home/szj/OperatingSystem
# 查看文件权限和索引节点号
sudo ls -li vt
分析:
①总计 13:
这是 ls 命令统计出的 vt 目录下文件和目录所占用的磁盘块总数(以 1K 大小的块为单位)。这里的 “13” 表示这些文件和目录在磁盘上总共占用了 13 个 1K 大小的块。
②12 -rw-r--r-- 1 root root 13 4月 1 16:24 123456789123.txt:
- 12:这是文件 123456789123.txt 的索引节点号(Inode number)。每个文件和目录在文件系统中都有一个唯一的索引节点,用于存储文件的元数据(如文件大小、所有者、权限等)。
- -rw-r--r--:这是文件的权限信息。第一个字符 '-' 表示这是一个普通文件(如果是 'd' 则表示目录)。接下来的字符分为三组,分别对应文件所有者(user)、所属组(group)和其他用户(others)的权限。rw- 表示所有者有读(r)和写(w)权限,没有执行权限;r-- 表示所属组有读权限,没有写和执行权限;最后一组 r-- 表示其他用户也只有读权限,没有写和执行权限。
- 1:这是文件的硬链接数。对于普通文件,硬链接数通常为 1。
- root root:第一个 root 是文件的所有者(用户),第二个 root 是文件所属的组。在这里,文件的所有者和所属组都是