从grub rescue> 问题解决,温习操作系统中文件系统的相关内容

一、问题描述


实验室分配给自己一台新主机,i5配置。安装的是双系统:Windows和Ubuntu。开机时首先出现grub引导界面,然后选择对应的操作系统,进入即可。

第一次从Windows进去后,发现E盘比较大。为了方便管理,想利用分区工具将其一分为二。点击确认分区按钮时,想到这台主机上安装着双系统,这样贸然操作,会不会导致什么问题呢?再一想,毕竟系统没有安装在E盘上,就是有什么问题,启动文件肯定在的,总有办法解决,或许还可以多从问题实践中学习一点。于是就点了确认。

果然,重启后出现

grub rescue >

不能进入grub引导画面了。想起当年大三操作系统课上,老师提到过“墨菲定理”:Anything that can go wrong will go wrong。

这是命令行模式,对于习惯了linux命令行操作的人来说,不是那么恐怖。开始查吧,找找可以执行哪些命令。


二、问题解决


首先,这是因为grub2的配置文件损坏,进入了救援模式。grub2分为两部分,一般的,一部分会写在mbr上,mbr即主引导记录,Master Boot Record,用来引导计算机;另一部分写在某个分区的/boot/grub目录(如果/boot单独分区,则直接写在对应分区的/grub目录)里面。由于上述操作,致使grub2的mbr里面的那一部分,找不到分区上的/grub目录里面的那一部分了。

在救援模式下只有很少的命令可以用:set,ls,insmod,root,prefix。常在Linux下操作的人应该很容易知道每个命令的含义。

1、使用ls命令,查看所有磁盘的分区信息


grubrescue>ls 回车

(hd0)(hd0,msdos11) (hd0,msdos10) ...(hd0,msdos1)


2、使用ls命令,寻找boot目录


ls (hd0,X)/boot/grub 回车

按照第一步罗列出来的分区,依次查找。正常情况下,会列出来几百个文件,很多文件的扩展名是.mod和.lst和.img,还有一个文件是grub.cfg。我的是在第一个(hd0,msdos11)找到的,显示了文件夹中的文件,则表示Linux安装在这个分区。

说明:如果/boot单独分区,则直接写在对应分区的/grub目录,使用ls (hd0,X)/grub 命令。


3、临时关联grub两部分


grub rescue>set root=(hd0,msdos11)

grub rescue>set prefix=(hd0,msdos11)/boot/grub

grub rescue>insmod /boot/grub/normal.mod

grub rescue>normal

回车,grub引导界面出现。但此时是临时性关联,要彻底解决这个问题,还需要进入Ubuntu里设置。


4、在Ubuntu中更新设置


sudo update-grub

sudo grub-install /dev/sda

设置完成。

重启,则进入grub引导界面正常。进入Windows,发现之前的磁盘分区OK。


三、操作系统中文件系统相关内容01


这个问题的出现及解决过程,让我联想到操作系统课程上,关于文件系统和磁盘的关系等相关内容。

当时主要是看书知道这回事,然后可以应对考试。现在再翻,更加深了理解。以下内容主要来源于《现代操作系统》4.3节《文件系统的实现》。

用户关心的文件如何命名,可以进行哪些操作;而实现者感兴趣的是文件和目录怎样存储、磁盘空间如何管理等。丰富的多媒体文件,如视频、音频、图片等都是存储在磁盘上的,而磁盘无非是一个个黑块块,利用电流的磁效应利用其工作。所以说,丰富的文件在磁盘上的存储,其中的道理还是很吸引人的。


3.1 文件系统的布局


当上电以后,加载内核文件和文件系统,然后我们就可以在计算机上进行多种花样的操作,此时让人觉得这个机器是有生命的。

文件系统存放在磁盘上、磁盘可以划分为一个或多个分区,每个分区有一个独立的文件系统。其实对于磁盘来说,它哪管自己的某一块处于哪个分区下。它是没有生命的,就好像一间大实验室,里面按顺序摆放了两排工作台,依次编号0,1,2...n,每个座位一个主人,这个座位的四周及有限的空间归属该人,如张三,李四。

磁盘划分为很多扇区,第0号扇区称为主引导记录(Master Boot Record,MBR),用来引导计算机。MBR的结尾是分区表,该表上记录着每个分区的起始和结束地址。就好像实验室的门上贴着座位分配表,如0号工作台属于张三。分区表中的一个分区被标记为活动分区。

