RHEL中可能有成千上万的文件必须要存储在磁盘中;对系统管理者而言,如何管理好磁盘与文件系统,也是一门必备的学问。本章我们一起来学习RHEL的磁盘与文件系统必备的知识与技术。
2.1 磁盘的管理
2.1.1 动态磁盘参数
      每一个磁盘都会提供一些参数,通过磁盘的参数,可以修改磁盘的结构与功能。查看磁盘的参数,可以使用hdparm :
        hdparm device ...
      下面我们来查询/dev/hda磁盘参数:
      hdparm除了可以用来查看磁盘的参数外,还可以用来设置磁盘的参数:
        hdparm [options...] device
      常用的options如下表所示:    注:下表在最后附件中有下载!
        下面使用hdparm设置/dev/hda DMA状态的例子:
/dev/hda开启了DMA功能。
使用hdparm关闭/dev/hda的DMA。
再次查看是否关闭了/dev/hda的DMA。
2.2 管理分区
     在RHEL系统中,有几项工具来管理磁盘中的分区。
fdisk :  这是最广为人知的分区管理工具。fdisk使用交谈的方式,来进
           行分区管理的工作。
sfdisk :  其实是fdisk姊妹产品,只是fdisk是以交谈的方式管理分区
           的;而sfdisk则是以命令列的参数方式来管理我们的分区。
parted :  这是GNU计划中分区编辑工具。与fdisksfdisk相比,parte
           -d还允许调整分区的大小。
    下面我仅以常用的fdisk作为分区管理工具来学习。
1、fdisk的语法:
         fdisk简单语法为:
         fdisk   device
    上面的device为要管理分区的硬盘设备文件名。
     fdisk是一个交互式(Interactive)的分区管理工具,也就是在执行fdisk命令后,必须输入fdisk所提供的命令,fdisk才会执行指定的动作,fdisk执行后可使用的命令如下表所示:  注:下表在最后附件中有下载
下面来看看执行fdisk的例子:
执行fdisk时,没有指定参数,则显示其简短的使用说明。
执行fdisk /dev/hda 时,以便于利用fdisk 管理/dev/hda
执行fdisk期间,若不清楚该下一步输入什么命令,则输入m,就会显
   示 fdisk的命令列表。
输入q命令,则为退出且不保存。
2、查看分区
    查看某一个硬盘的分区信息,用两种方式:
执行fdisk后,再输入p命令。
shell中直接执行fdisk -l 命令。
执行fdisk查询。
使用p命令,显示/dev/hda磁盘的分区表。
输入q命令,则为退出且不保存。
直接使用fdisk查询/dev/hda磁盘的分区表。
        当查看分区资料时,fdisk会先显示下面的信息,此为该磁盘的基本信息。
硬盘的设备名称。
硬盘的实际大小。
该硬盘有多少个磁面。
该硬盘每个磁道有多少个扇区。
磁柱的数量。
每一个磁柱的大小,也可以视为分区数据表中每一个单位的大小。
3、添加分区
     若要在一个磁盘上生成一个新的磁盘分区,可以在fdisk中使用n命令来添加磁盘分区。此时要提供下面两项信息。
分区开始的磁柱编号。
分区拥有的磁柱数量。
     下面来用fdisk命令添加一个100MB的分区的例子:
执行fdisk /dev/hda,便于fdisk管理/dev/hda
查询目前有哪些分区。
使用n命令,添加一个扩展分区。
再输入e,即为extended
输入该分区开始的磁柱编号。此处没有指定开始磁柱编号,而是回
   车,意即为第一个可用的磁柱。也就是默认值1491
输入该分区的结束磁柱编号,此处也是回车,也就是默认值5221
使用p命令,显示/dev/hda磁盘的分区表。
验证了此分区是扩展分区。
使用n命令,在扩展分区中建立一个逻辑分区。
输入该分区开始的磁柱编号。此处没有指定开始磁柱编号,而是回
   车,意即为第一个可用的磁柱。也就是默认值1504
输入该分区的结束磁柱编号,此处输入:+100M后,再回车。
    分区的大小可以直接指定:
