如何在Linux文件系统中创build一个循环? 我想打破Linux文件系统的有向无环图(DAG)属性。 这可能吗? 当我在我的Ubuntu上安装了scratchbox交叉编译器时,我曾经看到过这种情况。
我现在不知道如何重现它。
一些其他响应者已经回答了如何使用回送设备设置挂载,但是您具体询问了有关bind
挂载的问题,这些挂载挂载有点不同。 如果要使用绑定装入,则只需在mount命令中指定--bind
。 例如:
mount --bind /original/path /new/path
这将使得/original/path
的文件系统位置可以通过/new/path
访问。 请注意,这将不会遵循挂载点! 例如,假设我有以下挂载点:
/something /something/underneath/that
现在假设我为/something
做了一个bind
装入:
mount --bind /something /new_something
我将能够通过路径/new_something/myfile
访问像/something/myfile
/new_something/myfile
。 但是我不能通过路径/new_something/underneath/that/otherfile
/something/underneath/that/otherfile
来访问像/something/underneath/that/otherfile
/new_something/underneath/that/otherfile
。 您必须为每个文件系统设置一个单独的bind
安装; 或者如果你有一个相对较新的内核,你可以使用rbind
挂载,它遵循挂载点:
mount --rbind /something /new_something
关于rbind
挂载的一个警告:它们不处理rbind
安装后挂载文件系统的情况。 也就是说,假设我有这样一个坐骑:
/something
然后我像上面那样设置我的rbind
, 然后我挂载/something/underneath/that
:这个rbind
不会神奇地使新的挂载通过rbind
位置可见。 另外请注意,显然是由于内核中的一个bug,你不能卸载一个rbind
挂载。
此外,万一你的意思是“如何使用mount(2)系统调用来设置绑定挂载?”:当您调用mount(2)
进行常规bind
时,必须指定MS_BIND
标志(在mount.h
定义)安装。 对于一个rbind
挂载,你必须指定MS_BIND
和非文件MS_REC
标志(在linux/fs.h
定义)。
希望有所帮助,
埃里克·梅尔斯基
它看起来像迄今为止所有答案都是关于在回送设备上安装,而不是使用绑定挂载创建一个循环。
正如你可能已经发现的,
$ mkdir -p test/test $ mount --bind test test/test
只允许你访问test/test/test
,而不是进一步。 甚至不
$ mount --rbind test test/test
的作品,因为递归绑定挂载有效地通过查找源上的现有坐骑并将其绑定到目标上。
你所要求的是不可能的,因为绑定坐骑不能跨越挂载点。 如果你真的想模拟一个文件系统循环,试试像localfs那样使用一个伪绑定。 我没有尝试过自己,试图读取自己提供的文件系统时可能会锁定。 刚才,我尝试用crossmnt
导出一个NFS树并将其挂载在它自己的下面,但是出于类似的原因失败了。
mount /path/to/device /path/to/mount/location -o loop
其中/ path / to / device是要装入的分区的路径或磁盘映像的路径,/ path / to / mount / location是要装入设备/映像的文件夹的路径下
你可能还需要包含这样的文件系统的类型(使用fat16 / fat32):
mount /path/to/device /path/to/mount/location -o loop -t vfat
您可能还想从头创建一个:
首先创建图像文件并初始化它
dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE
接下来,使用您选择的FS类型进行有效分区
mkfs.ext3 -F /tmp/loop.img
挂载你的新形象
mkdir -p /mnt/image mount /tmp/loop.img /mnt/image -o loop
您现在可以在新图像中创建/复制文件和目录。
玩的开心,
Jeach!