如何在 Fedora 19 上添加更多 /dev/loop* 设备

use*_*372 13 linux fedora kernel loop-device

如何在 Fedora 19 上添加更多 /dev/loop* 设备?我愿意:

# uname -r
3.11.2-201.fc19.x86_64
# lsmod |grep loop

# ls /dev/loop*
/dev/loop0  /dev/loop1  /dev/loop2  /dev/loop3  /dev/loop4  /dev/loop5  /dev/loop6  /dev/loop7  /dev/loop-control
# modprobe loop max_loop=128
# ls /dev/loop*
/dev/loop0  /dev/loop1  /dev/loop2  /dev/loop3  /dev/loop4  /dev/loop5  /dev/loop6  /dev/loop7  /dev/loop-control
Run Code Online (Sandbox Code Playgroud)

所以什么都没有改变。

nco*_*lan 17

当您以 root 身份运行它时,losetup -f如果没有可用的免费循环设备,它将根据需要自动创建循环设备。

因此,与其自己使用mknod,创建新循环设备的最简单方法是使用sudo losetup -f. 如果存在,这种方法将为您提供一个免费的现有循环设备,或者如果需要自动创建一个新的循环设备。


小智 10

您必须/dev使用 mknod创建设备节点。中的设备节点dev具有类型(块、字符等)、主编号和次编号。您可以通过执行ls -l /dev/loop0以下操作找出类型和主要编号:

user@foo:/sys# ls -l /dev/loop0
brw-rw---- 1 root disk 7, 0 Oct  8 08:12 /dev/loop0
Run Code Online (Sandbox Code Playgroud)

这意味着循环设备节点的块类型和主编号应为 7。每个设备节点的次编号从 0 开始递增 1,因此 loop0 只是 0,而 loop7 是 7。

要创建 loop8,您以 root 身份运行 command mknod -m 0660 /dev/loop8 b 7 8。这将创建/dev/loop8具有沿-m交换机指定的权限的设备节点(这不是必需的,因为您可能正在运行桌面系统,但最好不要让每个人都读取和写入您的设备节点)。

  • 您忘记了名称后面的节点类型,因此命令应该是“mknod -m 0660 /dev/loop8 b 7 8”。 (2认同)

Zni*_*nik 7

呵呵,不完整:) 只需使用此脚本添加新的 /dev/loops 即可。请记住,对于更改数字,脚本会进行第 63 次循环,从第 8 次开始,因为默认情况下会进行 0-7。注意,权限是从 /dev/loop0 复制的:)

for i in {8..63}; do if [ -e /dev/loop$i ]; then continue; fi; \
mknod /dev/loop$i b 7 $i; chown --reference=/dev/loop0 /dev/loop$i; \
chmod --reference=/dev/loop0 /dev/loop$i; done
Run Code Online (Sandbox Code Playgroud)

注意,以上食谱是2014年的。现在是 2023 年 :) 当前开发的内核通过 devfs 虚拟文件系统创建所有 /dev/ 设备。为了向后兼容,它会自动显示 0 到 7 个循环设备,但会在需要时创建其他循环设备。目前,1 字节次要编号编码的循环设备数量没有限制。现代内核支持 2 字节次要编号,则限制为 65535 个设备。

目前,这用于 Docker 或 K8S 容器的联合文件系统中。

最后,现代系统的秘诀毫无用处