鸟哥的 Linux ADSL 私房菜


Linux 磁盘与硬件管理
最近更新日期:2004/03/16
 
我们在前面的档案权限介绍的章节当中,提到很多的权限与属性的观念,那么接下来要了解的是,这些属性是记录在硬盘的那个地方?这里就要特别了解到 Linux 档案系统( filesystem )是如何记录档案,与档案是如何被读取的啰!而要了解整个档案系统的观念,就不能不知道硬盘的组成组件!所以,在这个章节当中,我们由最基础的硬盘组成组件介绍起,并介绍 inode 与连结文件等基本知识,以及如何利用开机即可挂载的方式来使我们的各个 partition 可以在开机时就已经进行好挂载的动作喔!
 
认识硬盘
  :物理组成
  :磁盘分割
  :档案系统
  :Linux 的档案系统(inode)
  :Linux 档案系统的运作
查看硬盘或目录的容量df, du,
连结档的介绍ln,
切割与格 式化硬盘fdisk, mke2fs, e2label, mknod,
检查硬盘坏轨与数据同步化写入fsck, badblocks, sync,
关于软盘开机片mkbootdisk, fdformat,
各式扇区的挂载mount, 软盘, 光盘, Windows扇区, Windows 中文扇区, 新硬盘, umount,
设定开机时即挂载的方式/etc/fstab
虚拟内存 Swapswap partition, swap file, dd, mkswap, swapon, swapoff,
磁盘效能hdparm,
附录一:第二延伸档案系统 ext2
附录二:为何选择 ext3 呢
本章习题练习

认识硬盘

图三、读取 /etc/crontab 的简易流程示意。
整个读取的流程大致上就是这样,不过这里有几点小事情要提醒一下:



Linux 档案系统的运作
好了,知道了 Linux 标准的 ext2 档案系统的状况后,再来了解一下那么 Linux 系统在运作时,他是如何进行数据的存取呢?!我们知道,整个计算机主机当中,输出输入 (I/O) 最快速的应该是 CPU 的快取了,然后则是主存储器,至于硬盘的存取则比前两个慢上许多。为了让 Linux 加快整个系统的存取效率,因此在 Linux 上面通常采取异步处理( asynchronously )的方式。什么是异步呢?举例来说:当系统读取了某一个档案, 则该档案所在的 区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中,若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改 变,而且在缓冲区当中的区块数据会被标记为” Dirty “,这个时候磁盘实体区块尚未被修正!所以亦即表示,这些” Dirty “区块的数据必需回写到磁盘当中,以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。
 
为什么要这么做呢?这是因为主存储器的运作速度比起硬盘来实在是快太多了,万一系统当中有一个档案相当的大,而又持续性的存取,那么由于较慢的硬盘存取速 度,将使得整个 Linux 速度被拖垮,所以才会使用异步方式的数据处理啊!不过,也由于硬盘与主存储器的数据可能没有同步化,因此,如果 Linux 不正常关机( 例如跳电或者是当机 )时,则由于数据尚未回写入磁盘当中,会导致系统在再次开机时,会花相当多的时间进行磁盘检验,同时也有可能造成磁盘的损毁啊!



