linux磁盘命令-mount(挂载),unmount(卸载)

2018-05-25 16:59:58

将文件系统挂载到我们的Linux系统上,就要使用 mount 这个指令,大致描述如下

mount -a
mount [-l]
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点     #建议用这种方式
mount [-t 文件系统] 设备文件名 挂载点

选项与参数:
-a :依照配置文件 [/etc/fstab]的数据将所有未挂载的磁盘都挂载上来(除非指定了noauto)
-l :单纯的输入mount会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
reiserfs, vfat, iso9660(光盘格式) , nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。
但在某些情况下(例如单人维护模式) 为了避免问题会刻意不写入。此时就得要使用 -n 选项。

-o :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:
async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的
内存机制,默认为 async。
atime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatime
ro, rw: 挂载文件系统成为只读(ro) 或可读写(rw)
auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此filesystem 上,可创建设备文件? dev 为可允许
suid, nosuid: 是否允许此 filesystem 含有设置用户id和设置组id的文件格式,不清楚的
朋友可以参考《linux进程凭证(权限)》
exec, noexec: 是否允许此 filesystem 上拥有可执行binary文件?
user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
mount 仅有 root 可以进行,但下达 user 参数,则可让
一般user也能够对此partition进行mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

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

1./etc/filesystems 系统指定的测试挂载文件系统类型的优先顺序。
2./proc/filesystems linux系统已经载入的文件系统类型

cat /etc/filesystems 

xfs
ext4
ext3
ext2
nodev proc
nodev devpts
iso9660
vfat
hfs
hfsplus
*

cat /proc/filesystems 

nodev	sysfs
nodev	rootfs
nodev	ramfs
nodev	bdev
nodev	proc
nodev	cgroup
nodev	cpuset
nodev	tmpfs
nodev	devtmpfs
nodev	debugfs
nodev	securityfs
nodev	sockfs
nodev	pipefs
nodev	anon_inodefs
nodev	configfs
nodev	devpts
nodev	hugetlbfs
nodev	autofs
nodev	pstore
nodev	mqueue
nodev	selinuxfs
	xfs


查看系统支持的文件类型的驱动程序

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

total 48
-rw-r--r--. 1 root root 21853 Nov 22  2016 binfmt_misc.ko
drwxr-xr-x. 2 root root    22 May 30  2017 btrfs
drwxr-xr-x. 2 root root    27 May 30  2017 cachefiles
drwxr-xr-x. 2 root root    21 May 30  2017 ceph
drwxr-xr-x. 2 root root    21 May 30  2017 cifs
drwxr-xr-x. 2 root root    23 May 30  2017 cramfs
drwxr-xr-x. 2 root root    20 May 30  2017 dlm
drwxr-xr-x. 2 root root    23 May 30  2017 exofs
drwxr-xr-x. 2 root root    21 May 30  2017 ext4
drwxr-xr-x. 2 root root    51 May 30  2017 fat
drwxr-xr-x. 2 root root    24 May 30  2017 fscache
drwxr-xr-x. 2 root root    36 May 30  2017 fuse
drwxr-xr-x. 2 root root    21 May 30  2017 gfs2
drwxr-xr-x. 2 root root    22 May 30  2017 isofs
drwxr-xr-x. 2 root root    21 May 30  2017 jbd2
drwxr-xr-x. 2 root root    22 May 30  2017 lockd
-rw-r--r--. 1 root root 19597 Nov 22  2016 mbcache.ko
drwxr-xr-x. 6 root root   128 May 30  2017 nfs
drwxr-xr-x. 2 root root    40 May 30  2017 nfs_common
drwxr-xr-x. 2 root root    21 May 30  2017 nfsd
drwxr-xr-x. 2 root root  4096 May 30  2017 nls
drwxr-xr-x. 2 root root    24 May 30  2017 overlayfs
drwxr-xr-x. 2 root root    24 May 30  2017 pstore
drwxr-xr-x. 2 root root    25 May 30  2017 squashfs
drwxr-xr-x. 2 root root    20 May 30  2017 udf
drwxr-xr-x. 2 root root    20 May 30  2017 xfs

挂载xfs/ext4例子
下面的挂载例子是模拟的,实际挂载请根据自身分区和目录

