是否可以访问挂载“隐藏”的文件?


18

在Linux中,是否有一种方法可以访问在子目录中挂载另一个文件系统时已“隐藏”的已挂载文件系统中的文件?

例如

cd /
mkdir /foo
touch /foo/bar
mount /dev/sda1 /foo
# now, can I still get to /foo/bar on the / filesystem?

我梦s以求的解决方案不需要提升的权限或特定于特定的文件系统,但是我将尽我所能获得所有报废,而不会冒险损坏文件系统。

Answers:


28

您可以使用mount命令访问基础文件系统。

$ mkdir /mnt/root
$ sudo mount --bind / /mnt/root
$ cat /mnt/root/foo/bar

这样做没有损坏问题,但确实需要安装文件系统的权限。


+1,我认为这mount --bind就是答案。但是我不确定。
Dan D.

1
+0.95,我完全忘记了默认情况下绑定是非递归的。但是,上一次我在其他地方绑定安装/时,如果不重新引导就无法卸载它。可能是某些GUI组件在抓取它。你测试过了吗?
user1686 '02

谢谢!我想了一会儿绑定绑定,但是以为它们会基于路径名重写工作,因此是递归的……
themel 2012年

5

如果您具有root用户,则可以mount --move将挂载的文件系统放在临时目录的顶部,然后再将其移回。

mkdir /bar
mount --move /foo /bar

具有root用户还可以直接访问基础块设备(如果有)。对于ext4,您可以使用debugfs导出文件。

只读访问永远不会破坏文件系统。


目录可以具有为其获取的句柄或文件描述符。“当前目录”也是句柄,而不是路径。如果您具有目录的句柄,则即使该位置已被挂载,也可以访问其中的文件。这不需要特殊的特权,只需要特殊的准备。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.