我们在本章一开始时的挂载点的意义当中提过挂载点是目录, 而这个目录是进入磁盘分区(其实是文件系统啦!)的入口就是了。不过要进行挂载前,你最好先确定几件事:

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

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

而要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个指令啦! 不过,这个指令真的是博大精深~粉难啦!我们学简单一点啊~ ^_^

[root@study ~]# mount -a
[root@study ~]# mount [-l]
[root@study ~]# mount [-t 文件系统] LABEL=''  挂载点
[root@study ~]# mount [-t 文件系统] UUID=''   挂载点  # 鸟哥近期建议用这种方式喔!
[root@study ~]# mount [-t 文件系统] 设备文件名  挂载点
选项与参数:
-a  :依照配置文件 [/etc/fstab](../Text/index.html#fstab) 的数据将所有未挂载的磁盘都挂载上来
-l  :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t  :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
      reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n  :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。
      但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
-o  :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:
      async, sync:   此文件系统是否使用同步写入 (sync) 或非同步 (async) 的
                     内存机制,请参考[文件系统运行方式](../Text/index.html#harddisk-filerun)。默认为 async。
      atime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatime
      ro, rw:        挂载文件系统成为只读(ro) 或可读写(rw)
      auto, noauto:  允许此 filesystem 被以 mount -a 自动挂载(auto)
      dev, nodev:    是否允许此 filesystem 上,可创建设备文件? dev 为可允许
      suid, nosuid:  是否允许此 filesystem 含有 suid/sgid 的文件格式?
      exec, noexec:  是否允许此 filesystem 上拥有可执行 binary 文件?
      user, nouser:  是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
                     mount 仅有 root 可以进行,但下达 user 参数,则可让
                     一般 user 也能够对此 partition 进行 mount 。
      defaults:      默认值为:rw, suid, dev, exec, auto, nouser, and async
      remount:       重新挂载,这在系统出错,或重新更新参数时,很有用!

基本上,CentOS 7 已经太聪明了,因此你不需要加上 -t 这个选项,系统会自动的分析最恰当的文件系统来尝试挂载你需要的设备! 这也是使用 blkid 就能够显示正确的文件系统的缘故!那 CentOS 是怎么找出文件系统类型的呢? 由于文件系统几乎都有 superblock ,我们的 Linux 可以通过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功的套和了,就立刻自动的使用该类型的文件系统挂载起来啊!那么系统有没有指定哪些类型的 filesystem 才需要进行上述的挂载测试呢? 主要是参考下面这两个文件:

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

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

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

例如 ext4 的驱动程序就写在“/lib/modules/$(uname -r)/kernel/fs/ext4/”这个目录下啦!

另外,过去我们都习惯使用设备文件名然后直接用该文件名挂载, 不过近期以来鸟哥比较建议使用 UUID 来识别文件系统,会比设备名称与标头名称还要更可靠!因为是独一无二的啊!

  • 挂载 xfs/ext4/vfat 等文件系统
范例:找出 /dev/vda4 的 UUID 后,用该 UUID 来挂载文件系统到 /data/xfs 内
[root@study ~]# blkid /dev/vda4
/dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"

[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
mount: mount point /data/xfs does not exist  # 非正规目录!所以手动创建它!

[root@study ~]# mkdir -p /data/xfs
[root@study ~]# mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs
[root@study ~]# df /data/xfs
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/vda4        1038336 32864   1005472   4% /data/xfs
# 顺利挂载,且容量约为 1G 左右没问题!

范例:使用相同的方式,将 /dev/vda5 挂载于 /data/ext4
[root@study ~]# blkid /dev/vda5
/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"

[root@study ~]# mkdir /data/ext4
[root@study ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4
[root@study ~]# df /data/ext4
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/vda5         999320  2564    927944   1% /data/ext4
  • 挂载 CD 或 DVD 光盘

请拿出你的 CentOS 7 原版光盘出来,然后放入到光驱当中,我们来测试一下这个玩意儿啰!

范例:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载到 /data/cdrom!
[root@study ~]# blkid
.....(前面省略).....
/dev/sr0: UUID="2015-04-01-00-21-36-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

[root@study ~]# mkdir /data/cdrom
[root@study ~]# mount /dev/sr0 /data/cdrom
mount: /dev/sr0 is write-protected, mounting read-only

[root@study ~]# df /data/cdrom
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sr0         7413478 7413478         0 100% /data/cdrom
# 怎么会使用掉 100% 呢?是啊!因为是 DVD 啊!所以无法再写入了啊!

光驱一挂载之后就无法退出光盘片了!除非你将他卸载才能够退出! 从上面的数据你也可以发现,因为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入任何数据到光盘当中! 此外,如果你使用的是图形界面,那么系统会自动的帮你挂载这个光盘到 /media/ 里面去喔!也可以不卸载就直接退出! 但是文字界面没有这个福利就是了! ^_^

Tips话说当时年纪小 (其实是刚接触 Linux 的那一年, 1999 年前后),摸 Linux 到处碰壁!连将 CDROM 挂载后, 光驱竟然都不让我退片!那个时候难过的要死!还用回纹针插入光驱让光盘退片耶!不过如此一来光盘就无法被使用了! 若要再次使用光驱,当时的解决的方法竟然是“重新开机!”囧的可以啊!

  • 挂载 vfat 中文U盘 (USB磁盘)

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

范例:找出你的U盘设备的 UUID,并挂载到 /data/usb 目录中
[root@study ~]# blkid
/dev/sda1: UUID="35BC-6D6B" TYPE="vfat"

[root@study ~]# mkdir /data/usb
[root@study ~]#   mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb
[root@study ~]# # mount -o codepage=950,iocharset=big5 UUID="35BC-6D6B" /data/usb
[root@study ~]# df /data/usb
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda1        2092344     4   2092340   1% /data/usb

如果带有中文文件名的数据,那么可以在挂载时指定一下挂载文件系统所使用的语系数据。 在 man mount 找到 vfat 文件格式当中可以使用 codepage 来处理!中文语系的代码为 950 喔!另外,如果想要指定中文是万国码还是大五码, 就得要使用 iocharset 为 utf8 还是 big5 两者择一了!因为鸟哥的U盘使用 utf8 编码,因此将上述的 big5 前面加上 # 符号, 代表注解该行的意思啰!

万一你使用的 USB 磁盘被格式化为 NTFS 时,那可能就得要动点手脚,因为默认的 CentOS 7 并没有支持 NTFS 文件系统格式! 所以你得要安装 NTFS 文件系统的驱动程序后,才有办法处理的!这部份我们留待 22 章讲到 yum 服务器时再来谈吧! 因为目前我们也还没有网络、也没有讲软件安装啊! ^_^

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

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

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

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

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

范例:将 /var 这个目录暂时挂载到 /data/var 下面:
[root@study ~]# mkdir /data/var
[root@study ~]# mount --bind /var /data/var
[root@study ~]# ls -lid /var /data/var
16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /data/var
16777346 drwxr-xr-x. 22 root root 4096 Jun 15 23:43 /var
# 内容完全一模一样啊!因为挂载目录的缘故!

[root@study ~]# mount 
&
#124; grep var
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

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

  • umount (将设备文件卸载)
[root@study ~]# umount [-fn] 设备文件名或挂载点
选项与参数:
-f  :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-l  :立刻卸载文件系统,比 -f 还强!
-n  :不更新 /etc/mtab 情况下卸载。

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

范例:将本章之前自行挂载的文件系统全部卸载:
[root@study ~]# mount
.....(前面省略).....
/dev/vda4 on /data/xfs type xfs (rw,relatime,seclabel,attr2,inode64,logbsize=256k,sunit=512,..)
/dev/vda5 on /data/ext4 type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sr0 on /data/cdrom type iso9660 (ro,relatime)
/dev/sda1 on /data/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=950,iocharset=...)
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
# 先找一下已经挂载的文件系统,如上所示,特殊字体即为刚刚挂载的设备啰!
# 基本上,卸载后面接设备或挂载点都可以!不过最后一个 centos-root 由于有其他挂载,
# 因此,该项目一定要使用挂载点来卸载才行!

[root@study ~]# umount /dev/vda4      
&
lt;==用设备文件名来卸载
[root@study ~]# umount /data/ext4     
&
lt;==用挂载点来卸载
[root@study ~]# umount /data/cdrom    
&
lt;==因为挂载点比较好记忆!
[root@study ~]# umount /data/usb     
[root@study ~]# umount /data/var      
&
lt;==一定要用挂载点!因为设备有被其他方式挂载

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

[root@study ~]# mount /dev/sr0 /data/cdrom
[root@study ~]# cd /data/cdrom
[root@study cdrom]# umount /data/cdrom
umount: /data/cdrom: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

[root@study cdrom]# cd /
[root@study /]# umount /data/cdrom

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

results matching ""

    No results matching ""