Linux中的超级块和MBR各指的是什么?请详解!!

Linux中的超级块和MBR各指的是什么?请详解!!,第1张

超级块(SuperBlock)包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。MBR(MasterBootRecord),中文意为主引导记录。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partitiontable区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。他是不属于任何一个 *** 作系统,也不能用 *** 作系统提供的磁盘 *** 作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。附:liunx和unix是为了做服务器用途的,它必须保证365*24运行,它的设计就决定不需要整理磁盘碎片。一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblock,i节点inode,数据块datablock,目录块directoryblock,和间接块indirectionblock。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件的数据。i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。UNIX文件系统通常允许在文件中产生孔(hole),意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。这对小的二进制文件经常发生,Linux共享库、一些数据库和其他一些特殊情况。(孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明没有为文件的这个部分分配数据块,即,文件中有一个孔。)

前几天在广州参加植物病毒学会议,一边听会一边开着TeamViewer远程连接实验室装有linux系统的工作站跑程序干活。有一天下午发现TeamViewer显示服务器离线,原来是因为施工导致停电。Anyway, 不重要,发微信让小青儿给我重启服务器,结果发现重启不了,大概就是这个界面。

怎么着都进不去图形界面,简而言之,工作站重启不了了。索性不管了,好好听报告,心想回到福州再收拾工作站。回到福州第一件事就是坐下来重启工作站,发现无论怎么折腾都进不去系统。

虽然图形界面进不去,好在还能够在命令行下进行 *** 作。当看到 /bioinfor ,这个存放目录的路径下啥都没有的时候,这可是我所有的数据啊!如果这个盘里的数据没了,各个合作者还不得把我手撕了。想到这里,冷汗差点下来了。

于是开始寻找解决方法。

首先得想办法进入系统,在反复地 sudo reboot 都无法进入系统之后,通过 df -h 也看不到/dev/sda(也就是挂载到/bioinfor路径的磁盘)信息。然后猜测是不是因为磁盘以及分区表之类出现了错误导致不能进入系统。通过 sudo vi /etc/fstab 将除了系统安装盘之外的所有硬盘的挂载信息全部注释掉,再 reboot , 这时候果然可以进入图形界面系统了。但依然看不到 /bioinfor 盘下的数据。能够开机就让我放心了很多。通过 gparted 工具,能够看到/dev/sda硬盘里used space大概是1.7T,还剩下1.9T左右,这就表示我的数据还在。试图通过 sudo umount /dev/sda 先取消挂载,再重新 sudo mount /dev/sda /bioinfor 挂载到/bioinfor路径,结果报错。

报错信息显示:

搜索网页发现,有一个哥们经历了跟我一样的遭遇, 意外断电造成mount挂载硬盘报错 。所以,这次事故是因为意外断电,基本实锤了。

但到底什么是superblock呢?

继续搜索,直到读到一篇技术文章 linux *** 作系统故障处理,ext4文件系统超级快损坏修复 。本文可以忽略,但这篇技术文章得认真读读。里面讲解了磁头,磁道,柱面,扇区,以及硬盘容量等等概念,以及最重要的inode和block,Superblock(超级块)概念。

既然报错提示Superblock出了问题,那我们就应该从这里入手。linux系统提供了一个磁盘命令 fsck 来尝试对设备进行修复。但可惜,用这个命令的时候,都会提醒你,应该安装最新的 fsck 工具包。

提示如下:

根据这篇文章 E2FSCK: how to handle the “metadata_csum” error by advancing the e2fsck version beyond default installed version 的提示,需要安装1.43X的 e2fsck , 安装方法小结如下。

检验一下是否更新成功:

能够看到已经更新到1.43.5版本。

安装完之后,开始对磁盘进行修复,命令如下:

一般都能修复完毕,然后可以再进行取消挂载或者重新挂载的 *** 作。看到数据都还完好无缺地在电脑上,还处于后怕的我赶紧掏出移动硬盘进行原始数据的备份。

本次debug结束

这篇技术日志对读者可参考性并不高,是因为应用场合实在是少,(试想谁会天天断电呢),但还是有一些体会和感悟:

获取错误的出错磁盘(或者设备)块的大小.

有很多种方法可以得到.

比如,

#

tune2fs

-l

/dev/hda4其实大多数情况下是

1

K.

2

对当前的出错磁盘备份.

恢复超级块(Superblock)的过程其实也是一个有风险的过程.能做备份就做好备份.

如果有其他空闲设备,

dd

命令把该设备上的内容备份起来.

3

一般来说,

超级块错基本上也就是主超级块错,

Ext2/Ext3

文件系统创建的时候,

会同时在屏幕上提示我们在已经在几个地方备份了超级块.那么怎么发现这些超级块在什么地方呢?

我们看看帮助信息:

-b

superblock

Instead

of

using

the

normal

superblock,

use

an

alternative

superblock

specified

by

superblock.

This

option

is

normally

used

when

the

primary

superblock

has

been

corrupted.

The

loca-

tion

of

the

backup

superblock

is

dependent

on

the

filesystem's

blocksize.

For

filesystems

with

1k

blocksizes,

a

backup

superblock

can

be

found

at

block

8193

for

filesystems

with

2k

blocksizes,

at

block

16384

and

for

4k

blocksizes,

at

block

32768.

Additional

backup

superblocks

can

be

determined

by

using

the

mke2fs

program

using

the

-n

option

to

print

out

where

the

superblocks

were

created.

The

-b

option

to

mke2fs,

which

spec-

ifies

blocksize

of

the

filesystem

must

be

specified

in

order

for

the

superblock

locations

that

are

printed

out

to

be

accurate.

If

an

alternative

superblock

is

specified

and

the

filesystem

is

not

opened

read-only,

e2fsck

will

make

sure

that

the

primary

superblock

is

updated

appropriately

upon

completion

of

the

filesystem

check.

4

开始恢复.如果文件系统块大小为1K,

则我们可以用如下命令恢复:

#

/sbin/fsck.ext3

-b

8193

/dev/hda4

如果这个备用块(8193)也有问题,那么

可以尝试

24577(8192*3+1)

,或者是

40961

(8192*5+1).

可能您也会看出来,超级块的保存位置是按照

1,3,5,7

这样的规律的.

具体的位置在

BlockSize(8192)*N+1.

在超过

500M

的空间上是这样的规律.小于

500M

的我不知道.那位知道告诉我一下,谢谢.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8931026.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-23
下一篇2023-04-23

发表评论

登录后才能评论

评论列表(0条)

    保存