losetup 命令
losetup 可以查看,绑定,删除绑定 loop 设备
使用简介
$ losetup -h
Usage:
losetup loop_device give info
losetup -a | --all list all used
losetup -d | --detach <loopdev> [<loopdev> ...] delete
losetup -f | --find find unused
losetup -c | --set-capacity <loopdev> resize
losetup -j | --associated <file> [-o <num>] list all associated with <file>
losetup [ options ] {-f|--find|loopdev} <file> setup
使用示例
列出信息
$ sudo losetup /dev/loop0 /dev/loop0: [0802]:427838 (/tmp/t.img)
-a 列出所有被用的 loop 设备
$ sudo losetup -a /dev/loop0: [0802]:427838 (/tmp/t.img) /dev/loop1: [0802]:427851 (/tmp/t.img) /dev/loop2: [0802]:427851 (/tmp/t.img) /dev/loop3: [0802]:427861 (/tmp/t.img) /dev/loop4: [0802]:427859 (/tmp/t.img) /dev/loop5: [0802]:427854 (/tmp/t.img) /dev/loop6: [0802]:145969 (/var/tmp/imgcreate-JgO44D/tmp-9t8yIf/ext3fs.img) /dev/loop7: [0802]:145992 (/var/tmp/imgcreate-XtRYay/tmp-l1519K/ext3fs.img)
-f 查找一个可用的 loop 设备
$ sudo losetup -f
-d 删除绑定
$ sudo losetup -d /dev/loop0 $ sudo losetup /dev/loop0 loop: 无法获取设备 /dev/loop0 的信息:没有那个设备或地址 $ sudo losetup -f /dev/loop0
FAQ
"找不到可用的 loop 设备"
有时候会因为默认的几个 loop 设备用尽而遇到错误,一般此时运行 "losetup -f" 去查找可用 loop 设备会出现错误:
$ sudo losetup -f losetup: 找不到可用的 loop 设备
我们可以使用 "losetup /dev/loopX" 查看这些设备都和谁bind了:
$ sudo losetup /dev/loop0 /dev/loop0: [0802]:427838 (/tmp/t.img)
也可以使用 "losetup -a" 列出所有被用的 loop 设备:
$ sudo losetup -a /dev/loop0: [0802]:427838 (/tmp/t.img) /dev/loop1: [0802]:427851 (/tmp/t.img) /dev/loop2: [0802]:427851 (/tmp/t.img) /dev/loop3: [0802]:427861 (/tmp/t.img) /dev/loop4: [0802]:427859 (/tmp/t.img) /dev/loop5: [0802]:427854 (/tmp/t.img) /dev/loop6: [0802]:145969 (/var/tmp/imgcreate-JgO44D/tmp-9t8yIf/ext3fs.img) /dev/loop7: [0802]:145992 (/var/tmp/imgcreate-XtRYay/tmp-l1519K/ext3fs.img)
删除不需要的绑定:
$ for i in 1 2 3 4 5 6 7;do sudo losetup /dev/loop$i;done /dev/loop1: [0802]:427851 (/tmp/t.img) /dev/loop2: [0802]:427851 (/tmp/t.img) /dev/loop3: [0802]:427861 (/tmp/t.img) /dev/loop4: [0802]:427859 (/tmp/t.img) /dev/loop5: [0802]:427854 (/tmp/t.img) /dev/loop6: [0802]:145969 (/var/tmp/imgcreate-JgO44D/tmp-9t8yIf/ext3fs.img) /dev/loop7: [0802]:145992 (/var/tmp/imgcreate-XtRYay/tmp-l1519K/ext3fs.img) $ for i in 1 2 3 4 5 6 7;do sudo losetup -d /dev/loop$i;done
如果是 fedora/rhel/centos 等系统,可以参考下面一个帖子增加 loop 设备:
They're the one serving the loop devices in use. So you exausted the free loop devices. Free one (umount any in use) and try again. You can see what is being used by a loop device with losetup: # losetup /dev/loop0 /dev/loop0: [fd06]:234921356 (/linux/isos/backtrack.iso) It is possible to increase the number of available loop devices. Free all loop devices, and add a line with the following to /etc/modprobe.conf: options loop max_loop=64 (maximum is 256) Then, do: rmmod loop && modprobe loop If you get an error that the module couldn't be removed, you still have loop devices in use. Newer kernels (2.6.21 or 2.6.22) use a dynamic allocation of loop devices, so you will only have to create the filesystem representation of the devices: for ((i=8;i<64;i++)); do [ -e /dev/loop$i ] || mknod -m 0600 /dev/loop$i b 7 $i done
