日期:2014-05-16  浏览次数:20696 次

linux 文件系统的管理 (硬盘) [ 转]
RH133—Unit4 文件系统的管理

一、系统在初始化时如何识别硬盘
1、系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件就来载入系统,这些执行文件就是MBR里前面446bytes里的boot loader 程式,而后面的16X4的空间就是存储分区表信息的位置;如下图

2、在分区表中,主要储存了以下信息:
(1)分区号,常见的分区号有以下几种:其它编号可以使用fdisk指令,再执行 l (小写L) 查看 0x5 (or 0xf) 扩展分区
0x82 Linux swap
0x83 Linux
0x8e Linux LVM
0xfd Linux RAID auto


(2)分区的起始磁柱;
(3)磁柱的总数;
所以在系统初始化时,就根据分区表中的这三项信息来识别硬盘。

二、介绍硬盘分区的相关事项
1、当主分区都用完时,可以使用扩展分区来增加额外的分区,这已在前面介绍过了,但是在Linux的kernel里:
·IDE的硬盘最多可以支持到16个分区;
·SCSI硬盘最多支持15个分区;
2、硬盘做多分区的好处:如下:
(1)从控制方面的考虑
将硬盘分成多个分区,就可以把应用程序、使用者的资料、或是一些需要有安全性的资料,分别放入不同分区中方便管理;
(2)从效率方面的考虑
因为硬盘在使用一段时间后,都分有区块不连续的情况,如果一块大容量的硬盘没有划分成多个小分区,那么硬盘在搜索信息时,因为搜索的范围非常大,所以会比较久,如果将大容量的硬盘划分多个小分区,在搜索的时候相对就会快一些;
(3)为为使用磁盘配额的功能
因为配额只能对分区做设定,所以我们可以将/home目录单独做一个分区,然后可以对这个分区做配额;
(4)从资料备份和恢复考虑
例如,/home这个目录是专门用于存放用户信息的目录,将这个目录单独设定一个分区,就可以定期就是个分区作备份工作,恢复的时候也比较方便。

三、介绍分区的管理
1、可以使用下面的指令来建立分区及查看分区
fdisk /dev/hda 建立分区   
参数:-l 查看分区
执行 fdisk 指令后,如下图:

例1:在新建分区,输入n,系统会要求输入起始的磁柱编号,默认系统会指定一个最近的未使用的磁柱号,回车后,再输入结束的磁柱号,不过根据磁柱号来算一个分区的容量不太方便,可以用“+数值K或+数值M (例:+1000M)” 这样直接以容量的表示方式来设定,这样直观一些;再执行p,就可以看到新增加的分区了;

例2:删除分区,输入d,要求输入要删除的分区号,在DEVICE字段列可以看到每个分区对应的编号,输入想要删除的分区号回车即可

以前所有操作认为没有问题,输入 w ,保存退出即可。
这时主机屏幕上会提示:
The kernel still uses old table 表示目前系统还是在使用旧的分区表;
The new table will be used at the next reboot.表示只有在下次重新开机后才会使用新的分区表;
2、使用下面的指令重新载入分区表到kernel中,这样可以不用重新开机就可以启用新的分区表。
    partprobe

四、建立文件系统(对硬盘分区进行格式化)
1、格式化指令及指令语法:
    mke2fs [参数] 要格式化的分区
例如上面的例子中,格式化hda6这个分区 mke2fs /dev/hda6
2、格式化后,会出现一些分区的相关信息,为了理解这些信息,先了解一下分区的格式:
我们使用fdisk建立的分区,不能直接用来存放资料,必须先对这个分区做格式化的工作,格式化就是将分区划分成一格一格的block及多少个Inode可以使用,而每个block就是文件系统存取资料的最小单位,所以才可以将资料存放在这些block中,而且每多个 block 会组成一个 group;如下图所示:除了boot sector 之外,第一个block 称为 super block 用来记录这个分区共有多少个block和inode 已经使用;多少block和inode等信息;

如下图所示:
13 block groups :表示这个分区被划分出了13个block group;
8192 blocks per group:表示每个group中有8192个block;
2008 inodes per group:表示每个group中有8192个inodes;
如果super block 损坏,这个分区将无法访问,所以每隔一段block 就会备份一次这个super block,如下图:
superblock backups stored on block:下面的数值就是备份super block 所在的block的位置。

3、dumpe2fs 指令查看分区的详细信息
dumpe2fs /dev/hda6 | more   查看指定分区的信息(前一页半是super block的内容,后面是每个Group的详细信息),因为所显示的内容很多所以加上了 | more 用于分页显示;
显示信息的部分说明:
Inode count:   Inode的总数量;
Block count:    Block的总数量;
Free blocks:    剩余的block数量;
Fre inodes:     剩余的Inode数量;
Filesystem features: has_journal表是为ext3文件系统
4、mke2fs格式化指令格式及参数
格式:mke2fs [参数] 要格式化的分区文件名(例:/dev/hda6)
mke2fs -j /dev/hda6
参数:
·b:设定每个block的大小,预设为1024bytes(1K),最大4096bytes(4K),如果设定太大将使用4096bytes;
·c:格式化前检查分区中是否有损坏的block;
·i :设定每个Inode的大小,例:mke2fs –i 4096 /dev/hda6
·N:直接设定Inode 的总数量;所设置的值只是接近而矣;
·m:设定在分区上,保留多少空间给root,预设保留5%;mke2fs –m 10 /dev/hda6
·L:设定分区卷标,预设不设定,通常习惯将卷标名称设为同挂载点目录名称相同方便记忆;mke2fs –L data /dev/hda6
·j:建立成为ext3文件系统,也就是加入日志功能;

五、介绍将ext2格式的分区转成ext3
1、ext2与ext3的区别如下:
(1)ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal(日志)的记录;
(2)在ext2中,写资料到硬盘中时,先将资料写入缓存中,当缓存写满时才会写入硬盘中;
(3)在ext3中,写资料到硬盘中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬盘,完成后再通知Journal,资料已完成写入工作;
(4)是否有Journal的差别:
在ext2中,系统开机时会去检查有效位(Valid bit),如果值为1,表示系统上次有正常关机;如果为0,表示上次关机未正常关机,那系统就会从头检查硬盘中的资料,这样时间会很长;
在ext3中,也就是有Journal机制里,系统开机时检查Journal的资料,来查看是否有错误产生,这样就快了很多;
(5)tune2fs –j /dev/hda6 将ext2转换成ext3
2、在ext3里有三个Journal的模式:
(1)ordered:预设模式,只记录Inode-table里的信息;
(2)Journaled:记录资料本身的信息,需要大量空间来做记录;
(3)writeback:不记录信息,可提供较好的效能;

六、介绍在分区里设定相应的卷标
1、前面分区的表示法一直在使用 hda1 或 sda1类似这样的表示法,其实也可以用卷标的表示法,这样更好便记忆。
2、设定及查看卷标的指令格式及说明如下:
    e2