|
最近升级日期: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 。
删除的过程需要注意的是:
- 需先以 free / swapon -s / mount 等命令查阅, /dev/hdc6, /dev/hdc7 不可以被使用!
如果有被使用,则你必须要使用 umount 卸除文件系统。如果是内存置换空间,则需使用
swapon -s 找出被使用的分割槽,
再以 swapoff 去卸除他!
- 观察 /etc/fstab ,该文件不能存在这两个 partition;
- 使用『 fdisk /dev/hdc 』删除,注意,由于是逻辑分割槽,这些分割槽一定从 5
号开始连续编号,因此你最好不要从 6
号删除!否则原本的 7 号在你删除 6 号后,将会变成 6 号!因此,你应该由 7 号删除掉,再删除 6 号。
- 情境模拟题二:由于我的系统原本分割的不够好,我的用户希望能够独立一个 filesystem 附挂在 /srv/myproject 目录下。
那你该如何创建新的 filesystem ,并且让这个 filesystem 每次启动都能够自动的挂载到 /srv/myproject ,
且该目录是给 project 这个群组共享的,其他人不可具有任何权限。且该 filesystem 具有 5GB 的容量。
- 目标:理解文件系统的建置、自动挂载文件系统与项目开发必须要的权限;
- 前提:你需要进行过第七章的情境模拟才可以继续本章;
- 需求:本章的所有概念必须要清楚!
那就让我们开始来处理这个流程吧!
- 首先,我们必须要使用 fdisk /dev/hdc 来创建新的 partition
,由于本章之前范例的 partition 已经在上一个练习中删除,
因此你应该会多出一个 /dev/hdc6 才对:『fdisk /dev/hdc』,然后按下『
n 』,按下『Enter』选择默认的启始磁柱,
按下『+5000M』创建 5GB 的磁盘分区槽,可以多按一次『p
』看看是否正确,若无问题则按下『w』写入分割表;
- 避免重新启动,因此使用『 partprobe 』强制核心升级分割表;如果屏幕出现类似:『
end_request: I/O error dev fd0, sector 0 』的错误时,不要担心啊!这个说明的是『找不到软盘』,我们本来就没有软盘,
所以这个错误是可以忽略的。
- 创建完毕后,开始进行格式化的动作如下:『mkfs -t ext3 /dev/hdc6』,这样就 OK 了!
- 开始创建挂载点,利用:『 mkdir /srv/myproject 』来创建即可;
- 编写自动挂载的配置文件:『 nano /etc/fstab 』,这个文件最底下新增一行,内容如下:
/dev/hdc6 /srv/myproject ext3 defaults 1 2
- 测试自动挂载:『 mount -a 』,然后使用『 df 』观察看看有无挂载即可!
- 配置最后的权限,使用:『 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 呢!
参考数据与延伸阅读
|
|