查看硬盘或目录的容量
了解了硬盘之后,接下来当然要知道我的 Linux 系统里面还剩下多少磁盘空间啰!嗯,那么在文字接口底下有什么方法可以查看目前的磁盘最大容许容量、已经使用掉的容量、目前所在目录的已使用容量?还有还 有, 怎么知道目前目录底下使用掉的硬盘容量呢?以及如何查询目前的 inodes 数目?呵呵!底下我们就来谈一谈主要的两个指令:
df 查看已挂载磁盘的总容量、使用容量与 inode 等等
du 查看档案使用掉的容量有多少?

  • df

  • 语法
    [root @tsai /root ]# df -[ikm]
    参数说明:
    -i:  使用 i-nodes 显示结果
    -k:  使用 KBytes 显示结果
    -m:  使用 MBytes 显示结果
    范例:
    [root @test /root ]# df -k       <==以 KB 显示磁盘空间
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda1              2118832    904600   1106600  45% /
    /dev/hda3               497861     37525    434632   8% /disk1
    none                     31220         0     31220   0% /dev/shm
    /dev/hda5               101089      4127     91743   5% /proxy1
    /dev/hda6               101089      4127     91743   5% /proxy2
    /dev/hda2              1004052     38360    914688   5% /var
    /dev/fd0                  1423      1405        19  99% /mnt/floppy
    说明
    这是用来显示目前磁盘空间的指令!需要注意的是,由于我们的档案或者是外挂的磁盘都是加在『 / 』底下,所以当根目录没有空间的时后,嘿嘿!你的 Linux 系统大概就是挂了吧~(说个笑话!当初 我们系上有个研究生在管理 Sun 的工作站,是别研究室的,他的硬盘明明有好几 GB ,但是就是没有办法将几 MB 的数据 copy 进去,他就去跟老板讲说机器坏了!嘿!明明才来维护过几天而已为何会坏了!结果老板将维护商叫来骂了 2 小时左右吧!后来,维护商发现原来硬盘的『总空间』还有很多,只是某个扇区填满了,偏偏该研究生就是要将数据 copy 去那个扇区!呵呵!后来那个研究生就被命令『再也不许碰 Sun 主机』了~~)当然啰!你可以将你的数据放置在加挂的硬盘中, 那么如何知道目前哪一个磁盘还有多少空间呢?!
     
    这里要请大家再复习一下,我们的硬盘扇区规划中, primary 扇区每一颗硬盘只允许 4 个,其它的就放置在 Extended 扇区中了!而,硬盘的代号与 IDE 的插槽是有关系的!如果忘记了,那就回去安装 Linux 那一章复习一下吧!好了!假设我只有一棵硬盘,且放在 IDE 的 mater ,那么我的硬盘就是 /dev/hda 啰!而在这颗硬盘中的分割扇区就可以由 /dev/hda1 开始向上加!
     
    OK,那么使用 df -k 之后,出现的上面的数据中,可以知道我的硬盘更分为 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5 与 /dev/hda6 ,咦! /dev/hda4 跑去哪里了!呵呵!其实 /dev/hda4 通常就是 Extended 扇区啦!而后面的 /dev/hda5, /dev/hda6 等扇区就是由 /dev/hda4 所切出来的!所以 /dev/hda5 + /dev/hda6 = /dev/hda4 !当然,如果还有没有显示出来的,例如 Swap ,则 /dev/hda4 还有可能更大呦!
    那么来解释一下上面的数据吧! 另外,需要注意的是,有的时后某些系统会出现 /proc 这个扇区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存 当中』的,所以当然没有占任何的硬盘空间啰!
     

  • du

  • 语法
    [root @test /root ]# du [-abckms] [目录名称]
    参数说明:
    [目录名称] 可以省略,如果省略的话,表示要统计目前所在目录的档案容量
    -a   :全部的档案与目录都列出来!默认值是指列出目录的值!
    -b   :列出的值以 bytes 输出
    -c   :最后加总 total !
    -k   :列出的值以 KB 输出
    -m  :列出的值以 MB 输出
    -s   :只列出最后加总的值!
    范例:
    [root @test /root]# du -m    <==列出 /root 底下的目录与档案所占的容量以 MB 输出
    [root @test /root]# du -s /home <==将 /home 底下的目录与档案的容量加总后输出,这里只会输出总容量!
    说明
    在 Windows 底下可以使用档案总管来管理你的磁盘,在 Linux 底下也可以轻易的以 du 来知道目前磁盘的档案容量耶!在预设的情况下,容量的输出是以 KB 来设计的,如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰!而,如果你只想要知道该目录占了多少容量的话,呵呵,使 用 -s 就可以啦



    连结档的介绍:
    什么是连结档呢?其实连结档有点类似 Windows 底下的『快捷方式』!也就是很多的连结档案( link file )其实都指向同一个来源档案( source file )!不过,在所有的档案类型当中,连结档算是比较难理解的一部份了!因为连结档还分成 Hard link 与 symbolic link 两种,这两种连结档在架构上是完全不一样的咚咚,底下就来好好的谈一谈先!
     

    Hard Link

    Symbolic Link
    相对于 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的档案,而这个档案会让数据的读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』,会一直说『无法开启某档案!』。这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode 与 block 喔!
    由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了,也没有关系,只要有任何一个目录下存在着关连数据,那么该档案就不会不见!举上面的例子来说,我的 /etc/crontab 与 /home/vbird/crontab 指向同一个档案,如果我删除了 /etc/crontab 这个档案,该删除的动作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没有被变动喔!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做『目录』的 link ,所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了,说的天花乱坠,看您也差不多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!
     
    语法
    [root @test /root ]# ln [-s] [来源档] [目的档]
    参数说明:
    -s   :提供 symbolic line 的连结!
       如果直接以 ln 不加任何参数的话,那么就属于 hard link 啰!
    范例:
    [root @test /root]# mkdir test
    [root @test /root]# cd test
    [root @test test]# cp /usr/bin/passwd .

    0. 原本的信息:
    [root @test /test]# ll 
    -rw-r--r-- 1 root     root        13476 Jun 26 11:31 passwd
    [root @test /test]# du -k <==查看该目录下的占用硬盘空间
    20

    1. Hard Link 信息:
    [root @test /test]# ln passwd passwd-hard
    [root @test /test]# ll
    total 32
    -rw-r--r-- 2 root     root        13476 Jun 26 11:31 passwd
    -rw-r--r-- 2 root     root        13476 Jun 26 11:31 passwd-hard
    注意看,上面那 个数字变成 2 啰!这里说的是关连资料有两处!
    [root @test /test]# du -k
    20  <==注意看,容量并没有变大!因为是 link 档案呀!

    2. Symbolic Link 信息:
    [root @test /test]# ln -s passwd passwd-soft; ll
    -rw-r--r--    2 root     root        13476 Jun 26 11:31 passwd
    -rw-r--r--    2 root     root        13476 Jun 26 11:31 passwd-hard
    lrwxrwxrwx    1 root     root            6 Jun 26 11:37 passwd-sofe -> passwd
    注意啰!该 Symbolic Link 的档案是有容量的呦!
    注意啰, passwd-soft 会指到另外一个档案去,而且,最前面属性显示 l ,
    此外,他是一个 独立的档案!先杀掉 passwd 后,我们分别 more 一下内容:

    3. 用 more 来试试看是怎样?! 
    [root @test test]# rm passwd
    rm: remove regular file `passwd'? y
    [root @test test]# more passwd-hard
    ………(正常显 示)
    [root @test test]# more passwd-soft
    passwd-soft: No such file or directory

    说明
    要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同上面的情况,增加了 hard link 之后,可以发现 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会发生什么事情呢?呵呵! passwd-hard 的内容还是会跟原来 passwd 相同,但是 passwd-soft 就会找不到该档案啦!就是这样!了解了吗?!还有,跟 cp 也不一样呦!因为虽然 Hard Link 的档案看起来是有容量的,但是基本上还是指向原来的档案,所以啰,整体容量是没有增大的啦!
     
    而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思( Symbolic Link,较常用! )不过,需要特别注意的是, Linux 的 link 与 Windows 的快捷方式是不一样的东西!举个例子说,当你在 Windows 建立一个快捷方式时,你可以在这个快捷方式内修改任何数据,而你的原始数据并不会跟着变!不过,当你修改 Linux 下的 link 档案时,则更动的其实是『原始档』,呵呵,所以不论你的这个原始档被连结到哪里去,只要你修改了连结档,呵呵!原始档就跟着变啰!以上面为例,由于你使用 -s 的参数建立一个名为 passwd-soft 的档案,则你修改 passwd-soft 时,其内容与 passwd 完全相同,并且,当你按下储存之后,被改变的将是 passwd 这个档案!
     
    此外,如果你做了底下这样的连结:
    ln –s /bin /root/bin
    那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你做了连结档了!』所以,如果你进入 /root/bin 这个刚刚建立的连结目录,并且将其中的数据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!并不是 /root 底下的资料都是 root 的!还需要注意一下该属性才行!
     
    基本上, Symbolic link 的用途比较广,所以您要特别留意 symbolic link 的用法呢!未来一定还会常常用到的啦!



    切割与格式化硬盘:
    对于一个系统管理者 ( root ) 而言,硬盘的的管理是相当重要的一环,尤其近来硬盘已经渐渐的被当成是消耗品了.....好了,如果我们要 partition 一棵新的硬盘,要使用什么程序来工作?而如果已经 partition 好了,又要如何来格式化呢?刚刚我们提到了 inodes 这个东西,那么使用格式化 ( format ) 的软件可以怎样的来格式化好我们所需要的 inodes 的大小呢?这里我们就来谈一谈啰!
    fdisk  硬盘切割 partition 的工具
    mke2fs 就是 Linux 底下重要的 format 格式化的工具
    e2label 修改硬盘的 label (表头名称) 的工具!
    mknod  新增硬件对应文件的工具!

    检查硬盘与数据同步化写入:
    现在也建立好了新的 partition 了,也 format 好了,那么有没有其它的关于硬盘的工作需要来进行呢?有的,就是需要怎样来检查硬盘有没有坏轨呢?那个就是 fsck 这个工具的用途啦!此外,您会发现到,在 / 这个目录底下 ( 其实只要有挂载硬盘的那个目录底下都有这个目录 ) 会有一个特殊的目录,就是『 lost+found 』这个目录啦!对的!就是当你处理完 fsck 之后,如果程序有发现到任何的错误的档案,就会将该档案的数据给他丢到这个目录当中,嘿嘿!所以当你发现你的 Linux 目录当中有这个档案时,不要担心,那个是正常的啦!而且只有挂载 partition 的目录才会有这个预设的目录啰
     
    还有,由于在 Linux 系统当中,为了增加系统效能,通常系统预设就是一些数据会写在内存当中,并不会直接将数据写入硬盘里面,这是因为内存的速度要比硬盘快上若干倍呀!但 是有个问题就发生了,万一系统由于『跳电』或者是其它的莫名原因,造成系统的 shutdown 时,唉呀!怎么办?!系统就完蛋啦!所以啰,我们需要在某些特定的时候让数据直接回存到硬盘之中呀!了乎!这里提供几个惯用的指令,其中,那个 fsck 是相当重要的,请参考其用法啰!
    fsck       检查硬盘有没有坏轨的工具
    badblocks 跟 fsck 一样,但是 fsck 的功能比较强,所以这个指令可以不学!
    sync 将    内存中的数据给他同步化写入硬盘中

  • fsck

  • 语法
    [root @test /root ]# fsck [-Aar] [装置名称]
    参数说明:
    -A   :依据 /etc/fstab 的内容,将所有的装置都扫瞄一次(通常开机过程中就会执行此一指令)
    -a   :自动修复检查到的有问题的扇区,所以你不用一直按 y 啰!
    -r   :一定要让使用者决定是否需要修复,这与上一个 -a 刚好相反!
    范例:
    [root @test /root]# fsck -a /dev/hda5 <==检查 /dev/hda5 这个扇区有没有错误!
    说明
    这是用来检查与修正硬盘错误的指令。注意:通常只有身为 root 且你的系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令,可能会造成对档案的危害!通常使用这个指令的场合都是在 系统出现极大的问题,导致你在 Linux 开机的时候得进入单人单机模式下进行维护的行为时,才必须使用此一指令!另外,如果你怀疑刚刚格式化成功的硬盘有问题的时后,也可以使用 fsck 来检查一下硬盘呦!其实就有点像是 Windows 的 scandisk 啦!此外,由于 fsck 在扫瞄硬盘的时候,可能会造成部分 filesystem 的损坏,所以『要执行 fsck 的时候,请将该 partition umount 一下!』,然后再去执行!
     
    常常我们会发现,在比较老旧的机器上(例如我的 p-166),如果主机不正常的关机(例如跳电啰!),那么硬盘很可能会出现错误的状况!这个时候 Linux 就无法正常的开机!这个时候就需要输入 root 的密码,以登入单人维护模式(run level 1),然后下达 fsck -a /dev/hdxxx 来检查你的硬盘!等到确认成功之后,就使用 reboot 来重新启动吧!

  • sync

  • 语法
    [root @test /root ]# sync
    参数说明:
    例:
    [root @test /root]# sync; sync
    说明
    在正常的状况中,由于为了增加系统的效率,因此,很多时候进行中的程序产生的程序之临时文件都不会直接存至磁盘驱动器当中,而是记忆在内存当中!由于内存 的数据传递速度比磁盘驱动器快了几十倍,所以如此一来将有助于整个系统的效率!!然而这也产生了一个困扰,那就是当你的系统不正常关机的时候,可能会使得一些 已经经过改变,却还没有存入磁盘中的数据遗失(因为还在内存当中!)所以这个时候 sync 的功能就相当的大了!因为他可以直接将系统暂存在内存当中的数据回存写入磁盘当中,呵呵!很棒吧!但是需要注意你的系统核心 (kernel) 必须要有支持 sync 才行(目前几乎一定都会支持的啦!)

    关于软盘开机片:
    嗯!搞定了上面的动作了没?!好了,如果搞定了的话,现在我们来制作一个可以开机 的软盘开机片好了!怎么制作呢?呵呵!就是利用 mkbootdisk 啰!
    mkbootdisk 制作软盘开机片
    fdformat   这是用来『低阶格式化』软盘的工具

  • mkbootdisk

  • 语法
    [root @test /root ]# mkbootdisk --device /dev/fd0 `uname -r`
    参数说明:
    --device   :后面接装置!通常接的就是软盘啦 /dev/fd0 !
    范例:
    [root @test /root]# mkbootdisk --device /dev/fd0 `uname -r`   <==建立可开机软盘!!
    说明
    这是制作开机磁盘的指令,其中,『 `uname -r` 』是目前 Linux 系统所使用的核心版本,如果你有多个核心版本的话,你以可以直接输入核心版本。例如在我的系统中,旧的核心还是有保留的,所以我都会至少有两个核心,在我 管理的某部主机中,核心为 2.4.7 及 2.4.18 ,那么如果我要直接以 2.4.18 来开机的话,就可以使用
    mkbootdisk --device /dev/fd0 2.4.18
    建立软盘开机片一直是个好主意!他可以在你求助无门的时候给你莫大的帮助喔!所以,建立一个新的软盘开机片是一个好主意啦!

    各式扇区的挂载:
    要将上面我们所建立起来的硬盘或软盘正式的在 Linux 上面启用时,一定需要将他挂载上档案系统!而所谓的『挂载点』则是该硬盘所在的目录,且在该目录下的所有目录都归在 该硬盘所有!假设一个情况好了,我们的 / 为 /dev/hda1 而 /home 为 /dev/hda2 ,那么在 /home/test 底下的咚咚就也都归 /dev/hda2 这个 partition 所有啰!而需要特别留意的是,由于挂载档案系统需要挂载点,所以挂载的时候得先建立起挂载的目录才行!除此之外,如果您要用来挂载的目录里面并不是空的, 那么挂载了档案系统之后,那么原目录下的东西就会暂时的消失。举个例子来说,假设您的 /home 原本是属于根目录 / 底下的 partition 所有,底下原本就有 /home/test 与 /home/vbird 两个目录。然后你想要加入新的硬盘,并且直接挂载 /home 底下,那么当您挂载上新的 partition 时,则 /home 显示的是该 partition 的内容,至于原 先的 test 与 vbird 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉,而是 暂时的隐藏了起来,等到 partition 被 umount 之后,则该目录的内容就会再次的跑出来啦!

    设定开机时即挂载的方式:
    刚刚上面说了许多,那么可不可以在开机的时候就将我要的扇区都挂好呢?!这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过,在开始说明前,这里要先跟大家说一说系统挂载的一些限制: 好了,那么我们进入 /etc/fstab 看一看吧:
     
    [root @test / ]# more /etc/fstab
    # History:
    # ==================================================
    # When          Who     What
    # 2002/10/19    VBird   This file had been modified by me.
    # ==================================================
    # device        MountPoint      filesystem      parameters      dump    fsck
    /dev/hda1       /               ext3            defaults        1       1
    /dev/hda2       swap            swap            defaults        0       0
    LABEL=/backup   /backup         ext3            defaults        1       1
    none            /dev/pts        devpts          mode=0620       0       0
    none            /proc           proc           defaults        0       0
    /dev/hda3       /mnt/win98      vfat            defaults,iocharset=big5,codepage=950 0 0
     
    我这个人比较龟毛一点,因为 Mandrake 9.0 的 /etc/fstab 档案排列方式蛮丑的,虽然每一栏之间只要以空格符分开即可,但就是觉得丑,所以通常我就会自己排列整齐,并加上批注符号,就是 # 字号,来帮我记忆这些信息!总共有六栏,分别来谈一谈吧!
    1. 扇区或标头:就是扇区啦!不过,如果是在安装的时候有给 予一个 label (标头) 的话,那么使用 label 也可以,例如上面的 LABEL=/backup 那一行。而如果是我们增加新的扇区的话,那么这里就必须要使用『扇区』了!例如新安装一个硬盘在 /dev/hdd1 当中,那么这里就写 /dev/hdd1 啰!那么如果我还是想要使用 label 来挂载呢?!就使用 e2label 来建立 label name 啦!  e2label 的用法在前一章有说明,忘了的话,快去看看先!

    2.  
    3. 挂载的目录点:就是 mount 的挂载点啦!

    4.  
    5. 该扇区的档案格式:目前 Linux 大都使用 ext2, ext3, reiserfs 等等的,不过,如果你有使用 Windows 的档案格式的话,那么就可以使用 vfat 啰!目前支持的格式还有 iso9660( 光盘 ), msdos, minix, nfs, swap 等等的档案格式;

    6.  
    7. 档案格式参数区:这个就重要了!有哪些磁盘参数可以参考呢? 在前一章的 mount 指令里面介绍了一些些,这里再更详细的提出说明如下:

    8.  
      参数
      内容意义
      async/sync
      异步/同步
      是否允许磁盘与内存中的数据以同步写入的动作?使用 async 这个异步写入的方式会比较快速一些。
      auto/noauto
      自动/非自动
      在开机的时候是否自动挂载该扇区?既然设定在这个区域内了,当然希望开机的时 候自动挂载啰!
      rw/ro
      可擦写/只读
      让该扇区以可擦写或者是唯独的型态挂载上来,如果是 vfat 之类的扇区,您不想让 Linux 变更的话,那么使用 ro 也不错!能够提供有效的保护呢!
      exec/noexec
      可执行/不可执行
      限制在此档案系统内是否可以进行『执行』的工作?如果是纯粹用来储存数据的, 那么可以设定为 noexec 会比较安全,相对的,会比较麻烦!
      user/nouser
      允许/不许
      是否允许使用者使用 mount 指令来挂载呢?一般而言,我们当然不希望 user 身份的人能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰!
      suid/nosuid
      具有suid/没有suid
      该档案系统是否允许 SUID 的存在?一般而言,如果不是 Linux 系统的扇区,而是一般数据的 partition ,那么设定为 nosuid 确实比较安全一些!毕竟有 SUID 是蛮可怕的一件事
      usrquota
      启动使用者磁盘配额模式支持
      grpquota 
      启动群组磁盘配额模式支持!
      defaults
      同时具有 rw, suid, dev, exec, auto, nouser, async 这些功能,所以预设情况中,使用这个即可!
       
      另外,如果有兴趣的话,还可以加上类似『iocharset=big5,codepage=950』 这种额外的功能参数以启动中文编码的支持,更详细的数据可以 man mount 搜寻呢!
       
    9. 是否可以被 dump 指令备份:这一列在说明,使用 dump 指令来备份时时,该扇区是否跟着一起动作?如果没有数字的话则以 0 带入!由于我们希望有备份的功能,所以这里当然就开启( 1 )啰!

    10.  
    11. 检验扇区:这个数字在用来以 fsck 检验扇区用的!在开机与关机的时候,通常 Linux 希望检验一下扇区,所以这里需要设定一下。通常 root (就是根目录 / 啦)需要设定为 1 ,而其它的档案系统( filesystem )就设定为 1 即可!当然啰!由于 proc 及 swap 与 windows 并不需要以 fsck 来检验,所以就可以设定为 0 啰!
    所以,假如我要新增加一个 /dev/hdb1 并且挂载在 /disk2 这个目录下的话,那么我就在该档案的最底加上一行:
     /dev/hdb1      /disk2         ext2    defaults      1   1
    或者我直接在这个档案上面规划好之后,再下达: mount -a 那么程序就会自动的将 /etc/fstab 里面的信息读出,并且依据里面的情况来挂载扇区喔!如此一来,每次开机的时候都会自动的建立好对应的咚咚啦!
     
    有经验的朋友大概都还蛮清楚的,就是 /etc/fstab 写错了的时候(最常发生在 quota 设定的时候)会造成无法开机的窘境,因此,通常我们都会把自己所想要的数据给他写在 /etc/fstab 之后,以 mount  –a 驱动看看,此外,如果错误已经造成了呢?那也不要太担心,由于错误造成了,所以根目录 / 预设会变成只读属性,这个时候就得要进行 remount 的工作了,亦即下达:
     mount  –n  –o  rw,remount  /
    这样应该就可以将磁盘挂载成为可擦写了!
     
    此外,您必须了解的是, /etc/fstab 写的是您的设定文件,但是目前的系统所挂载的信息则是记录在 /etc/mtab 这个档案中喔!这个档案会实时的进行更新,如果您重新手动挂载你的档案 系统,那么这个 mtab 就会跟着变动啰

    虚拟内存 Swap:
    我们前面谈了很多各式各样的 filesystem ,不过,您晓得在安装的时候设定的那一个『虚 拟内存, swap 』要如何增加吗?举个简单的例子吧,我们的 Sun 主机上面,由于跑的程序太庞大了,通常 swap 需要开启到 1GB 左右,但是呢,有的时候还是会不够的!在 Linux 当中,如果您需要使用到很大量的虚拟内存,偏偏当初给的 swap 扇区不够大,那要怎么办呢?有什么方法可以来达成: 怎么说呢?基本上,虚拟内存就是将硬盘规划出一个区间,让内存的数据可以经由硬盘来读取罢了,那么如果有 swap file 也就够了对不对!是呀!所以这里我们使用两种方法来尝试建立一下 swap 的扩增吧!
    没错,就这么简单的将虚拟内存给他新增啰!赶快来去试试看去!

    磁盘效能:
    我们都知道目前的 IDE 硬盘主要的传输模式为 ATA 模式,最近 (2002年) 已经出到了 ATA 133 了!不过,传统上, ATA 66 就已经很厉害了!新的 IDE 硬盘也没有办法完全利用 ATA 100 呢!但是,你知道吗?有没有开启 ATA 这个传输信道的 DMA 模式,对于硬盘的存取效率差很大呦!好了!我们来测试一下磁盘的效能吧!
  • hdparm

  • 语法
    [root @test /root ]# hdparm [-cdmXTt] [装置名称] 
    参数说明:
    -c   :提供 32 位的存取模式,支持的型态有:
          -c0:关闭 32 位存取模式
          -c1:开启 32 位存取模式
          -c3:以较为特殊的 sync 模式开启 32 位存取模式(建议值)
    -d   :是否启动硬盘的 DMA 模式, 0 为关闭, 1 为开启。
    -m   :设定 multiple sector I/O 的模式,通常预设为 16 ,建议值亦为 16 。
    -X   :设定 IDE/ATA 模式的项目,支持如下的设定:
          -X34:开启 DMA mode 2       (ATA)
          -X66:开启 ultra DMA mode 2 (ATA66)
    -T   :测试暂存区 cache 的存取效能
    -t   :测试硬盘的实际存取效能 (较正确!)
    例:
    [root @test /root]# hdparm -Tt /dev/hda   <==测试 hda 这颗硬盘的 cache 与实际效能
    [root @test /root]# hdparm -d0 /dev/hda<==关闭 DMA 模式!
    [root @test /root]# hdparm -d1 -c3 -X66 /dev/hda<==开启 DMA 模式在 DMA 66 ,并且开启 32 位存取模式
    说明
    这个指令必须要 root 才能执行!此外,需要特别注意, -X 这个参数是很危险的参数设定,除非您非常了解您的硬盘架构,否则不建议自行设定,因为 manual page 上面就有说明到这一点~~不过,无论如何,目前大于 2GB 以上的硬盘至少都已经支持了 DMA 33 了!因此,使用 -X66 应该都是可行的!较常建议的硬盘 DMA 开启功能项目如下:
    hdparm -d1 -X66 -m16 -c3 /dev/hda
    另外,基本上目前的 Linux 预设都是开启 DMA 的模式,因此这个指令的功能相对的重要性就降低了!不过,有一点仍然相当的重要,就是 Linux 预设的 -c 是关闭的,亦即是 -c0 的状态,所以你可以增加上面的 -c3 来开启 32 位的存取模式呦!当然了,如果你的硬盘真的是很老旧的,那么就不要开启的好!好了!那么如何开机就启动 DMA 模式呢?!你可以将上面那一段指令写入 /etc/rc.d/rc.local 里面即可!

    附录一:第二延伸档案系统 ext2
    这里转贴一篇关于 ext2 这个 Linux 档案格式的主要特点:
     
    第二延伸档案系统(ext2)介绍 (本文摘自小红帽技术论坛
     
    自从我们开始使用计算机后,大多数的使用者都曾经使用过档案,而我们总是对关于硬盘如何正确 地储存档案感到好奇,它看起来似乎非常抽象,所以今天让我们看一看 Linux 操作系统中较新的档案系统版本『第二延伸系统( ext2 )』,并了解它各方面之用途。 
     
    这个档案系统是主要来自于Andrew Tanenbaum 所写的Minix档案系统,它也是唯一可用在免费操作系统的档案系统,称之为Minix。它后来修正为 Linux 所惯用的档案系统并称为延伸档案系统,到现在 Linux 的档案系统称为 ext2 (第二延伸档案系统),它是延伸档案系统中较新的版本并支持存取控制列(ACL)。 
     
    但是在着手研究 ext2 档案系统之前,让我们先了解档案系统中之专有名词的关联。 
    • Block (区块): 档案在磁盘中被储存在整数固定大小的区块中,那区块的大小通常是2的次方。在预设中,ext2档案系统的区块大小是4K。研究颢示,4K字节对于一磁盘 区块而言是最理想的大小,假如一个档案的大小无法达成4K字节的倍数时,那最后的磁盘区块部分就会被浪费。在最不好的例子中几乎在完整的区块中就有一位 元组被浪费掉。 
      对于这情况有一点技巧,假如我们选择了一个较大的区块,则对于小的档案而言会有一些磁 碟空间被浪费掉。另外一方面,假如我们使用一个非常小的区块,则磁盘区块数量会成指数的增加,因此对于档案而言需有更多的搜寻时间。所以,选择区块大小必 须三思而后行。 
      当一个档案被加载到内存时,那磁盘区块会被放在主存储器中之缓冲快取区,假如它们已 经变更了,区块在缓冲区中会被标记为’Dirty’,其意指的是这些区块必须先写到磁盘中来维持磁盘上的区块及在主存储器中的区块之一致性. 
    • Superblock:superblock 是在每个档案系统开始的位置,其储存信息像是档案系统的大小,空的和填满的区块,它们各自的总数和其它诸如此类的数据。要从一个档案系统中存取任何档案皆 须经过档案系统中之superblock。如果superblock损坏了,它可能无法从磁盘中去取得数据。 
  • Inode: 对于档案系统而言一个inode是在inode表格中的一个项目。Inode包含了所有档案有关的信息例如名称、大小、连接的数量、数据建立之日期,修改 及存取的时间。它也包含了磁盘区块的档案指向(pointer)。pointer是用来记录档案被储存在何处。 

  • Ext2fs公用程序
    现在让我们来看看一些标准Linux版本之ext2fsprogs公用程序 

    • e2fsck 

    • 这个程序允许我们在ext2档案系统上去执行档案系统检查,它像是Windows中之 Scandisk一样,但却是一种更有效的系统检查方式。在此,我们可以加上一个文件名称来检查上面之损坏区块。 
    警告:绝对不要在任何已挂载的档案系统上执行 e2fsck/fsck。假如我们想要去执行 fsck,我们应该卸下档案系统后再去执行 fsck(亦即需要 umount 该扇区啰)。如果不这样做,可能会让档案系统毁损。 
    • tune2fs 

    • 这允许我们去调整档案系统的参数设定。在此,我们可以设定在两个档案系统检查间之最大 挂载总数、容量标记、错误行为、变更保留的信息和许多其它参数。 
    • dumpe2fs 

    • 这个程序将ext2档案系统状态输出到标准的设备上。它对于分析问题以及存取一般关于 档案系统用法的信息是有帮助的。 
    • mke2fs 

    • 这个程序允许我们在先前尚未格式化的磁盘中,去建立一个ext2的档案系统。它提供了 许多的选项包含区块的大小、段落的大小、每一个inode的字节到多种磁盘阵列的选项。mke2fs通常在第一次安装的期间执行,并建立完成新的 root 及其它的档案系统。(就相当于 DOS 底下的 format 程序啦!)
    • badblocks 

    • 这个程序去搜寻磁盘并检查区块是否已经损坏,它通常会在新的档案系统安装程序前执行, 但请不要在挂载好的档案系统上执行。 
    在Linux档案系统中最新的版本被称为ext3,并已有 Journaling 之支援。Journaling 档案系统对于所有已完成的步骤,持有记录以及检查点,所以假使系统当机时,它可以从最后的检查点来还原档案系统。

    附录二:为何选择 ext3 呢
    在最新的 Red Hat 7.2 当中,已经舍弃了 ext2 而改用支持 Journaling 的 ext3 这一个档案格式了,那么这两个咚咚有什么不一样的呢?!底下有一篇翻译过的文章,看看吧!
     
    Red Hat Linux 7.2 为何决定采用ext3档案系统? 

    Red Hat决定在7.2版中使用ext3的格式来作为预设的档案系统在,引起相当多熟悉Linux使用者的关注,但ext3并不是唯一的,也不是众多日志式 (journaling)档案系统中最佳的。

    传统的Linux档案系统ext2,对于在相当小容量的硬盘上之小档案而言是相当的 理想。随着硬盘的容量及档案大小大幅增加,整体性能会下滑。有些原因是来自读取未有效利用的磁盘空间,有些原因是来自不正常关机或是电源中断档案系统的恢 复时间。档案系统经由e2fsck在一个1GB的硬盘做检查是毫不费力的,但相同的测试在40GB的硬盘上可能会相当的秏费时间。所以就有日志式档案系统 的诞生。 

    这些记录硬盘状态的档案称为日志。所以在不正确关机之后重新启动需要参考到日志档案 来重新回复档案系统的状态,而非将整个硬盘做扫描。同时,日志式档案系统可以有更高的硬盘空间使用效率及使数据在各种不同之档案大小中能够快速的读取及写 入。 

    Linux并不是只有一个日志式的档案系统,它有四个,或是说成三又二分之一个:  
     

    • Reiser档案系统: 依照Hans Reiser的名字而取。Reiser是众所皆知的一种新式快速记录硬盘内容的档案系统,它曾经被广泛的使用超过一年,且这个档案系统被推荐安装在 SuSE7.1版及7.2版上。 
    • JFS档案系统:经 由IBM所开发的,其设计的理念在于提供一高速的处理能力。IBM从2000年2月间开始经过一系列的测试版本,它的1.0版本已在六月底公开发表。 
    • XFS档案系统:XFS 是SGI公司在Linux上所开发的日志式档案系统,它也提供了所有以完整发展为特色的日志式档案系统。 
    • ext3档案系统:ext3 是之前所提及的二分之一日志式档案系统。为何只有一半呢?原因是ext3是一种迭在传统ext2档案系统上面并保有磁盘活动纪录的日志式档案系统。所以当 不正确关机时,档案的恢复速度会比ext2档案系统来的快。但是,因为它是被结合在ext2中,它会遭受到一些老旧系统的限制并因此不能利用所有日志式文件 案系统的完整功能。这样并非是完全不好,因为ext3分割区并没有不同于ext2档案系统,因此如ext3损毁要回到ext2档案系统却是非常的简单。 
    Red Hat是第一个采用ext3的公司,它尝试性的将Linux档案系统推向日志式档案系统。当公司计划在7.2版的第二个测试版本采用ext3时,公司中首 席核心开发者Michael K. Johnson便迅速的提供一个原理的阐述: 
    “为什么你想要从ext2转换到ext3呢?有四个主要的理由: 可利用性、数据完整性、速度及易于转换”。可利用性,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3的 日志式条件可以避免数据毁损的可能。他也指出”除了写入若干资料超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬盘读取头的移动能更有 效的进行“。然而或许决定的因素还是在Johnson先生的第四个理由中。
    “它是可以轻易的从ext2变更到ext3来获得一个强而有力的 日志式档案系统而不需要重新做格式化”他说道。”那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作 及重新格式化的动作”。

    本 章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )

    2002/07/15: 第一次完成
    2003/02/07:重新编排与 加入 FAQ
    2004/03/15:修改 inode 的说明,并且将连结档的说明移动至这个章节当中!

    2002/06/26 以来统计人数


    Designed by VBird during 2001-2004.  Aerosol Lab.