查找目录树中安装的所有“真实”文件系统

mir*_*los 6 mount fstab

对于给定的顶级目录,如何发现其中安装了哪些 \xe2\x80\x9creal\xe2\x80\x9d 文件系统,以及来自哪些设备(可能包括 UUID 或 LABEL,但必须使用 /dev/something LVM)?

\n

背景是从 debootstrap 之后运行的脚本自动生成 fstab(5);主机操作系统是 GNU/Linux(我认为并非我在子例程中使用的所有内容都是 GNU/kFreeBSD\xe2\x80\x91 或 GNU/Hurd 安全的)。

\n

到目前为止我发现的最接近的东西是,findmnt -l --real但这仍然显示绑定安装,对于我的用例来说,这是\xe2\x80\x99t \xe2\x80\x9creal不够\xe2\x80\x9d,我需要块设备支持的挂载点。(这可能包括环形安装座。)

\n

cg9*_*909 8

从Linux内核的角度来看,绑定挂载和“常规”挂载之间没有区别。它们在概念上比符号链接更接近于硬链接

不过你可以用例如缩小范围

findmnt -lv --real --output "FSROOT,SOURCE,TARGET,FSTYPE,OPTIONS" | grep "^/\s"
Run Code Online (Sandbox Code Playgroud)

这会过滤掉所有具有FSROOT除 之外的(已挂载文件系统中链接到挂载点的路径)的挂载/

绑定挂载会重新挂载整个文件系统,例如

mount /dev/sda /a
mount --bind /a /b
Run Code Online (Sandbox Code Playgroud)

更难被发现。SOURCE您需要通过比较或列来进一步过滤列表MAJ:MIN,并以这种方式删除重复项。

仍然存在一些边缘情况(例如,正则表达式错误地接受以空格字符开头的子目录/文件的绑定安装,并且 Btrfs 子卷安装看起来像绑定安装,因此它们从列表中删除)但这应该为您提供一个起点。