目录


文章目录


  • 目录
  • Linux 的伪设备
  • Loop 设备


Linux 的伪设备

在开发或测试环境中,往往需要新建一些磁盘分区或者设备等,此时对硬盘进行重新划分往往不太方便。在这种情况下,可以通过伪设备来进行模拟。

常见的伪设备包括:


  • null
  • zero
  • full
  • loop
  • random
  • urandom

Linux 操作系统原理 — loop 伪设备_测试环境

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

还有一种扩展 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

使用 losetup -a 指令可以查询目前被使用的 loop 设备:

$ losetup -a

在使用之前,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