一、前言
在进行挂载之前,要明确几件事情
- ①单一文件系统不应该被重复挂载在不同的挂载点(目录)中
- ②单一目录不应该重复挂载多个文件系统
- ③重点:要作为挂载点的目录,理论上应该都是空目录才行
- ④重点:系统自动挂载的信息记录在/etc/fstab文件中,只有记录到这个文件中的磁盘在系统启动时才会自动挂载。不在这个文件中记录的磁盘挂载了关机后就自动卸载,开机后又需要自己手动挂载。
承上,为什么③中要求是空目录?原因如下
- 如果你挂载点的目录不是空的,那么挂载了文件系统之后,挂载点目录下原来的所有文件/目录都会被隐藏
- 例如:你的/home目录下原来有/home/test1与/home/test2两个目录。如果此时你加入了一个新的磁盘,并将其直接挂载在/home目录下,那么你原来的/home/test1与/home/test2这两个目录都会被隐藏(但不是覆盖)。当你将新的磁盘卸载掉之后,/home目录下原来的东西都会再跑出来
二、文件系统挂载命令:mount
- 格式:
- mount -a
- mount [-l]
- mount [-t 文件系统] LABEL=' ' 挂载点 ===>使用磁盘的Label name来挂载磁盘
- mount [-t 文件系统] UUID=' ' 挂载点 ===>使用磁盘的UUID来挂载磁盘
- mount [-t 文件系统] 设备文件名 挂载点 ===>使用磁盘的设备文件名来挂载磁盘
相关参数:
- -a:依照配置文件/etc/fstab的数据将文件内未挂载的磁盘都挂载上来
- -l:单纯的输入mount会显示目前挂载的信息,加上-l之后可增列Label名称
- -t:可以加上文件系统的种类名来指定预挂载的类型。Linux常见支持的类型有:xfs、ext3、ext4、reiserfs、vfat、iso9660(光盘格式)、nfs、cifs、smbfs(后三种是网络文件系统类型)
- -n:在默认的情况下,系统会将实际挂载的情况即时写入/etc/mtab中,以利于其他程序的运行。但是在某些情况下(例如单人维护模式),为了避免问题会刻意不写入,此时就需要加上-n选项
- -o:后面可以接一些挂载时额外加上的参数。比如:账号、密码、读写权限等,参数如下
async,sync | 此文件系统是否使用同步写入的内存机制。默认为async |
atime,noatime | 文件系统是否会修改文件的读取时间。为了性能,某些时刻会使用noatime |
ro,rw | 文件系统是只读(ro)还是可读写(rw) |
auto,noauto | 文件系统是否以mount -a自动挂载 |
dev,nodev | 文件系统是否可建立设备文件 |
suid,nosuid | 文件系统是否含有suid/sgid的文件格式 |
exec,noexec | 文件系统是否拥有可执行的二进制文件 |
user,nouser | 是否允许文件系统让任何使用者执行mount。一般来说,mount仅有root可以进行 |
defaults | 默认值为:rw、suid、dev、exec、auto、nouser、async |
remount | 重新挂载。这在系统出错,或重新更新参数时很有用 |
codepage=数值 | 挂载USB移动磁盘时,指定挂载的文件系统所使用的语系。中文语系为:950 |
iocharset=编码名 | 挂载USB移动磁盘时,指定移动磁盘的编码。一般有:utf8、Big5 |
loop | Linux下的文件制作loop设备挂载时时会用到 |
- --bind:挂载不特定目录,将一个挂载目录挂载到另一个目录下
注意事项
①承上,我们不需要加上-t这个选项,系统会自动分析最恰当的文件系统来尝试挂载你需要的设备
- 那么系统是如何找出文件系统类型的呢?由于文件系统几乎都有超级区块,我们的Linux可以通过分析超级区块搭配Linux自己的驱动程序去测试挂载,如果测试成功,就立刻自动使用该类型的文件系统挂在起来。
- 系统只会指定某些部分的类型的文件系统进行上述的挂载测试(主要参考下面这两个文件)
/etc/filesystems | 系统指定的测试挂载文件系统类型的优先级 |
/proc/filesystems | Linux系统已经加载的文件系统类型 |
- 我们Linux支持的文件系统的驱动程序都写在如下的目录中
/lib/modules/$(uname -r)/kernel/fs/
例如ext4的驱动程序就写在:/lib/modules/$(uname -r)/kernel/fs//ext4/这个目录下
②系统会将实际挂载的情况即时写入/etc/mtab中:下面只是部分截图
③单独使用mount也可以查看系统下所有设备文件的挂载情况:下面只是部分截图
④我们尽量使用设备的UUID来挂载目录。原因:相同的一个磁盘在不同的Linux系统中,文件名是很容易重复的,但是UUID是很难重复的
演示案例
①挂载xfs/ext4/vfat等文件系统
- 我们使用UUID来挂载一个ext4文件系统类型的/dev/sda3磁盘分区到/data/ext4目录下
②挂载CD或DVD光盘(不是镜像文件)
- 将用来安装Linux的安装光盘/dev/sr0挂载到/data/cdrom下
注意事项:
- 光驱一挂载之后就无法退出光盘了,除非你将它卸载才能够退出
- 从上图可看出:因为是光盘,所以磁盘使用率为100%。且无法直接写入任何数据到光盘中
- 此外,如果你使用的是图形界面,那么系统会自动帮你把光盘挂载到/media目录
③挂载vfat中文移动磁盘(USB磁盘)
- 我将我的USB插入到Linux主机的USB接口上,并挂载到/data/usb目录下(注意:USB移动磁盘是NTFS文件系统格式,Linux需要有NTFS文件系统的驱动程序才可识别)
注意事项
- codepage:挂载时指定挂载文件系统所使用的语系。在man mount找到vfat文件格式当中可以使用codepage来处理(中文语系为950)
- iocharset:指定中文是Unicode还是Big5,因为我的移动磁盘为UTF=-8编码,所以上面选择的是utf8
④重新挂载根目录
- 整个目录树最重要的就是根目录,所以根目录不能够被卸载
- 但是如果你的挂载参数改变或是根目录出现只读的状态时,需要重新挂载。方式有:重新启动(reboot)或者使用mount的remount参数
- 第二种重新挂在方法很重要,尤其是那个remount参数。当你进入单人维护模式时,你的根目录常会被系统挂载为只读,此时就需要这个命令参数
mount -o remount,rw,auto /
⑤挂载不特定目录(挂载多个目录)
- 概念:我们可以利用mount将某个目录挂载到另一个目录下。这不是挂载新的文件系统,只是单纯的某个目录挂载到其它另一个目录下而已
- 方法:使用符号链接来做链接实现,或者使用下面这种方法(推荐)
- 下图:我们将原来的/var目录挂载到/data/var目录下,然后使用ls命令可以看到两者链接到同一个inode。也可以使用mount看到/var挂载在/data/var目录下
三、文件系统卸载命令:umount
- 格式:
umount [选项] 设备文件名/挂载点
- 选项:
- -f:强制卸载,可用在类似网络文件系统(NFS)无法读取的情况下
- -l:立刻卸载文件系统,比-f还强
- -n:不更新/etc/mtab情况下卸载
注意事项
- ①文件系统卸载的方式,最后可以是设备文件名也可以是挂载点(建议)。但是如果你的挂载点被另一个挂载点所挂载,则必须使用挂载点卸载
- ②如果你当前的路径在你的挂载点内,则你需要退出到当前挂载点路径外才可以卸载
演示案例
①将上面③的USB移动磁盘卸载
②将上面⑤中的/var/data挂载点卸载掉:因为/var目录挂载到/data/var下,所以需要先卸载/data/var
③将上面②的光盘卸载掉
- 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。