第八章、Linux 磁盘与文件系统管理
最近升级日期:2009/08/30

大标题的图示重点回顾
  • 基本上 Linux 的正统文件系统为 Ext2 ,该文件系统内的信息主要有:
    • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
    • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
    • block:实际记录文件的内容,若文件太大时,会占用多个 block 。
  • Ext2 文件系统的数据存取为索引式文件系统(indexed allocation)
  • 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起。
  • Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
  • data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已
  • inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均固定为 128 bytes; 每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关;
  • 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录底下文件名与其 inode 号码的对照表;
  • 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间;
  • Linux 文件系统为添加效能,会让主存储器作为大量的磁盘高速缓存;
  • 实体链接只是多了一个文件名对该 inode 号码的链接而已;
  • 符号链接就类似Windows的快捷方式功能。
  • 磁盘的使用必需要经过:分割、格式化与挂载,分别惯用的命令为:fdisk, mkfs, mount三个命令
  • 启动自动挂载可参考/etc/fstab之配置,配置完毕务必使用 mount -a 测试语法正确否;

大标题的图示本章习题:
( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
  • 情境模拟题一:复原本章的各例题练习,本章新增非常多 partition ,请将这些 partition 删除,恢复到原本刚安装好时的状态。

    • 目标:了解到删除分割槽需要注意的各项信息;
    • 前提:本章的各项范例练习你都必须要做过,才会拥有 /dev/hdc6, /dev/hdc7 出现;
    • 需求:熟悉 fdisk, umount, swapoff 等命令。

    由于本章处理完毕后,将会有 /dev/hdc6 与 /dev/hdc7 这两个新增的 partition ,所以请删除掉这两个 partition 。 删除的过程需要注意的是:

    1. 需先以 free / swapon -s / mount 等命令查阅, /dev/hdc6, /dev/hdc7 不可以被使用! 如果有被使用,则你必须要使用 umount 卸除文件系统。如果是内存置换空间,则需使用 swapon -s 找出被使用的分割槽, 再以 swapoff 去卸除他!

    2. 观察 /etc/fstab ,该文件不能存在这两个 partition;

    3. 使用『 fdisk /dev/hdc 』删除,注意,由于是逻辑分割槽,这些分割槽一定从 5 号开始连续编号,因此你最好不要从 6 号删除!否则原本的 7 号在你删除 6 号后,将会变成 6 号!因此,你应该由 7 号删除掉,再删除 6 号。

  • 情境模拟题二:由于我的系统原本分割的不够好,我的用户希望能够独立一个 filesystem 附挂在 /srv/myproject 目录下。 那你该如何创建新的 filesystem ,并且让这个 filesystem 每次启动都能够自动的挂载到 /srv/myproject , 且该目录是给 project 这个群组共享的,其他人不可具有任何权限。且该 filesystem 具有 5GB 的容量。

    • 目标:理解文件系统的建置、自动挂载文件系统与项目开发必须要的权限;
    • 前提:你需要进行过第七章的情境模拟才可以继续本章;
    • 需求:本章的所有概念必须要清楚!

    那就让我们开始来处理这个流程吧!

    1. 首先,我们必须要使用 fdisk /dev/hdc 来创建新的 partition ,由于本章之前范例的 partition 已经在上一个练习中删除, 因此你应该会多出一个 /dev/hdc6 才对:『fdisk /dev/hdc』,然后按下『 n 』,按下『Enter』选择默认的启始磁柱, 按下『+5000M』创建 5GB 的磁盘分区槽,可以多按一次『p 』看看是否正确,若无问题则按下『w』写入分割表;

    2. 避免重新启动,因此使用『 partprobe 』强制核心升级分割表;如果屏幕出现类似:『 end_request: I/O error dev fd0, sector 0 』的错误时,不要担心啊!这个说明的是『找不到软盘』,我们本来就没有软盘, 所以这个错误是可以忽略的。

    3. 创建完毕后,开始进行格式化的动作如下:『mkfs -t ext3 /dev/hdc6』,这样就 OK 了!

    4. 开始创建挂载点,利用:『 mkdir /srv/myproject 』来创建即可;

    5. 编写自动挂载的配置文件:『 nano /etc/fstab 』,这个文件最底下新增一行,内容如下:
      /dev/hdc6 /srv/myproject ext3 defaults 1 2

    6. 测试自动挂载:『 mount -a 』,然后使用『 df 』观察看看有无挂载即可!

    7. 配置最后的权限,使用:『 chgrp project /srv/myproject 』以及『 chmod 2770 /srv/myproject 』即可。

简答题部分:
  • 如果由于你的主机磁盘容量不够大,你想要添加一颗新磁盘,并将该磁盘全部分割成单一分割槽,且将该分割槽挂载到 /home 目录, 你该如何处置?
    详细的流程可以分为硬件组装、磁盘分区、格式化、数据搬移与挂载等。
    • 安装硬盘:关掉 Linux 主机电源,若为 IDE 接口时,需要处理跳针 (jump) ,放入主机后插好硬盘的扁平电缆与电源线,重新启动电源;
    • 磁盘分区:透过类似上述情境模拟二的动作,将整颗磁盘分区成单一主要分割槽,类似 /dev/sdb1 占有全部容量;
    • 格式化:透过 mkfs -t ext3 来格式化;
    • 数据搬移:由于原本的 /home 还会有数据存在,因此你可以 mount /dev/sdb1 /mnt ,再将 /home 的数据复制到 /mnt/ 中,例如:『 cp -a /home/* /mnt 』即可。复制完毕后卸除 /home 以及 /mnt
    • 重新挂载:编辑 /etc/fstab ,将 /home 所在的 filesystem 装置改为 /dev/sdb1 之类的新分割槽,然后 mount -a 测试看看是否正确,如果正确的话,才是顺利结束了这次的动作。
  • 如果扇区 /dev/hda3 有问题,偏偏他是被挂载上的,请问我要如何修理此一扇区?
    umount /dev/hda3
    fsck /dev/hda3
  • 我们常常说,启动的时候,『发现硬盘有问题』,请问,这个问题的产生是『filesystem 的损毁』,还是『硬盘的损毁』?
    特别需要注意的是,如果您某个 filesystem 里面,由于操作不当,可能会造成 Superblock 数据的损毁, 或者是 inode 的架构损毁,或者是 block area 的记录遗失等等,这些问题当中,其实您的『硬盘』还是好好的, 不过,在硬盘上面的『文件系统』则已经无法再利用!一般来说,我们的 Linux 很少会造成 filesystem 的损毁, 所以,发生问题时,很可能整个硬盘都损毁了。但是,如果您的主机常常不正常断电,那么, 很可能硬盘是没问题的,但是,文件系统则有损毁之虞。此时,重建文件系统 (reinstall) 即可! 不需要换掉硬盘啦! ^_^
  • 当我有两个文件,分别是 file1 与 file2 ,这两个文件互为 hard link 的文件,请问, 若我将 file1 删除,然后再以类似 vi 的方式重新创建一个名为 file1 的文件, 则 file2 的内容是否会被更动?
    这是来自网友的疑问。当我删除 file1 之后, file2 则为一个正规文件,并不会与他人共同分享同一个 inode 与 block ,因此,当我重新创建一个档名为 file1 时,他所利用的 inode 与 block 都是由我们的 filesystem 主动去搜寻 meta data ,找到空的 inode 与 block 来创建的, 与原本的 file1 并没有任何关连性喔!所以,新建的 file1 并不会影响 file2 呢!

大标题的图示参考数据与延伸阅读

 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室