inode与super block

MBR(Master Boot Record),主引导记录。512字节=446+64+2(446字节主引导程序(boot loader)+64字节分区表(partition table区 DPT)+2字节硬盘有效标志
磁盘的0磁道的第一个扇区称为MBR,它的大小是512字节,并分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占64字节,
硬盘中有多少分区以及每一分区的大小都记录 其中 该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码;第三部分是硬盘有效标志 ,magic number,固定为55AA,如果该标志错误,系统将不能启动 。MBR不属于任何一个操作系统,也不能用操作系统提供的操作命令来读取它。解决方法:1. 在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot来把masterboot这个小程序写到mbr里面,masterboot通常用汇编语言来编写; 2.用ROM-BIOS中提供的INT13H的2号功能来读取该扇区的内容。3.也可以用软件工具Norton8.0中的DISKEDIT.EXE来读取。
linux硬盘的组织方式为:引导区、超级块(superblock)、索引结点(inode)、数据块(datablock)和目录块(directory block)。其中超级块包含了该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置,但是索引结点中不包括文件的名字,文件名是放在目录块里的,目录块里包含有文件的名字以及次文件的索引结点编号。


一、inode块,unix文件的核心
由于在unix操作系统中,所有的资源都被当做文件来管理,因此,所有的目录、硬件设备都跟普通该文件一样,具有共同的属性,而这些属性就是保存在inode块中。
inode块中保存了一个文件系统中的去全部inode结点。也就是说,当系统创建了一个文件或添加了一个新设备时,系统就会从这个块中给这个文件分配一个inode结点。在这个结点中包含了大部分的属性,如创建、修改时间等,但特别注意的是,文件名和结点号这两个属性是不包含在这个inode结点中的。这是因为inode结点按顺序排列,所以系统内核就采用简单的算法,就可以得出inode结点号。
通过系统提供的ls命令显示文件或者目录信息的时候,就需要用这个结点中的信息。ls命令为了确定一个文件的inode结点,需要查找它所在的目录,然后读取它的inode结点,并根据inode结点得到文件属性。
正常情况下,这个结点号是不会出现什么问题的,担当意外断点或者其他发生时,有可能会出现一些故障。如可能一个inode结点在系统中已经被创建,但是其没有被正常使用,或者可能块号超出了范围,这些都会给操作系统留下安全隐患。为此,当出现意外关机或者其他意外事件时,最好系统工程师能够利用fsck系统命令来修复inode结点中的错误。
---fsck,file system check,用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。例如:使用fsck命令修复损坏的分区
                      输入root密码登陆后采用:fsck -t ext3 -r /usr/local 
                      尝试修复逻辑卷/dev/hd1:#fsck -p /dev/hd1 -y
inode表包含一份清单,其中列出了对应文件系统的所有inode编号,当用户搜索或者访问一个文件时,unix系统通过inode表查找正确的inode编号。在找到inode编号后,相关命令才可以访问该inode,并对其进行适当的更改。
例如,使用vi来编辑一个文件。当键入vi <filename>时,在inode表中找到inode编号之后,才允许您来打开该inode。在vi的编辑会话期间,更改了该inode中的某些属性,当您完成操作并键入:wq时,将关闭并释放该Inode。通过这种方式,如果两个用户试图对同一个文件进行编辑,inode已经在第一个编辑会话期间分配给了另一个用户ID(UID),因此,第二个编辑任务就要等待,直到该inode释放为止。
在inode结点中还存储着一个重要的信息,就是保持了一个包含13~15位指针元素的数组,这些指针是磁盘块区的地址,操作系统依靠这些指针定位相关的文件,并读取它。而且,在获取文件的某些属性的时候,是不需要打开文件的,此时直接利用相关的命令从inode结点中区获取。
二、超级块,文件系统的心脏
启动unix操作系统后,发现某个文件系统无法使用,很有可能就是超级块出现了问题。在超级块中保存了全局文件信息,如硬盘已用空间、数据块可用空间、inode结点信息等。一个文件系统中有哪些资源都记录在这个表中,包含i节点表和空闲块表等。
当操作系统启动后,系统内核会把超级块中的内容复制到内存中,并周期性的利用内存里的最新内容去更新硬盘上的超级块中的内容。由于这个更新存在一个时间差,为此内存中的超级块信息与硬盘中的超级块信息往往只有在开机与关机的某个特定时刻是同步的,其他时间都是不同步的。
假设当操作系统意外宕机或者由于断点而造成的意外事故时,内存中的超级块信息没有及时保存到硬盘中,此时文件系统的完整性就会受到破坏。轻者导致刚建立的丢失,重者导致文件系统的瘫痪。这种情况下,系统工程师往往需要利用系统提供的sync命令在系统出现故障的那一刻把内存中的内容复制到磁盘上。这个过程往往操作系统会自动完成,这正是unix比windows稳定的一个重要原因。
sync命令,更新inode表,并将缓冲文件写到硬盘中。sync命令运行sync子例程。如果必须停止系统,则运行sync命令以确保文件系统的完整性。sync命令将所有未写的系统缓冲区写到磁盘中,包含已修改的inode、已延迟的块I/O和读写映射文件。当操作系统重新启动的过程中,系统内核会对两者进行比较,根据他们之间的差异,给文件系统打上干净或者脏的标签,这个信息也是存储在文件系统的超级块中。
除了sync命令来保证硬盘上的内容不会比内存里的内容更新外,还提供了一个和磁盘阵列类似的安全机制。操作系统会将多个超级块内容保存到硬盘的不同区域。当一个超级块出现问题时,操作系统会自动采用另外一个超级块。等到系统正常运行后,系统内容就会把可用的超级块去替换那个故障的超级块。只要有一个超级块可用,那么文件系统和操作系统就可以正常挂载和启动,提高了unix操作系统的稳定性。


http://my.oschina.net/lintur/blog/31954

扩展:linux引导内幕 http://www.ibm.com/developerworks/cn/linux/l-linuxboot/

你可能感兴趣的:(inode与super block)