Linux 操作系统原理 — loop 伪设备
目录
Linux 的伪设备
在开发或测试环境中,往往需要新建一些磁盘分区或者设备等,此时对硬盘进行重新划分往往不太方便。在这种情况下,可以通过伪设备来进行模拟。
常见的伪设备包括:
- null
- zero
- full
- loop
- random
- urandom
Loop 设备
在 Linux 中,设备名称按照相应的设备驱动程序的符号表项来进行命名。为 Loop 伪设备被命名为 loopX,例如:/dev/loop0、/dev/loop1。
Linux 默认支持 8 个 Loop 设备,如果超过 8 个,则需要额外的配置。否则会出现 no such device 或 could not find any free loop device 之类的错误。
可以通过修改 modprobe.conf 配置文件,增加如下参数的方式进行扩展:
$ /etc/modprobe.conf
...
options loop max_loop=20
$ modprobe -v loop
- 1
- 2
- 3
- 4
- 5
还有一种扩展 loop 设备数量办法是通过 mknod 指令来创建 loop 设备:
# X 表示第 X 个 loop 设备。
$ mknod -m 0660 /dev/loopX b 7 X
# e.g.
$ mknod -m 0660 /dev/loop8 b 7 8
$ chown root:disk /dev/loop8
- 1
- 2
- 3
- 4
- 5
- 6
使用 losetup -a 指令可以查询目前被使用的 loop 设备:
$ losetup -a
- 1
在使用之前,Loop 设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口允许将文件视为一个 “块设备”(块特殊文件)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。
这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载方式来挂载包含文件系统的文件,这些文件将出现在挂载点目录,使得应用程序可以访问这个文件系统中的文件。
例如,在 OpenStack 开发/测试环境中创建 Cinder 使用的块存储设备。
$ yum install -y device-mapper-persistent-data lvm2
$ systemctl enable lvm2-lvmetad.service && systemctl start lvm2-lvmetad.service && systemctl status lvm2-lvmetad.service
$ mkdir -p /cinder/volumegroup
$ dd if=/dev/zero of=/cinder/volumegroup/volpool01.img count=204800 bs=1MB
$ losetup /dev/loop0 /cinder/volumegroup/volpool01.img
$ pvcreate /dev/loop0
$ vgcreate cinder-volumes /dev/loop0
$ vgs
$ vi /etc/rc.local
...
losetup /dev/loop0 /cinder/volumegroup/volpool01.img
pvcreate /dev/loop0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/120133577
- 点赞
- 收藏
- 关注作者
评论(0)