[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

[root@study ~]# blkid /dev/vda5
/dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"
[root@study ~]# mount UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" /data/ext4

挂载cd或dvd光盘
请拿出光盘插入光驱

[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

挂载vfat中文u盘
拿出U盘插入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 前面加上 # 符号, 代表注解该行的意思啰!

如果你的U盘不是vfat的格式,比如是ntfs文件系统格式,从上面的驱动可以看出,没有支持ntft格式的驱动,这时候就得手动安装ntfs文件系统驱动了

重新挂载根目录
当我们进入单人维护模式时候,根目录会被系统挂载为只读,这时候要运行下面的指令重新挂载才行。

mount -n -o remount,rw /

绑定挂载

[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
#内容完全一模一样啊!因为挂载目录的缘故,其实两者链接到同一个 inode 

类似于硬链接,但存在2处差异:
1.绑定挂载可以跨越多个文件系统挂载点,甚至不拘于chroot监禁区。
2.可针对目录执行绑定挂载。

umount(卸载)

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

卸载文件系统既可以用设备名,也可以用挂载点来卸载

[root@study ~]# umount /dev/vda4    用设备文件名来卸载
[root@study ~]# umount /data/ext4   用挂载点来卸载

当你在卸载的时候可能会报target is busy。意思是 你正在使用该文件系统,一般是由于其他程序打开了此文件系统的文件,或者是你当前正处于文件系统里面,最好利用 cd 命令跳出来。

开机自动挂载
想要开机自动挂载,只需要在 /etc/fstab 文件里按照它的格式加上就行。

cat /etc/fstab

UUID=7470460a-47a7-41a8-a4f0-7bcdb39b3506 /                       xfs     defaults        0 0
UUID=c7c2cf29-2f94-4bb6-a334-7604c0c7c291 /boot                   xfs     defaults        0 0
UUID=2156bb3d-de11-4dd5-8599-70b16d3ef6b5 swap                    swap    defaults        0 0

#假设我们要开机自动挂载上面提到的vda4,在改文件的末尾附加上去就行
UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90"  /data/xfs  xfs  defaults  0 0

特殊设备loop挂载(也就是直接挂载iso文件而不需要烧录到光盘)
假设我们在网上下载了一个centos7.iso

[root@study ~]# mkdir /data/centos_dvd
[root@study ~]# mount -o loop /tmp/centos7.iso /data/centos_dvd

制作大文件然后以loop挂载
如果当初在分区时, 你只有分区出一个根目录,假设你已经没有多余的容量可以进行额外的分区的!偏偏根目录的容量还很大! 此时你就能够制作出一个大文件,然后将这个文件挂载!如此一来感觉上你就多了一个分区。

[root@study ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
512+0 records in <==读入 512 笔数据
512+0 records out <==输出 512 笔数据
536870912 Bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s
# 这个指令的简单意义如下:
# if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的设备!
# of 是 output file ,将一堆零写入到后面接的文件中。
# bs 是每个 block 大小,就像文件系统那样的 block 意义;
# count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!
[root@study ~]# ll -h /srv/loopdev
-rw-r--r--. 1 root root 512M Jun 25 19:46 /srv/loopdev

这样我们就生成了512M的大文件,然后进行格式化,默认xfs不能格式化文件,所以要加上 -f 参数。然后挂载。

[root@study ~]# mkfs.xfs -f /srv/loopdev
[root@study ~]# blkid /srv/loopdev
/srv/loopdev: UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" TYPE="xfs"

[root@study ~]# mount -o loop UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" /mnt
[root@study ~]# df /mnt
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 520876 26372 494504 6% /mnt

通过这个简单的方法,感觉上你就可以在原本的分区在不更动原有的环境下制作出你想要的 分区就是了! 这东西很好用的!尤其是想要玩 Linux 上面的“虚拟机”的话, 也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载。
CentOS 7.x 越来越聪明了,现在你不需要下达 -o loop这个选项与参数,它同样可以被系统挂上来! 连直接输入 blkid 都会列出这个文件内部的文件系统耶! 不过,为了考虑向下兼容性,建议加上-o loop。
更多详细用法请阅读linux c挂载(mount)和卸载(unmount)

备注:
1.原文地址http://www.freecls.com/a/2712/36

参考
1.linux鸟哥私房菜

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。