Linux 磁盘原理与管理 (分区 挂载)

来源:互联网 发布:xy苹果助手for mac 编辑:程序博客网 时间:2024/05/16 02:29

       

      目前硬盘与主机系统的联系主要有几种传输介面规格:

IDE介面
        IDE介面插槽所使用的排线较宽,每条排线上面可以接两个IDE装置,由於可以接两个装置,那为了判别两个装置的主/从架构, 因此这种磁碟机上面需要调整跳针(Jump)成为Master或slAVe!这种介面的最高传输速度为Ultra 133规格, 亦即每秒理论传输速度可达133MBytes。
Linux 磁盘原理与管理 - 朝鲜程序员 - 朝鲜程序员的博客

SATA介面

所示为SATA硬盘的连接介面插槽。 我们可以看到该插槽要比IDE介面的小很多,每条SATA连接线仅能接一个SATA装置。SATA介面除了速度较快之外, 由於其排线较细小所以有利於主机机壳内部的散热与安装!目前SATA已经发展到了第二代, 其速度由SATA-1的每秒150MBytes提升到SATA-2每秒300MBytes的传输速度喔, 也因此目前主流的个人计算机硬盘已经被SATA取代了。SATA的插槽示意图如下所示:

SATA 介面的排线 (图示取自 Seagate 网站)
图2.4.5、SATA 介面的排线 (图示取自 Seagate 网站)