+size:  直接指定分区使用size个磁柱。
+sizek:  直接指定分区为size kB
+sizeM:  直接指定分区为size MB
    注:若直接指定分区大小,一定要记得加上“+”这
个符号,否则fdisk将自动视为磁柱编号。若没有指定分区的大小,fdisk也会自动以可用磁柱的最后一个作为默认值。
使用p命令,显示/dev/hda磁盘的分区表。
验证了是否生成了正确的分区。
  思考:如何添加一个分区为100MB,结果为所示的分区。
因为我们修改了分区数据表的内容,则必须使用w命令来将修改的数
  据写入到磁盘中。
此处提示我们要重新启动系统,让刚刚生成的分区生效。
4、删除分区
     fdisk中的d命令来删除分区,在此之前一定要确认该 分区没有重要数据,否则分区一经删除,该分区的上的文件可能就无法抢救。
      下面来使用fdisk命令删除分区:
设备名为/dev/hda6
输入d命令,告之fdisk要删除某一个分区。
输入要删除的分区编号,此处仅需输入号码即可。
使用p命令,显示/dev/hda磁盘的分区表。
验证是否真的删除了/dev/hda6
最后当然是要保存且重启RHEL5,以便更新分区数据表。
5、修改分区系统标识符
     不同的分区可以存储不同的操作系统的文件数据, 因此,每一个分区还得记录这个分区上存储的是哪一 种文件系统(File System)。这个用来记录分区用途 的信息,我们称之为分区系统标识符(Partition systemId)。目前的分区系统标识符是一个16进制的数值,如果想要知道fdisk工具支持哪些分区标识符,可以在fdisk中使用l命令,列出目前使用的fdisk支持的所有分区标识符清单。
       初看上面这么多系统标识符,其实常用的没有几个。如下表所示:
           修改分区的系统标识符,先执行fdisk后,再输入t命令进行修改。
      下面我们来看看如何修改分区系统标识符:
此处的/dev/hda5这个分区的系统标识符是83,系统是Linux
执行t命令。
指定要修改的分区编号。
直接指定新的系统标识符是82
fdisk提示新的标识符数据已经修改为82Linux swap/Solaris)。
验证系统标识符确实变成了82
最后保存且重启RHEL5后,则生效。
2.3  Linux常见的文件系统
     目前的Linux内核支持了数十种文件系统,分类为:
Linux 专用文件系统
     针对RHEL执行所需的环境量身打造的,归类为“Linux 专用文件系统”。
支持其他平台的文件系统
      为了让RHEL可以直接调用其他系统的文件,RHEL也提供一些其他平台的文件系统,如:msdosvfatntfsudf等。
系统运行类的文件系统
        为了满足RHEL的特殊功能而设计的,此类称之为“系统运行类的文件系统”。常见的有:procfsdevfstmpfs等。
网络文件系统
       通过网络调用另外一台PC的磁盘空间的文件系统,统称为网络文件系统。常见的有:NTFSsmbfsAFS等。
2.4  制作文件系统
      若磁盘没有提供文件系统,则RHEL就无法通过文件系统使用磁盘空间。因此,要使用磁盘空间,就必须在该磁盘空间上建立文件系统(Make File System)。
       在制作文件系统过程中,会破坏原先磁盘中的文件系统数据,将使原先文件系统中的文件全部消失。故,在制作文件系统之前,确认磁盘空间中没有重要的资料。否则,损失就大了,请务必特别小心。
        制作文件系统前必须准备下面两项内容:
一个磁盘空间:制作文件系统是以磁盘空间为单位的,必须要准备好一个磁盘空间,才能在上面制作文件系统。
决定要制作成为何种文件系统:必须在开始制作文件系统前,先决定好要在该磁盘上建立何种文件系统。
        在RHEL中制作文件系统,使用mkfs命令,语法如下:
         mkfs  [-t  fstype]  [device]  [blocks]
          下面我们来使用mkfs制作/dev/hda5的文件系统:
