Linux下多挂载点mount实验
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下多挂载点mount实验相关的知识,希望对你有一定的参考价值。
mount挂载实验
今天研发的同学打来电话问了一个奇葩的问题:同一个文件夹是否可以挂载多个nas?
我的第一反应就是不可以,但又没细想为什么。
现在我们就来做一个实验验证一下:
- 同一个目录是否可以同时挂载多个分区/硬盘/逻辑卷/nas
- 同一个分区/硬盘/逻辑卷/nas是否可以挂载到多个目录
环境准备
- 实验基线
操作系统:CentOS Linux release 8.4.2105 - 虚拟机创建3个新硬盘做为实验挂载用
- 查看硬盘
[root@C8-196 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 70G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-home 253:2 0 127G 0 lvm /home
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
- 使用逻辑卷分区
[root@C8-196 ~]# pvcreate /dev/sdb /dev/sdc /dev/sdd
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
[root@C8-196 ~]# vgcreate mt /dev/sdb /dev/sdc /dev/sdd
Volume group "mt" successfully created
[root@C8-196 ~]# lvcreate -L +5G mt1_lv mt
Volume group "mt1_lv" not found
Cannot process volume group mt1_lv
[root@C8-196 ~]# lvcreate -L +5G -n mt1_lv mt
Logical volume "mt1_lv" created.
[root@C8-196 ~]# lvcreate -L +5G -n mt2_lv mt
Logical volume "mt2_lv" created.
[root@C8-196 ~]# lvcreate -L +5G -n mt3_lv mt
Volume group "mt" has insufficient free space (1277 extents): 1280 required.
[root@C8-196 ~]# lvcreate -L +4 -n mt3_lv mt
Logical volume "mt3_lv" created.
[root@C8-196 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 70G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-home 253:2 0 127G 0 lvm /home
sdb 8:16 0 5G 0 disk
└─mt-mt1_lv 253:3 0 5G 0 lvm
sdc 8:32 0 5G 0 disk
├─mt-mt1_lv 253:3 0 5G 0 lvm
├─mt-mt2_lv 253:4 0 5G 0 lvm
└─mt-mt3_lv 253:5 0 4M 0 lvm
sdd 8:48 0 5G 0 disk
└─mt-mt2_lv 253:4 0 5G 0 lvm
[root@C8-196 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home cl -wi-ao---- 126.96g
root cl -wi-ao---- 70.00g
swap cl -wi-ao---- 2.03g
mt1_lv mt -wi-a----- 5.00g
mt2_lv mt -wi-a----- 5.00g
mt3_lv mt -wi-a----- 4.00m
- 在三个新建逻辑卷分区上创建文件系统
mkfs.xfs /dev/mapper/mt-mt1_lv
mkfs.xfs /dev/mapper/mt-mt2_lv
mkfs.ext4 /dev/mapper/mt-mt3_lv
- 查看分区情况
[root@C8-196 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs c17463f3-cf5c-4d9e-b7f8-34e1f09de31c /boot
└─sda2 LVM2_member 5fOYEk-G1PN-Yilu-3PZD-dV92-kCgM-4NQTC4
├─cl-root xfs e88eb208-9984-4cbe-867b-8a0fee022dec /
├─cl-swap swap ad9f0577-fb9a-4e61-99d2-b42473a0e815 [SWAP]
└─cl-home xfs 19122a86-a5b9-43c8-bdb3-6ae3a94702bb /home
sdb LVM2_member vv0NK7-BQXM-Z2dp-QSnp-W3Ff-qdfz-qDkM2K
└─mt-mt1_lv xfs 540120f8-557d-4a7b-95a0-8f3965e212a5
sdc LVM2_member FQRPl7-L1K5-z6PK-o3wR-rTz9-0tGj-hCMB8s
├─mt-mt1_lv xfs 540120f8-557d-4a7b-95a0-8f3965e212a5
├─mt-mt2_lv xfs 01a90cf9-4049-45f3-95c3-acb6f879cba0
└─mt-mt3_lv ext4 597e10e6-e1ad-4d04-ac95-304b0a61de58
sdd LVM2_member 7hKy5j-Yik1-mpdE-NXir-J84W-a4c7-JmTZLE
└─mt-mt2_lv xfs 01a90cf9-4049-45f3-95c3-acb6f879cba0
- 创建3个挂载点
[root@C8-196 ~]# mkdir -pv /data/mt1..3
mkdir: created directory '/data/mt1'
mkdir: created directory '/data/mt2'
mkdir: created directory '/data/mt3'
[root@C8-196 ~]# ll /data
total 0
drwxr-xr-x 2 root root 6 Mar 10 21:05 mt1
drwxr-xr-x 2 root root 6 Mar 10 21:05 mt2
drwxr-xr-x 2 root root 6 Mar 10 21:05 mt3
drwxr-xr-x 2 root root 6 Dec 17 21:43 spugdata
测试1:同一挂载点(目录)挂载多个分区
- 挂载点/data/mt1分别挂载3个分区
[root@C8-196 ~]# mount /dev/mapper/mt-mt1_lv /data/mt1
[root@C8-196 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 876M 0 876M 0% /dev
tmpfs tmpfs 896M 0 896M 0% /dev/shm
tmpfs tmpfs 896M 17M 879M 2% /run
tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 70G 3.6G 67G 6% /
/dev/mapper/cl-home xfs 127G 2.5G 125G 2% /home
/dev/sda1 xfs 1014M 197M 818M 20% /boot
overlay overlay 70G 3.6G 67G 6% /var/lib/docker/overlay2/dff1098e902038f4105591060554c84a668a85b076f0596f8b144e77ca7a8633/merged
tmpfs tmpfs 180M 0 180M 0% /run/user/0
/dev/mapper/mt-mt1_lv xfs 5.0G 68M 5.0G 2% /data/mt1
[root@C8-196 ~]# mount /dev/mapper/mt-mt2_lv /data/mt1
[root@C8-196 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
##上边的省略
/dev/mapper/mt-mt2_lv xfs 5.0G 68M 5.0G 2% /data/mt1
[root@C8-196 ~]# mount /dev/mapper/mt-mt3_lv /data/mt1
[root@C8-196 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
##上边的省略
/dev/mapper/mt-mt3_lv ext4 2.9M 45K 2.6M 2% /data/mt1
- 很显然,不可能同时挂载,
- 挂载第二分区的时候第一个分区就掉了
- 挂载第三个分区的时候第二个分区就掉了
- 可是当我umount的时候奇异的事情发生了
[root@C8-196 ~]# umount /data/mt1
[root@C8-196 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
##上边的省略
/dev/mapper/mt-mt2_lv xfs 5.0G 68M 5.0G 2% /data/mt1
- 看没看到,umount以后并不是退回到未挂载状态,而是退回到上一个挂载点的状态
看一下分区情况
- 真相了,同一个目录是可以挂载多个分区的
[root@C8-196 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─cl-root 253:0 0 70G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-home 253:2 0 127G 0 lvm /home
sdb 8:16 0 5G 0 disk
└─mt-mt1_lv 253:3 0 5G 0 lvm /data/mt1
sdc 8:32 0 5G 0 disk
├─mt-mt1_lv 253:3 0 5G 0 lvm /data/mt1
├─mt-mt2_lv 253:4 0 5G 0 lvm /data/mt1
└─mt-mt3_lv 253:5 0 4M 0 lvm
sdd 8:48 0 5G 0 disk
└─mt-mt2_lv 253:4 0 5G 0 lvm /data/mt1
- 我们再把mt-mt3挂载上/data/mt1
- 很显然同一挂载点是可以同时挂载多个分区的
- 很显然多个分区可以同时挂载到同一挂载点上
读写测试
- 既然都挂在上了,我们往这个挂载点上写数据就应该同时写道所有分区上
- 我们现在往/data/mt1这个文件夹里写入数据
[root@C8-196 ~]# touch /data/mt1/mt1..10.log
[root@C8-196 ~]# ll /data/mt1
total 12
drwx------ 2 root root 12288 Mar 10 21:02 lost+found
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt10.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt1.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt2.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt3.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt4.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt5.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt6.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt7.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt8.log
-rw-r--r-- 1 root root 0 Mar 10 21:20 mt9.log
[root@C8-196 ~]# ll /data/mt2
total 0
[root@C8-196 ~]# ll /data/mt3
total 0
- 同时可见/data/mt2和、/data/mt3都是空的
- 此时三个分区都是挂载到/data/mt1上面的,也就是说三个盘里都应该有同样的内容
- 我们把两个分区拆出去分别挂载
[root@C8-196 ~]# mount /dev/mapper/mt-mt2_lv /data/mt2
[root@C8-196 ~]# mount /dev/mapper/mt-mt3_lv /data/mt3
- 奇怪的事情又发生了,这时候只有mt1和mt3中有数据,mt2中却没有数据
- 这时候的挂载情况是这个样子滴
- 这时候的分区情况是这样的
- 既然出现了灵异事件,我们就都摘掉,重新挂载
- 这回世界清净了
- 重新分别挂载到对应的目录看数据
[root@C8-196 ~]# mount /dev/mapper/mt-mt1_lv /data/mt1
[root@C8-196 ~]# mount /dev/mapper/mt-mt2_lv /data/mt2
[root@C8-196 ~]# mount /dev/mapper/mt-mt3_lv /data/mt3
- 结果只有mt3上有数据
- 也就说明了数据都写在了/dev/mapper/mt-mt3_lv这一个分区上
- 也就是说/dev/mapper/mt-mt3_lv这个最后挂载的盘才真正写入了数据
- 也就是说不能实现一个挂载点同时挂载多个分区
测试2: 同一分区挂载到多个挂载点(目录)
- 初始化所有挂载点和分区
- 将mt-mt1_lv分别挂载到/data/mt1 /data/mt2 /data/mt3
- 我们先后将同一个分区在不umount的情况下依次挂载了3个目录,
- 但df显示的却是同一个目录,没有变化
- 可是在lsblk的时候却看到分区已经挂载到mt3
-
- 我们知道数据真实存在于分区上,那我们来看看目前目录中是否有内容
- 我们知道数据真实存在于分区上,那我们来看看目前目录中是否有内容
- 当前看所有的目录都是空的
- 那我们来写入数据看看
- 在目录mt1中写入123
touch /data/mt1/mt1..3.log
- 在目录mt2中写入456
touch /data/mt3/mt4..6.log
- 接下来见证奇迹的时刻到了,我们看mt2
- 虽然df和lsblk都没显示/data/mt2的挂载情况,
- 但我们看到了,原来是空的目录mt2中写入了我们分别写道mt1和mt3中的内容
- 那我们可以肯定,现在mt1和mt3中有着和mt2同样的数据
- 我的眼睛就是尺,不用看回放了!!!
总结
-
同一个目录不能同时挂载多个分区
就算lsblk上看起来是挂载上了,但只有最后挂载的那一个才会生效 -
多个分区不能同时挂载同一个目录上
就算能挂上也不会写入同样的数据 -
同一个分区可以同时挂载到多个目录上
就算df和lsblk看起了不同,但只要是没有umount过都算挂在上了 -
多个目录可以同时挂载同一个分区
写入任何一个目录的数据其实都写到了同一个分区上面这就是同一个分区同一份数据 !
做一个比喻,
- 分区或者磁盘或者nfs啥的可以想象成房子
- 目录即挂载点可以相像成门
- 一个房间可以有多个门,进出哪个门都到这一个房子。
- 一个门只能装在一个房子上,不能装在两个房子上,通过一个门只能进入一个房间而不能通过一个门进入多个房间。
以上是关于Linux下多挂载点mount实验的主要内容,如果未能解决你的问题,请参考以下文章