由於SATA一条排线仅接一颗硬盘,所以你不需要调整跳针。不过一张主机板上面SATA插槽的数量并不是固定的, 且每个插槽都有编号,在连接SATA硬盘与主机板的时候,还是需要留意一下。


  • SCSI介面

    另一种常见於工作站等级以上的硬盘传输介面为SCSI介面,这种介面的硬盘在控制器上含有一颗处理器, 所以除了运转速度快之外,也比较不会耗费CPU资源喔!在个人计算机上面这种介面的硬盘不常见啦!
  •  

           再说下磁盘原理

    Linux 磁盘原理与管理 - 朝鲜程序员 - 朝鲜程序员的博客
     
    编辑

            磁道:上图中硬盘被一圈圈分成9等分的同心圆,这些同心圆就是磁道.但打开硬盘,用户不能看到这些,它实际上是被磁头磁化的同心圆.这些磁道是有间隔的,因为磁化单元太近会产生干扰。
           扇区(磁区):每个磁道中被分成若干等份的区域.扇区是硬盘数据存储的最小单位其中磁区每个为512bytes
    Linux 磁盘原理与管理 - 朝鲜程序员 - 朝鲜程序员的博客
     
           柱面:假如一个硬盘只有上图中的3个磁盘片,每一片中的磁道数是相等的.从外圈开始,这些磁道被分成了0磁道、1磁道、2磁道...具有相同磁道编号的同心圆组成面就称作柱面.为了便于理解,柱面可以看作没有底的铁 桶.从上图可以看出,柱面数就是磁盘上的磁道数.柱面是硬盘分区的最小单位.因此,一个硬盘的容量=柱面*磁头*扇区*512。
            簇:扇区是硬盘数据存储的最小单位,但操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理.每个簇可以包括2、4、8、16、32、64个扇区

    硬盘的容量=柱面*磁头*扇区*512


    整颗磁碟的第一个磁区特别的重要,因为他记录了整颗磁碟的重要资讯! 磁碟的第一个磁区主要记录了两个重要的资讯,分别是:

    • 主要启动记录区(Master Boot Record, MBR):可以安装启动管理程序的地方,有446 bytes
    • 分割表(partition table):记录整颗硬盘分割的状态,有64 bytes

            MBR是很重要的,因为当系统在启动的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行启动。 如果你要安装多重启动的系统,MBR这个区块的管理就非常非常的重要了! 一旦MBR物理实体损坏时,则该硬盘就差不多报废了

           分割表(partition table) 第二部分有64个字节,用于存放磁盘分区表.其中,每个分区的信息需要用16个字节来记录。因此,一个硬盘最多可以有4个分区,这4个分区称之为主分区扩展分区(extended)。

             扩展分区中可以继续划分逻辑分区。

    注:通常所说的"硬盘分区"就是指修改磁盘分区表,它定义了"第n个磁盘块是从第x个柱面到第y个柱面".因此,当系统要读取第n个磁盘块时,就是去读硬盘上第x个柱面到第y个柱面的信息。
    由于扩展分区只能有一个,所以这4个分区可以是4个主分区或者3个主分区加1个扩展分区,如下所示:
    P + P + P + P
    P + P + P + E

           扩展分区的目的是使用额外的磁区来记录分割资讯,扩展分区本身并不能被拿来格式化。 然后我们可以透过扩展分配所指向的那个区块继续作分割的记录。
           在linux中  
    hda1到 hda4四个号码都是保留给Primary或Extended用的, 所以逻辑分割槽的装置名称号码就由5号开始了。


    主要分割、扩展分配与逻辑分割的特性简单定义:

    • 主分区与扩展分区最多可以有四个(硬盘的限制)
    • 扩展分区最多只能有一个(操作系统的限制)
    • 逻辑分区是由扩展分区持续切割出来的分区;
    • 能够被格式化后,作为数据存取的分区为主分区与逻辑分区。扩展分区无法格式化;
    • 逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)。



    1.Linux磁盘分区格式说明

         linux分区不同于windows,

            各种接口的磁盘在Linux中的文件名分别为:

    • /dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名;
    • /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;

          安装Linux时,默认分为三个区,分别是/boot分区、/根分区和swap分区.这三个分区分别对应的盘符是hda1、hda2、hda3
         linux下硬盘设备名为
        IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个。
         SCSI,SATA,USB硬盘为sdx(x为a—z),硬盘主分区最多为4个,主分区从sdb1开始到sdb4,逻辑分区从sdb5开始,      (逻辑分区永远从sdb5开始…)设备名可以使用fdisk –l查看


    • df:列出文件系统的整体磁盘使用量;
    • du:评估文件系统的磁盘使用量(常用在推估目录所占容量)


    • df
    [root@www ~]# df  [-ahikHTm]  [目录或文件名]选项与参数:-a  :列出所有的文件系统,包括系统特有的 /proc 等文件系统;-k  :以 KBytes 的容量显示各文件系统;-m  :以 MBytes 的容量显示各文件系统;-h  :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;(human read)-H  :以 M=1000K 取代 M=1024K 的进位方式;-T  :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;-i  :不用硬盘容量,而以 inode 的数量来显示范例一:将系统内所有的 filesystem 列出来![root@www ~]# dfFilesystem      1K-blocks      Used Available Use% Mounted on/dev/hdc2         9920624   3823112   5585444  41% //dev/hdc3         4956316    141376   4559108   4% /home/dev/hdc1          101086     11126     84741  12% /boottmpfs              371332         0    371332   0% /dev/shm# 在 Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的 # (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!# 至于那个 /dev/shm 是与内存有关的挂载,先不要理他!范例二:将容量结果以易读的容量格式显示出来[root@www ~]# df -hFilesystem            Size  Used Avail Use% Mounted on/dev/hdc2             9.5G  3.7G  5.4G  41% //dev/hdc3             4.8G  139M  4.4G   4% /home/dev/hdc1              99M   11M   83M  12% /boottmpfs                 363M     0  363M   0% /dev/shm# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦!范例三:将系统内的所有特殊文件格式及名称都列出来[root@www ~]# df -aTFilesystem    Type 1K-blocks    Used Available Use% Mounted on/dev/hdc2     ext3   9920624 3823112   5585444  41% /proc          proc         0       0         0   -  /procsysfs        sysfs         0       0         0   -  /sysdevpts      devpts         0       0         0   -  /dev/pts/dev/hdc3     ext3   4956316  141376   4559108   4% /home/dev/hdc1     ext3    101086   11126     84741  12% /boottmpfs        tmpfs    371332       0    371332   0% /dev/shmnone   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_miscsunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs# 系统里面其实还有很多特殊的文件系统存在的。那些比较特殊的文件系统几乎# 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊的文件系统# 都不会占据硬盘空间喔! 范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示[root@www ~]# df -h /etcFilesystem            Size  Used Avail Use% Mounted on/dev/hdc2             9.5G  3.7G  5.4G  41% /# 这个范例比较有趣一点啦,在 df 后面加上目录或者是文件时, df# 会自动的分析该目录或文件所在的 partition ,并将该 partition 的容量显示出来,# 所以,您就可以知道某个目录底下还有多少容量可以使用了! ^_^范例五:将目前各个 partition 当中可用的 inode 数量列出[root@www ~]# df -ih Filesystem            Inodes   IUsed   IFree IUse% Mounted on/dev/hdc2               2.5M    147K    2.3M    6% //dev/hdc3               1.3M      46    1.3M    1% /home/dev/hdc1                26K      34     26K    1% /boottmpfs                    91K       1     91K    1% /dev/shm# 这个范例则主要列出可用的 inode 剩余量与总容量。分析一下与范例一的关系,# 你可以清楚的发现到,通常 inode 的数量剩余都比 block 还要多呢

    先来说明一下范例一所输出的结果信息为:

    • Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
    • 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
    • Used:顾名思义,就是使用掉的硬盘空间啦!
    • Available:也就是剩下的磁盘空间大小;
    • Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
    • Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)

            由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个命令显示结果的速度非常的快速!在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。
           另外需要注意的是,如果使用 -a 这个参数时,系统会出现 /proc 这个挂载点,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间啰!

            至于那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间! 由于是透过内存仿真出来的磁盘,因此你在这个目录底下创建任何数据文件时,访问速度是非常快速的!(在内存内工作) 不过,也由于他是内存仿真出来的,因此这个文件系统的大小在每部主机上都不一样,而且创建的东西在下次启动时就消失了! 因为是在内存中嘛!

      



    • du
    [root@www ~]# du [-ahskm] 文件或目录名称选项与参数:-a  :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。-h  :以人们较易读的容量格式 (G/M) 显示;-s  :列出总量而已,而不列出每个各别的目录占用容量;-S  :不包括子目录下的总计,与 -s 有点差别。-k  :以 KBytes 列出容量显示;-m  :以 MBytes 列出容量显示;范例一:列出目前目录下的所有文件容量[root@www ~]# du8       ./test4     <==每个目录都会列出来8       ./test2....中间省略....12      ./.gconfd   <==包括隐藏文件的目录220     .           <==这个目录(.)所占用的总量# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』# 的文件与目录所占用的硬盘空间。但是,实际显示时,仅会显示目录容量(不含文件),# 因此 . 目录有很多文件没有被列出来,所以全部的目录相加不会等于 . 的容量喔!# 此外,输出的数值数据为 1K 大小的容量单位。范例二:同范例一,但是将文件的容量也列出来[root@www ~]# du -a12      ./install.log.syslog   <==有文件的列表了8       ./.bash_logout8       ./test48       ./test2....中间省略....12      ./.gconfd220     .范例三:检查根目录底下每个目录所占用的容量[root@www ~]# du -sm /*7       /bin6       /boot.....中间省略....0       /proc.....中间省略....1       /tmp3859    /usr     <==系统初期最大就是他了啦!77      /var# 这是个很常被使用的功能~利用通配符 * 来代表每个目录,# 如果想要检查某个目录下,哪个次目录占用最大的容量,可以用这个方法找出来# 值得注意的是,如果刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr # 而 /proc 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。

            与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据, 所以上述第三个范例命令的运行会运行一小段时间!此外,在默认的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰!而, 如果你只想要知道该目录占了多少容量的话,使用 -s 就可以啦!

    至于 -S 这个选项部分,由于 du 默认会将所有文件的大小均列出,因此假设你在 /etc 底下使用 du 时, 所有的文件大小,包括 /etc 底下的次目录容量也会被计算一次。然后最终的容量 (/etc) 也会加总一次, 因此很多朋友都会误会 du 分析的结果不太对劲。所以啰,如果想要列出某目录下的全部数据, 或许也可以加上 -S 的选项,减少次目录的加总!


    磁盘的分区、格式化、检验与挂载:

    1. 对磁盘进行分割,以创建可用的 partition ;
    2. 对该 partition 进行格式化( format ),以创建系统可用的 filesystem;
    3. 若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验;
    4. 在 Linux 系统上,需要创建挂载点 ( 亦即是目录 ),并将他挂载上来;



    小标题的图示磁盘分区: fdisk
    [root@www ~]# fdisk [-l] 装置名称选项与参数:-l  :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,      则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。范例:找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已Filesystem           1K-blocks      Used Available Use% Mounted on/dev/hdc2              9920624   3823168   5585388  41% /[root@www ~]# fdisk /dev/hdc  <==仔细看,不要加上数字!The number of cylinders for this disk is set to 5005.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs   (e.g., DOS FDISK, OS/2 FDISK)Command (m for help):     <==等待你的输入!

    由于每个人的环境都不一样,因此每部主机的磁盘数量也不相同。所以你可以先使用 df 这个命令找出可用磁盘文件名, 然后再用 fdisk 来查阅。在你进入 fdisk 这支程序的工作画面后,如果您的硬盘太大的话(通常指磁柱数量多于 1024 以上),就会出现如上信息。这个信息仅是在告知你,因为某些旧版的软件与操作系统并无法支持大于 1024 磁柱 (cylinter) 后的扇区使用,不过我们新版的 Linux 是没问题啦!底下继续来看看 fdisk 内如何操作相关动作吧!

    Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍Command action   a   toggle a bootable flag   b   edit bsd disklabel   c   toggle the dos compatibility flag   d          delete a partition            <==删除一个partition   l   list known partition types   m   print this menu   n         add a new partition           <==新增一个partition   o   create a new empty DOS partition table   p       print the partition table     <==在屏幕上显示分割表   q       quit without saving changes   <==不储存离开fdisk程序   s   create a new empty Sun disklabel   t   change a partition's system id   u   change display/entry units   v   verify the partition table   w       write table to disk and exit  <==将刚刚的动作写入分割表   x   extra functionality (experts only)

          使用 fdisk 这支程序是完全不需要背命令的!如同上面的表格中,你只要按下 m 就能够看到所有的动作! 比较重要的动作在上面已经用底线画出来了,你可以参考看看。其中比较不一样的是『q 与 w』! 不管你进行了什么动作,只要离开 fdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效的意思

              好了,先来看看分割表信息吧!

    Command (m for help): p  <== 这里可以输出目前磁盘的状态Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926                         5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统Command (m for help): q# 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

    使用『 p 』可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态。这个磁盘共有 41.1GB 左右的容量,共有 5005 个磁柱,每个磁柱透过 255 个磁头在管理读写, 每个磁头管理 63 个扇区,而每个扇区的大小均为 512bytes ,因此每个磁柱为『 255*63*512 = 16065*512 = 8225280bytes 』。

    下半部的分割表信息主要在列出每个分割槽的个别信息项目。每个项目的意义为:

    • Device:装置文件名,依据不同的磁盘接口/分割槽位置而变。
    • Boot:是否为启动引导块?通常 Windows 系统的 C 需要这块!
    • Start, End:这个分割槽在哪个磁柱号码之间,可以决定此分割槽的大小;
    • Blocks:就是以 1K 为单位的容量。如上所示,/dev/hdc1 大小为104391K = 102MB
    • ID, System:代表这个分割槽内的文件系统应该是啥!不过这个项目只是一个提示而已, 不见得真的代表此分割槽内的文件系统喔!

    从上表我们可以发现几件事情:

    • 整部磁盘还可以进行额外的分割,因为最大磁柱为 5005 ,但只使用到 2052 号而已
    • /dev/hdc5 是由 /dev/hdc4 分割出来的,因为 /dev/hdc4 为 Extended,且 /dev/hdc5 磁柱号码在 /dev/hdc4 之内;

    fdisk 还可以直接列出系统内的所有 partition 喔!举例来说,鸟哥刚刚插入一个 U盘 磁盘到这部 Linux 系统中, 那该如何观察 (1)这个磁盘的代号与 (2)这个磁盘的分割槽呢?

    范例:查阅目前系统内的所有 partition 有哪些?[root@www ~]# fdisk -lDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / SolarisDisk /dev/sda: 8313 MB, 8313110528 bytes59 heads, 58 sectors/track, 4744 cylindersUnits = cylinders of 3422 * 512 = 1752064 bytes   Device Boot      Start         End      Blocks   Id  System/dev/sda1               1        4745     8118260    b  W95 FAT32

    由上表的信息我们可以看到我有两颗磁盘,磁盘文件名为『/dev/hdc 与 /dev/sda』,/dev/hdc 已经在上面谈过了, 至于 /dev/sda 则有 8GB 左右的容量,且全部的磁柱都已经分割给 /dev/sda1 ,该文件系统应该为 Windows 的 FAT 文件系统。这样很容易查阅到分割方面的信息吧!

    这个 fdisk 只有 root 才能运行,此外,请注意, 使用的『装置文件名』请不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition 呢!所以运行『 fdisk /dev/hdc1 』 就会发生错误啦!要使用 fdisk /dev/hdc 才对!那么我们知道可以利用 fdisk 来查阅硬盘的 partition 信息外,底下再来说一说进入 fdisk 之后的几个常做的工作!

    Tips:
    再次强调,你可以使用 fdisk 在您的硬盘上面胡搞瞎搞的进行实际操作,都不打紧, 但是请『千万记住,不要按下 w 即可!』离开的时候按下 q 就万事无妨啰!



    • 删除磁盘分区槽

         如何将你的 /dev/hdc 全部的分区删除,应该怎么做?

    1. fdisk /dev/hdc :先进入 fdisk 画面;
    2. p :先看一下分割槽的信息,假设要删除 /dev/hdc1;
    3. d :这个时候会要你选择一个 partition ,就选 1 
    4. w (or) q :按 w 可储存到磁盘数据表中,并离开 fdisk ;当然啰, 如果你反悔了,呵呵,直接按下 q 就可以取消刚刚的删除动作了!
    # 练习一: 先进入 fdisk 的画面当中去![root@www ~]# fdisk /dev/hdc# 练习二: 先看看整个分割表的情况是如何Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris# 练习三: 按下 d 给他删除吧!Command (m for help): dPartition number (1-5): 4Command (m for help): dPartition number (1-4): 3Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux# 因为 /dev/hdc5 是由 /dev/hdc4 所衍生出来的逻辑分割槽,因此 /dev/hdc4 被删除,# /dev/hdc5 就自动不见了!最终就会剩下两个分割槽而已喔!Command (m for help): q# 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开






    • 新增磁盘分区槽

           新增磁盘分区槽有好多种情况,因为新增 Primary / Extended / Logical 的显示结果都不太相同。 底下我们先将 /dev/hdc 全部删除成为干净未分割的磁盘,然后依序新增。

    # 练习一: 进入 fdisk 的分割软件画面中,并删除所有分割槽:[root@www ~]# fdisk /dev/hdcCommand (m for help): dPartition number (1-5): 4Command (m for help): dPartition number (1-4): 3Command (m for help): dPartition number (1-4): 2Command (m for help): dSelected partition 1# 由于最后仅剩下一个 partition ,因此系统主动选取这个 partition 删除去!# 练习二: 开始新增,我们先新增一个 Primary  的分区,且指定为 4 号看看!Command (m for help): nCommand action            <==因为是全新磁盘,因此只会问extended/primary而已   e   extended   p   primary partition (1-4)p                         <==选择 Primary 分割槽Partition number (1-4): 4 <==配置为 4 号!First cylinder (1-5005, default 1): <==启始柱面,直接按下[enter]按键决定!Using default value 1               <==启始磁柱就选用默认值!Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005): +512M# 这个地方有趣了!我们知道 partition 是由 n1 到 n2 的磁柱号码 (cylinder),# 但磁柱的大小每颗磁盘都不相同,这个时候可以填入 +512M 来让系统自动帮我们找出# 『最接近 512M 的那个 cylinder 号码』!因为不可能刚好等于 512MBytes 啦!# 如上所示:这个地方输入的方式有两种:# 1) 直接输入磁柱的号码,你得要自己计算磁柱/分割槽的大小才行;# 2) 用 +XXM 来输入分割槽的大小,让系统自己捉磁柱的号码。#    +与M是必须要有的,XX为数字Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System              /dev/hdc4                         1                                63                       506016         83           Linux# 注意!只有 4 号! 1 ~ 3 保留下来了!
    # 练习三: 继续新增一个,这次我们新增 Extended 的分区!Command (m for help): nCommand action   e   extended   p   primary partition (1-4)e    <==选择的是 Extended 喔!Partition number (1-4): 1First cylinder (64-5005, default 64): <=[enter]Using default value 64Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): <=[enter]Using default value 5005# 还记得我们在第三章的磁盘分区表经谈到过的,扩展分配最好能够包含所有# 未分割的区间;所以在这个练习中,我们将所有未配置的磁柱都给了这个分割槽喔!# 所以在开始/结束磁柱的位置上,按下两个[enter]用默认值即可!Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Device Boot      Start         End      Blocks   Id  System       /dev/hdc1                              64                            5005               39696615           5       Extended /dev/hdc4           1          63       506016   83   Linux# 如上所示,所有的磁柱都在 /dev/hdc1 里面啰!
    # 练习四: 这次我们随便新增一个 2GB 的分区看看!Command (m for help): nCommand action   l   logical (5 or over)     <==因为已有 extended ,所以出现 logical 分割槽   p   primary partition (1-4)p   <==偷偷玩一下,能否新增主要分割槽Partition number (1-4): 2No free sectors available   <==肯定不行!因为没有多余的磁柱可供配置Command (m for help): nCommand action   l   logical (5 or over)   p   primary partition (1-4)l   <==乖乖使用逻辑分区吧!First cylinder (64-5005, default 64): <=[enter]Using default value 64Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048MCommand (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hdc1              64        5005    39696615    5  Extended/dev/hdc4               1          63      506016   83  Linux/dev/hdc5              64         313     2008093+  83  Linux# 这样就新增了 2GB 的分割槽,且由于是 logical ,所以由 5 号开始!Command (m for help): q# 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开

            上面的练习非常重要!您得要自行练习一下比较好!注意,不要按下 w 喔!会让你的系统损毁的! 由上面的一连串练习中,最重要的地方其实就在于创建分割槽的形式( primary/extended/logical )以及分割槽的大小了!一般来说创建区的形式会有底下的数种状况:

    • 1-4 号尚有剩余,且系统未有 extended:
      此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;

    • 1-4 号尚有剩余,且系统有 extended:
      此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分区的文件名号码;

    • 1-4 没有剩余,且系统有 extended:
      此时不会让你挑选分割槽类型,直接会进入 logical 的分区形式。

    例题:
    请依照你的系统情况,创建一个大约 1GB 左右的分区,并显示该分区的相关信息:
    答:
    鸟哥的磁盘为 /dev/hdc ,尚有剩余磁柱号码,因此可以这样做:
    [root@www ~]# fdisk /dev/hdcCommand (m for help): nFirst cylinder (2053-5005, default 2053): <==[enter]Using default value 2053Last cylinder or +size or +sizeM or +sizeK (2053-5005, default 5005): +2048MCommand (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris/dev/hdc6                                       2053                         2302                   2008093+        83    LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table.The new table will be used at the next reboot.Syncing disks. <==见鬼了!竟然需要 reboot 才能够生效!我可不要重新启动![root@www ~]# partprobe  <==强制让核心重新找一次 partition table
    在这个实作题中,请务必要按下『 w 』这个动作!因为我们实际上确实要创建这个分区嘛! 但请仔细看一下最后的警告信息,因为我们的磁盘无法卸除(因为含有根目录),所以核心无法重新取得分区表信息, 因此系统会要求我们重新启动(reboot)以升级核心的分割表信息才行

    如上的练习中,最终写入分割表后竟然会让核心无法找到分区表信息!此时你可以直接使用 reboot 来处理, 也可以使用 GNU 推出的工具程序来处置,那就是 partprobe 这个命令。这个命令的运行很简单, 他仅是告知核心必须要读取新的分割表而已,因此并不会在屏幕上出现任何信息才是! 这样一来,我们就不需要 reboot !


    • 操作环境的说明

    以 root 的身份进行硬盘的 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在进行 fdisk 的时候,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 给他卸除,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成功!


    • 注意事项:

    另外在实作过程中请特别注意,因为 SATA 硬盘最多能够支持到 15 号的分割槽, IDE 则可以支持到 63 号。 但目前大家常见的系统都是 SATA 磁盘,因此在练习的时候千万不要让你的分割槽超过 15 号! 否则即使你还有剩余的磁柱容量,但还是会无法继续进行分割的喔!

    另外需要特别留意的是,fdisk 没有办法处理大于 2TB 以上的磁盘分区槽! 这个问题比较严重!因为虽然 Ext3 文件系统已经支持达到 16TB 以上的磁盘,但是分区命令却无法支持。 硬盘也已经出到单颗 1TB ,若加上磁盘阵列 (RAID) , 高于 2TB 的磁盘系统应该会很常见!此时你就得使用 parted 这个命令了!





    小标题的图示磁盘格式化

            分区完毕后自然就是要进行文件系统的格式化!格式化的命令非常的简单,那就是『make filesystem, mkfs』 这个命令啦!这个命令其实是个综合的命令,他会去呼叫正确的文件系统格式化工具软件! 


    • mkfs
    [root@www ~]# mkfs [-t 文件系统格式] 装置文件名选项与参数:-t  :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)范例一:请将上个小节当中所制作出来的 /dev/hdc6 格式化为 ext3 文件系统[root@www ~]# mkfs -t ext3 /dev/hdc6mke2fs 1.39 (29-May-2006)Filesystem label=                <==这里指的是分区的名称(label)OS type: LinuxBlock size=4096 (log=2)          <==block 的大小配置为 4K Fragment size=4096 (log=2)251392 inodes, 502023 blocks     <==由此配置决定的inode/block数量25101 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=51589939216 block groups32768 blocks per group, 32768 fragments per group15712 inodes per groupSuperblock backups stored on blocks:        32768, 98304, 163840, 229376, 294912Writing inode tables: doneCreating journal (8192 blocks): done <==有日志记录Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 34 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了![root@www ~]# mkfs[tab][tab]mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat# 按下两个[tab],会发现 mkfs 支持的文件格式如上所示!可以格式化 vfat 喔!

    mkfs 其实是个综合命令而已,事实上如同上表所示,当我们使用『 mkfs -t ext3 ...』时, 系统会去呼叫 mkfs.ext3 这个命令来进行格式化的动作啦!若如同上表所展现的结果, 系统支持的文件系统格式化工具有『cramfs, ext2, ext3, msdoc, vfat』等, 而最常用的应该是 ext3, vfat 两种啦! vfat 可以用在 Windows/Linux 共享的 U盘 闪盘。

    例题:将刚刚的 /dev/hdc6 格式化为 Windows 可读的 vfat 格式吧!
    答:    mkfs -t vfat /dev/hdc6

    在格式化为 Ext3 的范例中,我们可以发现结果里面含有非常多的信息,由于我们没有详细指定文件系统的细部项目, 因此系统会使用默认值来进行格式化。其中比较重要的部分为:文件系统的标头(Label)、Block的大小以及 inode 的数量。 如果你要指定这些东西,就得要了解一下 Ext2/Ext3 的公用程序,亦即 mke2fs 这个命令啰!


    • mke2fs
    [root@www ~]# mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置选项与参数:-b  :可以配置每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;-i  :多少容量给予一个 inode 呢?-c  :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;      如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~-L  :后面可以接标头名称 (Label),这个 label 是有用的喔!e2label命令介绍会谈到~-j  :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

    mke2fs 是一个很详细但是很麻烦的命令!因为里面的细部配置太多了!现在我们进行如下的假设:

    • 这个文件系统的标头配置为:vbird_logical
    • 我的 block 指定为 2048 大小;
    • 每 8192 bytes 分配一个 inode ;
    • 建置为 journal 的 Ext3 文件系统。

    开始格式化 /dev/hdc6 结果会变成如下所示:

    [root@www ~]# mke2fs -j -L "vbird_logical" -b 2048 -i 8192 /dev/hdc6mke2fs 1.39 (29-May-2006)Filesystem label=vbird_logicalOS type: LinuxBlock size=2048 (log=1)Fragment size=2048 (log=1)251968 inodes, 1004046 blocks50202 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=53791948862 block groups16384 blocks per group, 16384 fragments per group4064 inodes per groupSuperblock backups stored on blocks:        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816Writing inode tables: doneCreating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done# 比较看看,跟上面的范例用默认值的结果,有什么不一样的啊?

    其实 mke2fs 所使用的各项选项/参数也可以用在『 mkfs -t ext3 ... 』后面,因为最终使用的公用程序是相同的啦! 特别要注意的是 -b, -i 及 -j 这几个选项,尤其是 -j 这个选项,当没有指定 -j 的时候, mke2fs 使用 ext2 为格式化文件格式,若加入 -j 时,则格式化为 ext3 这个 Journaling 的 filesystem 呦!

    老实说,如果没有特殊需求的话,使用『 mkfs -t ext3....』不但容易记忆,而且就非常好用啰!







    小标题的图示磁盘挂载与卸除

    挂载点是目录是进入磁盘分区(其实是文件系统)的入口。不过要进行挂载前,你最好先确定几件事:

    • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
    • 单一目录不应该重复挂载多个文件系统;
    • 要作为挂载点的目录,理论上应该都是空目录才是。

            尤其是上述的后两点!如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失
            举个例子来说,假设你的 /home 原本与根目录 (/) 在同一个文件系统中,底下原本就有 /home/test 与 /home/vbird 两个目录。然后你想要加入新的硬盘,并且直接挂载 /home 底下,那么当你挂载上新的分区时,则 /home 目录显示的是新分区内的数据,至于原先的 test 与 vbird 这两个目录就会暂时的被隐藏掉了!注意喔!并不是被覆盖掉, 而是暂时的隐藏了起来,等到新分区被卸除之后,则 /home 原本的内容就会再次的跑出来啦!

            而要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个命令。

    [root@www ~]# mount -a[root@www ~]# mount [-l][root@www ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] \ [-n]  装置文件名  挂载点选项与参数:-a  :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来-l  :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!-t  :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。      常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式),      nfs, cifs, smbfs(此三种为网络文件系统类型)-n  :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序      的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。      此时就得要使用这个 -n 的选项了。-L  :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用文件系统的标头名称      (Label)来进行挂载。最好为你的文件系统取一个独一无二的名称吧!-o  :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:      ro, rw:       挂载文件系统成为只读(ro) 或可擦写(rw)      async, sync:  此文件系统是否使用同步写入 (sync) 或异步 (async) 的                    内存机制,请参考文件系统运行方式。默认为 async。      auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto)      dev, nodev:   是否允许此 partition 上,可创建装置文件? dev 为可允许      suid, nosuid: 是否允许此 partition 含有 suid/sgid 的文件格式?      exec, noexec: 是否允许此 partition 上拥有可运行 binary 文件?      user, nouser: 是否允许此 partition 让任何使用者运行 mount ?一般来说,                    mount 仅有 root 可以进行,但下达 user 参数,则可让                    一般 user 也能够对此 partition 进行 mount 。      defaults:     默认值为:rw, suid, dev, exec, auto, nouser, and async      remount:      重新挂载,这在系统出错,或重新升级参数时,很有用!



    • 挂载Ext2/Ext3文件系统
    范例一:用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面![root@www ~]# mkdir /mnt/hdc6[root@www ~]# mount /dev/hdc6 /mnt/hdc6[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on.....中间省略...../dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6# 看起来,真的有挂载!且文件大小约为 2GB 左右啦!

           利用『mount 装置文件名 挂载点』就能够顺利的挂载了!真是方便啊! 为什么可以这么方便呢(甚至不需要使用 -t 这个选项)?由于文件系统几乎都有 superblock , 我们的 Linux 可以透过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功的套和了,就立刻自动的使用该类型的文件系统挂载起来啊! 那么系统有没有指定哪些类型的 filesystem 才需要进行上述的挂载测试呢? 主要是参考底下这两个文件:

    • /etc/filesystems:系统指定的测试挂载文件系统类型;
    • /proc/filesystems:Linux系统已经加载的文件系统类型。

    那我怎么知道我的 Linux 有没有相关文件系统类型的驱动程序呢?我们 Linux 支持的文件系统之驱动程序都写在如下的目录中:

    • /lib/modules/$(uname -r)/kernel/fs/

    例如 vfat 的驱动程序就写在『/lib/modules/$(uname -r)/kernel/fs/vfat/』这个目录下啦! 简单的测试挂载后,接下来让我们检查看看目前已挂载的文件系统状况吧!

    范例二:观察目前『已挂载』的文件系统,包含各文件系统的Label名称[root@www ~]# mount -l/dev/hdc2 on / type ext3 (rw) [/1]proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/hdc3 on /home type ext3 (rw) [/home]/dev/hdc1 on /boot type ext3 (rw) [/boot]tmpfs on /dev/shm type tmpfs (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)/dev/hdc6 on /mnt/hdc6 type ext3 (rw) [vbird_logical]# 除了实际的文件系统外,很多特殊的文件系统(proc/sysfs...)也会被显示出来!# 值得注意的是,加上 -l 选项可以列出如上特殊字体的卷标(label)

    这个命令输出的结果可以让我们看到非常多信息,以 /dev/hdc2 这个装置来说好了(上面表格的第一行), 他的意义是:『/dev/hdc2 是挂载到 / 目录,文件系统类型为 ext3 ,且挂载为可擦写 (rw) ,另外,这个 filesystem 有卷标,名字(label)为 /1 』 这样,你会解释上述表格中的最后一行输出结果了吗?


    • 挂载 CD 或 DVD 光盘
    范例三:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载![root@www ~]# mkdir /media/cdrom[root@www ~]# mount -t iso9660 /dev/cdrom /media/cdrom[root@www ~]# mount /dev/cdrom /media/cdrom # 你可以指定 -t iso9660 这个光盘片的格式来挂载,也可以让系统自己去测试挂载!# 所以上述的命令只要做一个就够了!但是目录的创建初次挂载时必须要进行喔! [root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on.....中间省略...../dev/hdd               4493152   4493152         0 100% /media/cdrom# 因为我的光驱使用的是 /dev/hdd 的 IDE 接口之故!

            光驱一挂载之后就无法退出光盘片了!除非你将他卸除才能够退出! 从上面的数据你也可以发现,因为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入任何数据到光盘当中! 另外,其实 /dev/cdrom 是个链接文件,正确的磁盘文件名得要看你的光驱是什么连接接口的环境。 以上文为例,我的光驱接在 /dev/hdd,所以正确的挂载应该是『mount /dev/hdd /media/cdrom』比较正确喔!

     

    • 格式化与挂载软盘

           软盘的格式化可以直接使用 mkfs 即可。但是软盘也是可以格式化成为 ext3 或 vfat 格式的。 挂载的时候我们同样的使用系统自动测试挂载即可!真是粉简单!如果你有软盘片的话(很少人有了吧?), 请先放置到软盘驱动器当中!底下来测试看看(软盘片请勿放置任何数据,且将写保护打开!)。

    范例四:格式化后挂载软盘到 /media/floppy/ 目录中。[root@www ~]# mkfs -t vfat /dev/fd0# 我们格式化软盘成为 Windows/Linux 可共同使用的 FAT 格式吧![root@www ~]# mkdir /media/floppy[root@www ~]# mount -t vfat /dev/fd0 /media/floppy[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on.....中间省略...../dev/fd0                  1424       164      1260  12% /media/floppy

            与光驱不同的是,你挂载了软盘后竟然还是可以退出软盘!不过,如此一来你的文件系统将会有莫名奇妙的问题发生!整个 Linux 最重要的就是文件系统,而文件系统是直接挂载到目录树上头, 几乎任何命令都会或多或少使用到目录树的数据,因此你当然不可以随意的将光盘/软盘拿出来! 所以,软盘也请卸除之后再退出!很重要的一点!


    • 挂载U盘

           请拿出你的U盘并插入 Linux 主机的 U盘 槽中!注意,你的这个U盘不能够是 NTFS 的文件系统喔! 接下来让我们测试测试吧!

    范例五:找出你的U盘装置文件名,并挂载到 /mnt/flash 目录中[root@www ~]# fdisk -l.....中间省略.....Disk /dev/sda: 8313 MB, 8313110528 bytes59 heads, 58 sectors/track, 4744 cylindersUnits = cylinders of 3422 * 512 = 1752064 bytes   Device Boot      Start         End      Blocks   Id  System/dev/sda1               1           4745        8118260    b  W95 FAT32# 从上的特殊字体,可得知磁盘的大小以及装置文件名,知道是 /dev/sda1 [root@www ~]# mkdir /mnt/flash[root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on.....中间省略...../dev/sda1              8102416   4986228   3116188  62% /mnt/flash

            如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的语系数据。 在 man mount 找到 vfat 文件格式当中可以使用 iocharset 来指定语系,而中文语系是 cp950 , 所以也就有了上述的挂载命令。

            万一你使用的是随身硬盘,也就是利用笔记型计算机所做出来的U盘磁盘时,通常这样的硬盘都使用 NTFS 格式的~ 怎办?没关系,可以参考底下这个网站:(注8)

    • NTFS 文件系统官网:Linux-NTFS Project: http://www.linux-ntfs.org/
    • CentOS 5.x 版的相关驱动程序下载页面:http://www.linux-ntfs.org/doku.php?id=redhat:rhel5

    将她们提供的驱动程序捉下来并且安装之后,就能够使用 NTFS 的文件系统了! 只是由于文件系统与 Linux 核心有很大的关系,因此以后如果你的 Linux 系统有升级 (update) 时, 你就得要重新下载一次相对应的驱动程序版本!


    • 重新挂载根目录与挂载不特定目录

            整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸除的!问题是,如果你的挂载参数要改变, 或者是根目录出现『只读』状态时,如何重新挂载呢?最可能的处理方式就是重新启动 (reboot)! 不过你也可以这样做:

    范例六:将 / 重新挂载,并加入参数为 rw 与 auto[root@www ~]# mount -o remount,rw,auto /

    重点是那个『 -o remount,xx 』的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个命令就太重要了!

            另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去!这并不是挂载文件系统,而是额外挂载某个目录的方法! 虽然底下的方法也可以使用 symbolic link 来连结,不过在某些不支持符号链接的程序运行中,还是得要透过这样的方法才行。

    范例七:将 /home 这个目录暂时挂载到 /mnt/home 底下:[root@www ~]# mkdir /mnt/home[root@www ~]# mount --bind /home /mnt/home[root@www ~]# ls -lid /home/ /mnt/home2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home[root@www ~]# mount -l/home on /mnt/home type none (rw,bind)

           看起来,其实两者连结到同一个 inode 嘛! ^_^ 没错啦!透过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入 /mnt/home 就是进入 /home 的意思喔!


    • umount (将装置文件卸除)
    [root@www ~]# umount [-fn] 装置文件名或挂载点选项与参数:-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;-n :不升级 /etc/mtab 情况下卸除。

           就是直接将已挂载的文件系统给他卸除即是!卸除之后,可以使用 df 或 mount -l 看看是否还存在目录树中? 卸除的方式,可以下达装置文件名或挂载点,均可接受啦!底下的范例做看看吧!

    范例八:将本章之前自行挂载的文件系统全部卸除:[root@www ~]# mount.....前面省略...../dev/hdc6 on /mnt/hdc6 type ext3 (rw)/dev/hdd on /media/cdrom type iso9660 (rw)/dev/sda1 on /mnt/flash type vfat (rw,iocharset=cp950)/home on /mnt/home type none (rw,bind)# 先找一下已经挂载的文件系统,如上所示,特殊字体即为刚刚挂载的装置啰![root@www ~]# umount /dev/hdc6      <==用装置文件名来卸除[root@www ~]# umount /media/cdrom   <==用挂载点来卸除[root@www ~]# umount /mnt/flash     <==因为挂载点比较好记忆![root@www ~]# umount /dev/fd0       <==用装置文件名较好记![root@www ~]# umount /mnt/home      <==一定要用挂载点!因为挂载的是目录

    由于通通卸除了,此时你才可以退出光盘片、软盘片、U盘闪盘等设备喔!如果你遇到这样的情况:

    [root@www ~]# mount /dev/cdrom /media/cdrom[root@www ~]# cd /media/cdrom[root@www cdrom]# umount /media/cdromumount: /media/cdrom: device is busyumount: /media/cdrom: device is busy

    由于你目前正在 /media/cdrom/ 的目录内,也就是说其实『你正在使用该文件系统』的意思! 所以自然无法卸除这个装置!那该如何是好?就『离开该文件系统的挂载点』即可。以上述的案例来说, 你可以使用『 cd / 』回到根目录,就能够卸除 /media/cdrom 啰!简单吧!


    • 使用 Label name 进行挂载的方法

    除了磁盘的装置文件名之外,其实我们可以使用文件系统的标头(label)名称来挂载喔! 举例来说,我们刚刚卸除的 /dev/hdc6 标头名称是『vbird_logical』,你也可以使用 dumpe2fs 这个命令来查询一下啦!然后就这样做即可:

    范例九:找出 /dev/hdc6 的 label name,并用 label 挂载到 /mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6Filesystem volume name:   vbird_logical.....底下省略.....# 找到啦!标头名称为 vbird_logical 啰![root@www ~]# mount -L "vbird_logical" /mnt/hdc6

    这种挂载的方法有一个很大的好处:『系统不必知道该文件系统所在的接口与磁盘文件名!』 更详细的说明我们会在下一小节当中的 e2label 介绍的!





    利用 GNU 的 parted 进行分割行为

    fdisk 很快的将你的进行分区,不过 fdisk 却无法支持到高于 2TB 以上的分区! 此时就得需要 parted 来处理了。

    parted 可以直接在一行命令列就完成分割,是一个非常好用的命令!他的语法有点像这样:

    [root@www ~]# parted [装置] [命令 [参数]]选项与参数:命令功能:新增分割:mkpart [primary|logical|extended] [ext3|vfat] 开始 结束分割表  :print删除分割:rm [partition]范例一:以 parted 列出目前本机的分割表数据[root@www ~]# parted /dev/hdc printModel: IC35L040AVER07-0 (ide)              <==硬盘接口与型号Disk /dev/hdc: 41.2GB                      <==磁盘文件名与容量Sector size (logical/physical): 512B/512B  <==每个扇区的大小Partition Table: msdos                     <==分割表形式Number  Start   End     Size    Type      File system  Flags 1      32.3kB  107MB   107MB   primary   ext3         boot 2      107MB   10.6GB  10.5GB  primary   ext3 3      10.6GB  15.8GB  5240MB  primary   ext3 4      15.8GB  41.2GB  25.3GB  extended 5      15.8GB  16.9GB  1045MB  logical   linux-swap 6      16.9GB  18.9GB  2056MB  logical   ext3 7      18.9GB  19.2GB  263MB   logical   linux-swap[  1 ]  [  2 ]  [  3  ] [  4  ] [  5  ]   [  6  ]

    上面是最简单的 parted 命令功能简介,你可以使用『 man parted 』,或者是『 parted /dev/hdc help mkpart 』去查询更详细的数据。比较有趣的地方在于分区表的输出。我们将上述的分割表示意拆成六部分来说明:

    1. Number:这个就是分区的号码啦!举例来说,1号代表的是 /dev/hdc1 的意思;
    2. Start:起始的磁柱位置在这颗磁盘的多少 MB 处?有趣吧!他以容量作为单位喔!
    3. End:结束的磁柱位置在这颗磁盘的多少 MB 处?
    4. Size:由上述两者的分析,得到这个分割槽有多少容量;
    5. Type:就是分区的类型,有primary, extended, logical等类型;
    6. File system:就如同 fdisk 的 System ID 之意。

    接下来我们尝试来创建一个全新的分区吧!因为我们仅剩下逻辑分区可用,所以等一下底下我们选择的会是 logical 的分区类型


    范例二:创建一个约为 512MB 容量的逻辑分区[root@www ~]# parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB# 请参考前一表格的命令介绍,因为我们的 /dev/hdc7 在 19.2GB  位置结束,# 所以我们当然要由 19.2GB 位置处继续下一个分割,这样懂了吧?[root@www ~]# parted /dev/hdc print.....前面省略..... 7      18.9GB  19.2GB  263MB   logical   linux-swap 8      19.2GB  19.7GB  502MB   logical  <==就是刚刚创建的啦!
    范例三:将刚刚创建的第八号磁盘分区槽删除掉吧![root@www ~]# parted /dev/hdc rm 8# 这样就删除了!实在很厉害!所以这个命令的下达要特别注意!# 因为...命令一下去就立即生效了~如果写错的话,会哭死~

    关于 parted 的介绍我们就到这里啦!除非你有使用到大于 2TB 以上的磁盘, 否则请爱用 fdisk 这个程序来进行分割喔!拜托拜托!


    阅读全文
    0 0
    原创粉丝点击