如何在Linux文件系统中创建循环?我想打破Linux文件系统的有向无环图(DAG)属性。这可能吗?当我在Ubuntu上安装了scratchbox交叉编译器时,我已经看到了这种情况。
我现在不知道如何重现它。
答案 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/that
:rbind
不会神奇地通过{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!