检测 linux 上的绑定挂载

     2023-02-22     212

关键词:

【中文标题】检测 linux 上的绑定挂载【英文标题】:detecting bind mounts on linux 【发布时间】:2012-01-03 10:58:16 【问题描述】:

我正在寻找一种方法来确定给定路径是否是绑定挂载点(在 linux 上)。检测常规挂载点的标准技术似乎不起作用。甚至 mountpoint 命令也无法检测到绑定挂载。

【问题讨论】:

我真的很想了解你问这样一个问题的原因。 一开始是我认为我需要的东西,现在它发展成为更多的“我只需要知道”。最初的原因是我正在编写一个相当全面的文件系统walker/scanner。 然后你试着记住你已经访问过的inode。 【参考方案1】:

我不确定是否应该有办法做到这一点(可能通过/etc/mtab/etc/fstab 除外),因为我知道绑定挂载是挂载空间中的某种“硬链接”(不是文件层次结构),并且(一旦发生绑定挂载)无法区分源挂载点和目标挂载点。

为什么要问这个?从应用程序的角度来看,绑定挂载(恕我直言)对于隐藏这些东西非常有用(否则你会使用符号链接 - 甚至是硬链接,在极少数情况下它们是可能的 - 用于目录)

由于您的问题,我刚刚发现的mountpoint 似乎看到了一些东西:

% grep /home /etc/fstab
UUID=000008-0003-000c-9ecd-0f1a /home           ext3    defaults        0       2
% grep /usr/src /etc/fstab
/home/Src /usr/src none bind 0 0
% mountpoint /usr/src
/usr/src is a mountpoint
% mountpoint /home/Src
/home/Src is not a mountpoint

通过strace-ing mountpoint 我发现它正在对/usr/src/usr/src/.. 等目录执行lstatstatfstat 系统调用


(2016 年 11 月添加:)

另见/proc/mounts,例如proc(5) 和 nftw(3)

【讨论】:

我相信mountpoint使用的技术是寻找l/stat path和path/..,然后寻找不同的设备id或者相同的inode。至于 fstat 调用,我不确定,但它可能与挂载点检查没有直接关系。至于“为什么”。您对它们的用途提出了一个很好的观点,我决定考虑将链接挂载在与常规目录相同的设备中。话虽如此,我仍然很好奇人们是如何检测到它们的。目前我发现的最佳技术是扫描 /proc/mounts 和 /etc/mtab 以获取信息。【参考方案2】:

您可以通过检查路径及其父目录的设备 ID 来检测路径是否是挂载点(前提是挂载的文件系统与父目录的不同 - 我从未尝试绑定挂载目录到自己身上!)。

这是一个快速的命令行演示:

$ cut -d ' ' -f2 /proc/mounts | xargs stat -c '%d %n'
18 /sys
4 /proc
6 /dev
19 /dev/pts
20 /run
2049 /
7 /sys/kernel/security
21 /dev/shm
22 /run/lock
23 /sys/fs/cgroup
24 /sys/fs/cgroup/unified
25 /sys/fs/cgroup/systemd
26 /sys/fs/pstore
27 /sys/fs/cgroup/perf_event
28 /sys/fs/cgroup/cpu,cpuacct
29 /sys/fs/cgroup/pids
30 /sys/fs/cgroup/blkio
31 /sys/fs/cgroup/memory
32 /sys/fs/cgroup/cpuset
33 /sys/fs/cgroup/net_cls,net_prio
34 /sys/fs/cgroup/devices
35 /sys/fs/cgroup/freezer
39 /proc/sys/fs/binfmt_misc
17 /dev/mqueue
8 /sys/kernel/debug
37 /dev/hugepages
2066 /home
39 /proc/sys/fs/binfmt_misc
44 /run/user/1000
45 /sys/fs/fuse/connections
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d
4 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/proc
18 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/sys
6 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev
19 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev/pts
2066 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/home
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/tmp

一旦你知道它是一个挂载点,那么如果它的设备 id 对/proc/mounts 中的多个条目是通用的,你可以假设其中一个是绑定挂载。从这个答案中找出哪个是绑定的,哪个是绑定的仍然是一个缺失的部分。

【讨论】:

stat中,为什么要列出inode号,而不是设备号? @Steve - 嗯,因为我没有仔细阅读手册页,看不到我需要 -f 参数。我是个白痴。【参考方案3】:
$ mount | grep bind

我不是很清楚你想要什么,这个命令符合你的需要吗?

【讨论】:

通过jenkins访问windows上的linux挂载位置

】通过jenkins访问windows上的linux挂载位置【英文标题】:Accessinglinuxmountlocationonwindowsthroughjenkins【发布时间】:2014-07-2212:09:37【问题描述】:我在ubuntu上安装了路径/opt/test/share,并与使用samba的所有人共享。我已将Windows上的Z:驱动... 查看详情

Linux Shell 脚本:如何检测 NFS 挂载点(或服务器)已死?

】LinuxShell脚本:如何检测NFS挂载点(或服务器)已死?【英文标题】:LinuxShellScript:HowtodetectNFSMount-point(ortheServer)isdead?【发布时间】:2013-07-1209:44:12【问题描述】:一般在NFS客户端,如何使用BashShell脚本检测Mounted-Pointisnomoreavaila... 查看详情

在 Linux 中以编程方式清除挂载 (SSD) 磁盘上的缓存

】在Linux中以编程方式清除挂载(SSD)磁盘上的缓存【英文标题】:Programmaticallyclearcacheonmounted(SSD)diskinLinux【发布时间】:2013-08-2401:50:12【问题描述】:我正在编写一个对磁盘性能感兴趣的应用程序。我之前使用的是较旧的机械磁... 查看详情