mkfs/dev/hda5制作文件系统,此处没有加任何参数,故mkfs采用默认值ext2文件系统且为hda5所有空间
加了 -t  msdos参数,在/dev/hda5上建立msdos文件系统了。
2.5  挂载文件系统
    在RHEL中,整个系统只会有一个根目录,不允许有第二个以外的根目录。故要在RHEL系统中使用某个磁盘空间的根目录与其中所有文件,就必须将该文件系统挂载到文件系统的某一个目录下。
      挂载文件系统的命令是 mount,语法如下:
       mount [-a]
或者
       mount [-t  fstype] [-o  mount_options] [-device] [mount_pointer]
      执行mount时,没有指定参数,则表示要查看目前的挂载数据表。mount常用参数见下表:
     好啦,我们来看看如何使用mount命令:
建立/mnt/tmp/目录,作为挂载点。
查看/mnt/tmp/的内容,目前为空的,表示没有任何文件资料。
使用mount命令,将/dev/hda5分区的文件系统挂载到/mnt/tmp/
再次查看/mnt/tmp/,结果显示有一个lost+found的目录,即存放在/dev/hda5分区中的文件系统。
2.5.1  挂载数据表
        如何才能知道RHEL共挂载了哪些文件系统?其实非常简单,直接使用mount命令,不加任何参数即可。
由上述数据,可知是以下列的格式显示文件系统的挂载信息。
    device  on  mount_pointer   type  fstype  (mount_options)
    其中的每一个字段说明如下:
device :  文件系统的设备文件名。若device显示为
                   none :  则表示不是实体的磁盘空间。
mount_pointer :  挂载点的路径名称。
fstype :  文件系统的类型。
mount_options :  挂载时的参数。
    除此之外,每挂载一个文件系统的时候,RHEL会自动将挂载的信息加入到/etc/mtab文件中;而卸载一个文件系统时,RHEL也会自动删除/etc/mtab中相关的记录。所以,另一种查看目前文件系统挂载信息的方法,就是直接读取/etc/mtab文件。
         不过,/etc/mtab会以/etc/fstab文件的格式显示目前的挂载信息。
2.5.2  挂载参数
      使用mount挂载文件系统时,可以指定挂载的参数来修改文件系统的功能。挂载参数分为:共享挂载参数和文件系统特定的挂载参数。
1、共享挂载参数
      共享挂载参数可以用在任何文件系统上,而且大部分是两两一组,同一组的参数通常是互斥的;也就是说如果你使用了其中一个,就不能使用同一组的另外一个参数。例如:ro/rw就是一组共享挂载参数,若使用ro,就不能使用rw
           另外,有一个名为defaults的共享挂载参数,即使用mount时没有加任何参数,defaults这个挂载参数等于rw、suid、dev、exec、auto、nouser、async几个参数的组合。
2、文件系统特定挂载参数
      它仅适用于某文件系统,我们称之为文件系统特定挂载参数。
3、指定与修改挂载参数
      改变文件系统参数有两种方式:
执行mount时,直接指定 -o  mount_options参数。
使用mount  -o  remount,mount_options修改挂载参数。
     方法⑴:仅适用新挂载文件系统时,若已经挂载,则先卸载,再使用方法⑴重新挂载一次;
   方法⑵:不需要卸载,直接修改文件系统的挂载参数。
   下面来举一个例子,修改挂载参数:
使用mount命令,直接把/dev/hda5挂载到/mnt/tmp/目录中,因未指定参数,故使用defaults作为挂载参数。由于defaults包含rw,所以/dev/hda5应为可读可写的。
验证/dev/hda5是否为rw的状态。显然是。
当使用touch /mnt/tmp/file1时,没有报错信息,说明已经顺利建立了/mnt/tmp/file1 。
卸载/dev/hda5文件系统后,再使用mount挂载/dev/hda5到/mnt/tmp/中。此时参数为ro,所以/dev/hda5的读写状态是只读取的。
果然,挂载数据表中显示的的确是ro
试着生成/mnt/tmp/file2文件,RHEL告诉我们这是一个只读文件系统,当然无法生成/mnt/tmp/file2文件了。
那我们就用mount -o remount 的技巧,在不卸载/dev/hda5的情形下,直接修改/dev/hda5的挂载参数再度成为可读可写。
修改后,/dev/hda5的挂载参数就变成了rw
当然,/mnt/tmp/file3就可以被生成出来了。