在Linux文件系统中创建一个循环

时间:2009-04-08 15:43:38

标签: linux filesystems mount

如何在Linux文件系统中创建循环?我想打破Linux文件系统的有向无环图(DAG)属性。这可能吗?当我在Ubuntu上安装了scratchbox交叉编译器时,我已经看到了这种情况。

我现在不知道如何重现它。

4 个答案:

答案 0 :(得分:6)

其他一些响应者已经回答了如何使用环回设备设置挂载,但您明确询问了bind挂载,这有点不同。如果要使用绑定装入,只需在mount命令中指定--bind即可。例如:

mount --bind /original/path /new/path

这将使/original/path 上的文件系统位置也可通过/new/path访问。请注意,这将是以下挂载点!例如,假设我有以下挂载点:

/something
/something/underneath/that

现在假设我为bind安装了/something

mount --bind /something /new_something

我将能够通过路径/something/myfile访问/new_something/myfile等文件。但我能够通过路径/something/underneath/that/otherfile访问/new_something/underneath/that/otherfile等文件。您必须为每个文件系统设置单独的bind安装;或者如果你有一个相对较新的内核,你可以使用rbind坐骑,其中遵循挂载点:

mount --rbind /something /new_something

关于rbind次安装的一个警告:它们不处理在rbind设置后安装文件系统的情况。也就是说,假设我有这样的坐骑:

/something

然后我按照上面设置我的rbind然后我挂载/something/underneath/thatrbind不会神奇地通过{rbind看到新的装载{1}}位置。还要注意,显然由于内核中的错误,您无法卸载rbind挂载。

另外,如果您的意思是“如何使用mount(2)系统调用设置绑定挂载?”:您必须指定MS_BIND标志(在mount.h中定义)致电mount(2)以获得常规bind装载。对于rbind装载,您必须指定MS_BIND和无记录MS_REC标记(在linux/fs.h中定义)。

希望有所帮助,

Eric Melski

答案 1 :(得分:1)

到目前为止看起来所有的答案都是关于在环回设备上安装,而不是使用bind mounts创建循环。

你可能已经发现了,

$ mkdir -p test/test
$ mount --bind test test/test

只允许您访问test/test/test,而不允许您访问$ mount --rbind test test/test 。甚至没有

crossmnt

有效,因为递归绑定装置可以有效地查找源上的现有装载并将它们绑定到目标中。

您所要求的是不可能的,因为绑定装载不会跨越装载点。如果您真的希望模拟文件系统循环,请尝试使用像localfs这样的伪绑定挂载。我没有试过自己,它可能会在尝试读取自己提供的文件系统时锁定。刚才,我尝试使用{{1}}导出一个NFS树并将其安装在自己的下面,但由于类似的原因而失败。

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

您可能还想从头开始创建一个:

首先创建图像文件并初始化

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!