Linux管理文件系统(3):mount挂载各种文件系统
Linux管理文件系统(3):mount挂载各种文件系统
在此,只简单介绍mount和umount的用法,至于实现挂载和卸载的机制和原理细节,参看挂载文件系统的细节。
mount基本用法
mount用来显示挂载信息或者进行文件系统挂载,它的功能及其的强大(强大到离谱),它不仅支持挂载非常多种文件系统,如ext/xfs/nfs/smbfs/cifs (win上的共享目录)等,还支持共享挂载点、继承挂载点(父子关系)、绑定挂载点、移动挂载点等等功能。在本文只介绍其最简单的挂载功能。
不同的文件系统挂载选项是有所差别的,在挂载过程中如果出错,应该man mount并查看对应文件系统的挂载选项。
mount并非只能挂载文件系统,也可以将目录挂载到另一个目录下,其实它实现的是目录【硬链接】,默认情况下,是无法对目录建立硬链接的,但是通过mount可以完成绑定,绑定后两个目录的inode号是完全相同的,但尽管建立的是目录的【硬链接】,但其实也仅是拿来当软链接用。
以下是ext类文件系统的一部分选项,可能有些选项是不支持其他文件系统的。
1 | mount # 将显示当前已挂载信息 |
一般user/users/nouser都用在/etc/fstab中,直接在命令行下使用这几个选项意义不是很大。
例如:
(1).挂载CentOS的安装镜像到/mnt。
1 | mount /dev/cdrom /mnt |
其实/dev/cdrom是/dev/sr0的一个软链接,/dev/sr0是光驱设备,所以也可以用/dev/sr0进行挂载。
1 | mount /dev/sr0 /mnt |
(2).重新挂载。
1 | [root@xuexi ~]# mount -t ext4 -o remount /dev/sdb1 /data1 |
(3).重新挂载文件系统为可读写。
1 | mount -t ext4 -o rw remount /dev/sdb1 /data1 |
(4).挂载windows的共享目录。
win上共享文件的文件系统是cifs类型,要在Linux上挂载,必须得有mount.cifs命令,如果没有则安装cifs-utils包。
假设win上共享目录的unc路径为\\192.168.100.8\test
,共享给的用户名和密码分别为long3:123,要挂在linux上的/mydata目录上。
1 | $ mount.cifs -o username="long3",password="123" //192.168.100.8/test /mydata |
注意,如果是比较新版本的win10(2017年之后更新的版本)或较新版本的win server,直接mount.cifs会报错:
1 | [root@xuexi ~]# mount.cifs -o username="long3",password="123" //192.168.100.8/test /mnt |
这是因为2017年微软的一个补丁禁用了SMBv1协议,通过smbclient的报告可知:
1 | $ yum -y install samba-client |
因此,在mount的时候指定cifs(SMB)的版本号为2.0即可。
1 | $ mount.cifs -o username="long3",password="123",vers=2.0 //192.168.100.8/test /mnt |
但是需要注意,在CentOS 4,5,6下的模块cifs.ko版本(较低)只能使用SMBv1协议,因此即使指定版本号也一样无效。只有在CentOS 7上才能使用SMBv2或SMBv3。
(5).基于ssh挂载远程目录。
如何基于ssh像NFS一样挂载远程主机上的目录?可以通过sshfs工具,该工具在fuse-sshfs包中,这个包在epel源中提供。
1 | yum -y install fuse-sshfs |
例如,挂载192.168.100.8上的根目录到本地的/mnt上。
1 | sshfs 192.168.100.8:/ /mnt |
卸载时直接umount即可。
关于sshfs,详细内容见:https://www.junmajinlong.com/linux/sshfs
(6).挂载目录到另一个目录下。挂载目录时,挂载目录和挂载点的inode是相同的,它们两者的内容也是完全相同的。
1 | mount --bind /mydata /mnt |
(7).查看某个目录是否是挂载点,使用mountpoint命令。
1 | [root@xuexi ~]# mountpoint /mydata/ |
挂载的参数信息存放在/proc/mounts(是/proc/self/mounts的软链接)中,在/proc/self/mountstats和/proc/mountinfo里则记录了更详细的挂载信息。
1 | [root@xuexi ~]# cat /proc/mounts |
文件系统是需要驱动支持的,没有驱动的文件系统也无法挂载,Linux中支持的文件系统驱动在/lib/modules/$(uname -r)/kernel/fs下。
1 | [root@xuexi ~]# ls /lib/modules/$(uname -r)/kernel/fs/ |
mount直接挂载iso镜像文件
有时候需要挂载CentOS的镜像文件,在虚拟机中经常是将镜像放入虚拟机的CD/DVD虚拟光驱中,然后在Linux上对/dev/cdrom进行挂载。其实/dev/cdrom是/dev/sr0的一个软链接,/dev/sr0是Linux中的光驱,所以上面的过程相当于是将镜像文件通过虚拟软件的虚拟光驱和linux的光驱连接起来,这样只需要挂载Linux中的光驱就可以了。但是,在非虚拟环境中没有虚拟光驱,而且在Linux中的一个镜像文件难道一定要拷贝到主机上通过虚拟光驱进行连接吗?
mount是一个极其强大的挂载工具,它支持挂载很多种文件类型,其中就支持挂载镜像文件,其实它连挂载目录都支持。
1 | [root@xuexi ~]# mount -o loop CentOS-6.6-x86_64-bin-DVD2.iso /mnt |
umount
1 | umount 设备名或挂载目录 |
卸载时,既可以使用设备名也可以使用挂载点卸载。有时候挂载网络系统(如NFS)时,设备名很长,这时候可以使用挂载点来卸载就方便多了。
如果用户正在访问某个目录或文件,使得卸载一直显示Busy,使用fuser -v DIR可以知道谁正在访问该目录或文件。
1 | [root@xuexi ~]# fuser -v /root |
使用-k选项kill掉正在使用目录或文件的进程,使用-km选项kill掉文件系统上的所有进程,然后再umount。
1 | [root@xuexi ~]# fuser -km /mnt/cdrom;umount /mnt/cdrom |
开机自动挂载/etc/fstab
通过将挂载选项写入到/etc/fstab中,系统会自动挂载该文件中的配置项。但要注意,该文件在开机的前几个过程中就被读取,所以配置错误很可能会导致开机失败。
其中最后两列,它们分别表示备份文件系统和开机自检,一般都可以设置为0。
由于能用的备份工具众多,没人会在这里设置备份,所以备份列设置为0。
最后一列是开机自检设置列,开机自检调用的是fsck程序,所有有些ext类文件系统作为/
时,可能会设置为1,但是fsck是不支持xfs文件系统的,所以对于xfs文件系统而言,该项必须设置为0。
其实无需考虑那么多,直接将这两列设置为0就可以了。
修复错误的/etc/fstab
万一/etc/fstab配置错误,导致开机无法加载。这时提示输入root密码进入单用户模式,只不过当用户模式下根文件系统是只读的,哪怕是root也无法直接修改/etc/fstab,所以应该重新挂载/
文件系统。
执行下面的命令,重挂载根分区,并给读写权限,再去修改错误的fstab文件记录,再重启。
1 | [root@xuexi ~]# mount -n -o remount,rw / |
按需自动挂载(autofs)
使用autofs实现需要挂载时就挂载,不需要挂载时5分钟后自动卸载。在实际生产环境中基本不会使用按需挂载,在Linux桌面系统中用的较多。
autofs是一个服务程序,需要让其运行在后台,可以用来挂NFS,也可挂本地的文件系统。
默认不装autofs,需要自己装。
1 | [root@xuexi ~]# yum install -y autofs |
autofs实现按需挂载的方式是指定监控目录,可在其配置文件/etc/auto.master中指定。
/etc/auto.master里面只有两列:第一列是监控目录;第二列是记录挂载选项的文件,该文件可以随便取名。
1 | [root@xuexi ~]# cat /etc/auto.master |
上述监控的/share目录,其实这是监控的父目录,在此目录下的目录如/share/data目录可以作为挂载点,当访问到/share/data时就被监控到,然后会按照挂载选项将挂载设备挂载到/share/data上。
上述配置中配置的挂载选项文件是/etc/auto.mount,所以建立此文件,写入挂载选项。
1 | [root@xuexi ~]# cat /etc/auto.mount |
该文件有3列:
- 第一列:指定的是在/etc/auto.master指定的/share下的目录/share/data,它是真正的被监控路径,也是挂载点。可使用相对路径data表示/share/data。
- 第二列:是mount的选项,前面使用一个
-
表示,该列可有可无。 - 第三列:是待挂载设备,可以是NFS服务端的共享目录,也可以本地设备。
1 | [root@xuexi ~]# vim /etc/auto.mount |
上面的配置表示当访问到/share/data时,自动使用参数(rw,bg,soft,rsize=32768,wsize=32768)挂载远端192.168.100.61
的/data目录到/share/data上。
剩下的步骤就是启动autofs服务。
1 | [root@xuexi data]# /etc/init.d/autofs restart |