• 磁盘的分区、格式化、挂载(转)


    磁盘分区、格式化、挂载
    磁盘分区
        新增分区
        查询分区
        删除分区
    磁盘格式化
        mkfs
        mke2fs
    磁盘挂载与卸载
        mount
        umount

    磁盘的分区、格式化、挂载

    对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来硬盘已经渐渐的被当成是消耗品了 ..... 如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢:

    1. 对磁盘进行分区,以创建可用的 partition ;
    2. 对该 partition 进行格式化( format ),以创建系统可用的 filesystem;
    3. 在 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):     <==等待你的输入!
    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』就是动作生效的意思。所以,你可以随便玩 fdisk ,只要离开时按下的是『q』即可。

     新增磁盘分区

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

    开始新增,我们先新增一个 Primary  的分区槽,且指定为 4 号看看

    复制代码
    [root@www ~]# fdisk /dev/hdc
    Command (m for help): n
    Command 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): 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/hdc4               1          63      506016   83  Linux
    # 注意!只有 4 号! 1 ~ 3 保留下来了!
    复制代码

    继续新增一个,这次我们新增 Extended 的分区槽好了

    复制代码
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    e    <==选择的是 Extended 喔!
    Partition number (1-4): 1
    First cylinder (64-5005, default 64): <=[enter]
    Using default value 64
    Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): <=[enter]
    Using default value 5005
    # 还记得我们在第三章的磁盘分区表曾经谈到过的,扩展分配最好能够包含所有
    # 未分区的区间;所以在这个练习中,我们将所有未配置的磁柱都给了这个分区槽喔!
    # 所以在开始/结束磁柱的位置上,按下两个[enter]用默认值即可!
    
    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              64        5005    39696615    5  Extended
    /dev/hdc4               1          63      506016   83  Linux
    # 如上所示,所有的磁柱都在 /dev/hdc1 里面啰!
    复制代码

    这次我们随便新增一个 2GB 的分区槽看看

    复制代码
    Command (m for help): n
    Command action
       l   logical (5 or over)     <==因为已有 extended ,所以出现 logical 分区槽
       p   primary partition (1-4)
    p   <==偷偷玩一下,能否新增主要分区槽
    Partition number (1-4): 2
    No free sectors available   <==肯定不行!因为没有多余的磁柱可供配置
    
    Command (m for help): n
    Command action
       l   logical (5 or over)
       p   primary partition (1-4)
    l   <==乖乖使用逻辑分区槽吧!
    First cylinder (64-5005, default 64): <=[enter]
    Using default value 64
    Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048M
    
    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              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 就能够离开啰~
    复制代码

    一般来说创建分区槽的形式会有底下的数种状况:

    • 1-4 号尚有剩余,且系统未有 extended:
    • 此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;
    • 1-4 号尚有剩余,且系统有 extended:
    • 此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分区槽的文件名号码;
    • 1-4 没有剩余,且系统有 extended:
    • 此时不会让你挑选分区槽类型,直接会进入 logical 的分区槽形式。

    查看分区表信息

    复制代码
    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 之内;

    查询系统内的所有 partition 

    复制代码
    [root@www ~]# fdisk -l
    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
    
    Disk /dev/sda: 8313 MB, 8313110528 bytes
    59 heads, 58 sectors/track, 4744 cylinders
    Units = 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 才对!

    删除磁盘分区

    删除磁盘分区,应该怎么做?

    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): 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
    
    # 练习三: 按下 d 给他删除吧!
    Command (m for help): d
    Partition number (1-5): 4
    
    Command (m for help): d
    Partition number (1-4): 3
    
    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/hdc5 是由 /dev/hdc4 所衍生出来的逻辑分区槽,因此 /dev/hdc4 被删除,
    # /dev/hdc5 就自动不见了!最终就会剩下两个分区槽而已喔!
    
    Command (m for help): q
    # 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开啰~
    复制代码

    磁盘格式化

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

     mkfs

    复制代码
    [root@www ~]# mkfs [-t 文件系统格式] 装置文件名
    选项与参数:
    -t  :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
    
    范例一:请将上个小节当中所制作出来的 /dev/hdc6 格式化为 ext3 文件系统
    [root@www ~]# mkfs -t ext3 /dev/hdc6
    mke2fs 1.39 (29-May-2006)
    Filesystem label=                <==这里指的是分区槽的名称(label)
    OS type: Linux
    Block 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 user
    First data block=0
    Maximum filesystem blocks=515899392
    16 block groups
    32768 blocks per group, 32768 fragments per group
    15712 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912
    
    Writing inode tables: done
    Creating journal (8192 blocks): done <==有日志记录
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 34 mounts or
    180 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/hdc6
    mke2fs 1.39 (29-May-2006)
    Filesystem label=vbird_logical
    OS type: Linux
    Block size=2048 (log=1)
    Fragment size=2048 (log=1)
    251968 inodes, 1004046 blocks
    50202 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=537919488
    62 block groups
    16384 blocks per group, 16384 fragments per group
    4064 inodes per group
    Superblock backups stored on blocks:
            16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
    
    Writing inode tables: done
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: done
    # 比较看看,跟上面的范例用默认值的结果,有什么不一样的啊?
    复制代码

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

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

    磁盘挂载与卸载

     

    mount

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

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

    尤其是上述的后两点!如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。 举个例子来说,假设你的 /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:      重新挂载,这在系统出错,或重新升级参数时,很有用!
    复制代码

    用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面!

    复制代码
    [root@www ~]# mkdir /mnt/hdc6
    [root@www ~]# mount /dev/hdc6 /mnt/hdc6
    [root@www ~]# df
    Filesystem           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 ~]# df
    Filesystem           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』比较正确喔!

    重新挂载根目录

    整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸除的!问题是,如果你的挂载参数要改变, 或者是根目录出现『只读』状态时,如何重新挂载呢?最可能的处理方式就是重新启动 (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/home
    2 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 的意思喔!

    使用 Label name 进行挂载的方法

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

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

    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/cdrom
    umount: /media/cdrom: device is busy
    umount: /media/cdrom: device is busy

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

    转自http://www.cnblogs.com/ggjucheng/archive/2012/09/02/2667234.html

  • 相关阅读:
    [CF750D] New Year and Fireworks(暴力,规律,dfs)
    [HDOJ6034] Balala Power!(模拟,贪心,大数)
    [HIHO1560] H国的身份证号码II(dp,计数,矩阵快速幂)
    [HIHO1555] 四次方根(递推,容斥,矩阵快速幂)
    [HIHO1554] 最短的 Nore0061(DP)
    [CF831D] Office Keys(二分,贪心)
    [HDOJ6156] Palindrome Function(数位dp, 枚举)
    团体程序设计天梯赛-练习集-L1-029. 是不是太胖了
    团体程序设计天梯赛-练习集-L1-028. 判断素数
    团体程序设计天梯赛-练习集-L1-027. 出租
  • 原文地址:https://www.cnblogs.com/fwdxl/p/6688474.html
Copyright © 2020-2023  润新知