MBR和超级块、备用块的作用和备份恢复流程

发表于 2025-02-17  1.52k 次阅读


文章目录

MBR的构成和工作原理

主引导程序(446 字节)

这是一段可执行的二进制代码,也被称作引导加载程序。当计算机启动时,BIOS 会把 MBR 加载到内存的 0x7C00 地址处并执行该程序。主引导程序的主要功能是检测硬盘分区表的有效性,搜索并加载活动分区的引导扇区,然后将控制权转交给该分区的操作系统引导程序,比如 GRUB 。

分区表(64 字节)

分区表记录了硬盘上各个分区的信息,每个分区项占用 16 字节,MBR 分区表最多可定义 4 个主分区,或者 3 个主分区与 1 个扩展分区。每个分区项包含的信息有分区的起始位置、大小、文件系统类型以及是否为活动分区等。若要创建更多分区,可借助扩展分区进一步划分为多个逻辑分区。

结束标志(2 字节)

位于 MBR 的最后两个字节,固定值为 0x55 和 0xAA。BIOS 加载 MBR 后,会检查这两个字节的值,若不是 0x55AA,就会判定 MBR 无效,可能致使计算机无法正常启动。

超级块和备用块的工作原理

超级块描述

主超级块存储着文件系统的核心元数据,如文件系统的整体布局信息、文件系统的状态信息以及块组的布局信息等。

文件系统的基本参数:如块大小(block size)、inode 数量、总块数、空闲块数量、空闲 inode 数量等。这些参数定义了文件系统的整体结构和容量。
文件系统的状态信息:标记文件系统是否处于挂载状态、是否有错误发生等,用于确保文件系统的一致性和安全性。
块组信息:描述文件系统中各个块组的分布和使用情况,帮助操作系统快速定位和管理数据。

超级块的工作流程

挂载文件系统: 当用户使用 mount 命令挂载文件系统时,操作系统首先会读取超级块。通过超级块中的信息,操作系统可以了解文件系统的基本参数、使用情况和状态等,从而正确地将文件系统挂载到指定的挂载点。例如,根据超级块中的块大小和总块数,操作系统可以确定文件系统的容量;根据空闲块和空闲 inode 数量,操作系统可以为后续的文件创建和写入操作做好准备。

创建文件:当用户创建新文件时,操作系统会从超级块中获取空闲 inode 数量信息,分配一个空闲的 inode 给新文件,并更新超级块中的空闲 inode 数量。同时,操作系统还会根据文件的大小,从超级块记录的空闲块中分配相应数量的块来存储文件数据,并更新空闲块数量。

删除文件:删除文件时,操作系统会释放该文件所占用的 inode 和数据块,并将这些 inode 和数据块标记为空闲状态,同时更新超级块中的空闲 inode 数量和空闲块数量。

系统崩溃与恢复:在系统崩溃或异常断电等情况下,文件系统可能会出现不一致的情况。当系统重启并重新挂载文件系统时,操作系统会检查超级块中的错误标志。如果发现错误标志被设置,操作系统会调用文件系统检查工具(如 fsck )对文件系统进行检查和修复。文件系统检查工具会根据超级块中的信息,对文件系统的各个部分进行扫描和验证,确保文件系统的一致性。

备用块描述

在文件系统正常运行时,系统主要使用主超级块来管理文件系统。备用超级块处于闲置状态,但它们会定期与主超级块进行同步,以确保其内容与主超级块保持一致。当主超级块损坏时(如坏道、软件故障或其他意外情况),任何一个备用超级块都可以替代主超级块来恢复文件系统的正常运行。

备用块更新机制

文件系统元数据发生变化:当文件系统的元数据(如文件的创建、删除、inode 的分配等)发生变化时,系统会同时更新主超级块和备用超级块。

定期同步:即使文件系统的元数据没有发生变化,系统也会定期将主超级块的信息同步到备用超级块,以防止因意外情况导致备用超级块与主超级块不一致。

MBR和超级块所处的位置

MBR处于磁盘的前512字节,占用第一个块扇区,每个分区的第一块扇区还会有引导扇区

超级块处于每个分区的第二个块扇区(注意是每个分区,不是磁盘)

使用备份块进行恢复:

#使用mke2fs -n 查询备份块位置
mke2fs -n /dev/sda1 #分区更换为对应的分区
e2fsck -b $备份块号 /dev/sda1 #块号更换成查询出来的备份块,分区更换为对应的分区

MBR和超级块的日常备份与恢复

#备份MBR
dd if=/dev/sda of=mbr_backup bs=512 count=1 #备份第一个512字节
#恢复MBR
dd if=mbr_backup of=/dev/sda bs=512 count=1 #


#备份超级块
dd if=/dev/sda1 of=superblock_backup bs=1024 count=1 skip=1 #跳过1024字节后开始备份1024字节
#恢复超级块
dd if=superblock_backup of=/dev/sda1 bs=1024 seek=1 #需要卸载分区

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

scanz个人博客