linux挂载到底是啥作用呢,可不可以回答得形象点啊

...ftp的文件,可以吗?很难做到,很难在暴风影音中打开ftp上的rmvb文件,但是如果你在linux下面,借助于ftpfs或者usermodefs你可以把ftp文件夹挂载为本地的某一个文件夹,比如你把ftp://user:pass@192.168.1.2你隔壁的电脑上的ftp文件夹挂载... 查看详情

AWS Amazon Linux2 上的 nfs 问题

】AWSAmazonLinux2上的nfs问题【英文标题】:nfsissueonAWSAmazonLinux2【发布时间】:2020-04-2816:51:29【问题描述】:我在AmazonAWS上运行多个网站。我在主服务器上挂载和EBS,挂载目录保存网站的文件。另外,我配置了应用程序负载均衡器... 查看详情

linux下nfs客户机挂载服务器上的共享目录时,出现权限不够的错误,怎么解决?

...了nfs客户端和服务器,在客户端上用mount命令挂载服务器上的共享目录时,出现权限不够。服务器上的共享目录权限是777,配置文件是*(sync,rw)。而且2台机器都没安装防火墙。selinux中是disabled。用showmount-e命令可查看到服务器... 查看详情

如何让 Google Test 检测 Linux 上的线程数?

】如何让GoogleTest检测Linux上的线程数?【英文标题】:HowtomakeGoogleTestdetectthenumberofthreadsonLinux?【发布时间】:2012-12-2723:25:59【问题描述】:运行使用Google测试框架编写的死亡测试时,会为每个测试生成以下警告:[WARNING].../gtest-de... 查看详情

linux设好fstab要开机自动挂载其他服务器上的nfs共享,为啥没有自动挂载?

看看开机的时候报什么错吧。另外注意portmap、netfs服务要设成开机启动。我遇到过一次,开机时netfs报错mount失败,英文报错,大概意思是不能到达主机也就是网络问题。当然开机后网络没问题。开机后输入mount-a挂全部fstab内容... 查看详情

linux下nfs客户机挂载服务器上的共享目录时,出现权限不够的错误,怎么解决?

...了nfs客户端和服务器,在客户端上用mount命令挂载服务器上的共享目录时,出现权限不够。服务器上的共享目录权限是777,配置文件是*(sync,rw)。而且2台机器都没安装防火墙。selinux中是disabled。用showmount-e命令可查看到服务器... 查看详情

linux上检测硬盘上的坏道和坏块

                            Linux上检测硬盘上的坏道和坏块让我们从坏道和坏块的定义开始说 查看详情

如何使用 python 检测到某些东西已插入 linux 上的音频插孔?

】如何使用python检测到某些东西已插入linux上的音频插孔?【英文标题】:Howcanidetectthatsomethingispluggedintotheaudiojackonlinuxwithpython?【发布时间】:2011-03-1810:07:20【问题描述】:我将pythontornado网络服务器与tornado.io一起使用。我想证... 查看详情

linux上怎样检测u盘的插入

参考技术Alinux支持热插拔事件,通过udev可以管理u盘的插入和拔出,具体的可以多百度看看udev相关知识 参考技术B会有/dev的变化,假设你的盘符是sda,当插入u盘,你的/dev/sdb就有挂载信息你输入mount可以看到的本回答被提问者采... 查看详情

linux系统的目录绑定配置(代码片段)

Linux系统的目录绑定配置一.源目录与目标目录情况1、源目录文件及inode2、目标目录的文件及inode二、将两个目录进行绑定1.moun--bind进行绑定2.检查绑定后的两个目录情况3.moun--bind绑定注意事项三、解挂载1.对两个目录进行解挂载2.... 查看详情

linux怎么查看硬盘挂载状态?

...来查看硬盘的挂载状态。关于硬盘挂载的其它说明:一、检测硬盘能否被识别#fdisk-l查找新硬盘信息,类似如下文本:disk/dev/sdb:36.7gb,36748945408bytes二、挂载硬盘1、在本地硬盘中临时创建一个目录#mkdir/opt/data/tmp12、挂载第二块硬盘... 查看详情

在linux中从其他机器挂载文件夹

...布时间】:2014-11-1006:18:46【问题描述】:我想将其他机器上的文件夹挂载到我的linux服务器。为此,我使用以下命令mount-tnfs192.xxx.x.xx:/opt/oracle/执行时出现以下错误mount.nfs:accessdeniedbyserverwhilemounting19 查看详情

确定是啥导致我在 Linux 上的用户空间绑定可执行文件中出现如此多的系统时间

】确定是啥导致我在Linux上的用户空间绑定可执行文件中出现如此多的系统时间【英文标题】:DeterminingwhatiscausingsomuchsystimeinmyuserspaceboundexecutableonLinux确定是什么导致我在Linux上的用户空间绑定可执行文件中出现如此多的系统时... 查看详情

docker数据存储方式(bind--mount)

...相比,绑定挂载的功能有限。当您使用绑定挂载时,主机上的一个文件或目录被安装到一个容器中。文件或目录由主机上的完整或相对路径引用。相比之下,在使用卷时,在主机上的Dockers存储目录中创建了一个新目录,Docker管... 查看详情

linuxcentos5.3版本能否挂载磁盘阵列并共享?

...主机的链接方式?SAN还是NAS。SNA一般是通过光纤连到主机上的只要Linux开机可以认到存储就可以当本地硬盘使用。NAS是通过TCP/IP协议的方式连接到Linux主机上的(不仅限于CentOS)2、可以通过samba服务,通过设置共享目录可以让远... 查看详情