计算机被引导时,过程是这样的:BIOS读入并执行MBR,MBR做的第一件事就是确定活动分区,读入该分区的第一个块,称之为引导块,然后执行它。引导块中的程序,将会装载该分区内的操作系统。为了统一,每个分区都是从一个启动块开始,即使它不含有操作系统,有可能以后有。

一个可能的文件系统布局如下图示:


磁盘分区的布局随着文件系统的不同而变化。一般包含有上图所列的项目。

第一个是超级块Superblock,它包含着文件系统所有关键参数,在计算机启动时,或者在该文件系统初次使用时,把超级块读入内存。典型信息包括:确定文件系统类型用的魔数、文件系统中数据块的数量及其他信息。

文件系统中空闲块的信息,例如可以用位图或者指针列表的形式给出。后面或许跟随着i-node节点,这是一个数据结构数组,每个文件都有一个,说明了文件的方方面面。接着可能是根目录,它存放文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。


3.2 文件的实现


文件系统实现的关键问题是记录各个文件分别使用到哪些磁盘块。有以下的几种方式。


1、连续分配 Contiguous Allocation


连续分配是将每个文件作为一连串的连续数据块存储在磁盘上。例如,在块大小为1KB的磁盘上,50KB的文件需要分配50个连续的块。

优点:实现简单,记录每个文件用到的磁盘块只需要记住第一块的磁盘地址+文件块数;读操作高新能,不需要寻道和旋转延迟。。

缺点:随时间推移,磁盘会变的零碎。删掉文件后会留下空洞,我们可以维护一个空洞列表。那么每次写入文件时,就需要控制文件大小。现在,应用于CD-ROM和DVD等一次性写光学介质里,因为文件大小事先知道,且后续使用文件大小不再改变。连续分配最初由于简单高性能(忽略用户友好性),实际应用,后来淘汰,但是随着CD,DVD出现,再次应用。作者提到了一句话很有意思:

作者的计算机哲学蕴语:History often repeats itself in computer science as newgenerations of technology occur. It is thus important to study old systems and ideas that were conceptually clean and simple because they may be applicable to future systems in surprising ways.


2、链表分配 Linked List Allocation


为每个文件构造磁盘块链表。每个块的第一个字指向下一块的地址,其他部分存放数据。这样可以充分利用每个磁盘块,顺序读取非常方便,但是随即存取相当缓慢,而且因为指针占去了一定的字节,每个磁盘块存储数据的字节数不再是2的整数次幂,但降低了系统效率。因为许多程序是以长度为2的整数次幂读取磁盘,怪异的大小使得读取一个完整的块时,需要在两个磁盘块中拼接,这样引发了额外的开销。


想起看《浪潮之巅》有一节讲到摩托罗拉,摩托罗拉推出的DSP 56K系列一开始就是24位,性能在当时的TI产品之上,但这种不伦不类的24位处理方式使用起来很别扭。后来TI推出了32位的DSP,开发产品容易,慢慢取代摩托罗拉。至于为何摩托罗拉想搞这种24位的DSP,可能是为了购买成本,但忽视了方便性。而且其早期的中央处理器68000系列中早期产品也是不伦不类的24位总线。


3、在内存中采用表的链表分配 Linked List Allocation Using a Table in Memory


取出每个磁盘块的指针字,放在内存的一个表中,可以避免上述问题。如图所示。


内存中维护的这样一个表格称为文件分配表 FAT (File AllocationTable)。在目录项中只要记录一个整数(起始块号),就可以找到文件的全部块。缺点是必须把整个表都存放在内存中,对于200GB的磁盘和1KB的块,表需要2亿项,对于大磁盘而言并不合适。


4、iNode节点


最后一个记录各个文件分别包含哪些磁盘块的方法,是给每个文件赋予一个称为i节点(index-node)的数据结构,其中列出了文件属性和文件块的磁盘地址。只有对应的文件打开时,其i节点才在内存中,若一个i节点大小为n个字节,最多k个文件同时打开时,内存中的数组大小为kn字节。

这比FAT占用的空间小,因为FAT表的大小正比于磁盘大小。iNode节点仅仅需要在内存中维护一个数组,大小正比于可能要同时打开的最大文件个数,与磁盘大小无关。

当一个文件所含的磁盘块超过了i节点所能容纳的数目时,采用的策略是最后一个磁盘地址指向一个包含附件磁盘地址的磁盘块,保证其扩容性。



参考资料:

[1] http://blog.chinaunix.net/uid-22915173-id-229241.html

[2] http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=348503

[3] 现代操作系统 Andrew S. Tanenbaum著

[4] 浪潮之巅 吴军著


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值