上面图有loop0,loop1等设备标记,这些是什么?看看下面fdisk-l的结果,乱糟糟的一堆?
什么是回环设备?上面的loop0,loop1就是。
想一下一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为disk-image的普通文件而非操作实际磁盘或分区的轨道和扇区。
(当然,disk-image必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)
/dev/loop0已经存在,你会得到类似上面面的结果。然后你就需要把/dev/loop0替换成/dev/loop1,或者再把/dev/loop1替换成/dev/loop2,并以此类推,直到找到一个空的回环设备为止。这时你就可以建/dev/loop2回环设备了.
我们拿docker实践来说---docker是默认通过devicemapper存储机制创建回环设备(其他存储机制还有OverlayFS,AUFS,Btrfs,DeviceMapper,VFS,ZFS等)
同时看下dockerinfo输出
devicemapper在构建自己的存储设备的时候是通过下面这个流程
首先会先创建一个空文件A(Devicemapper驱动默认会创建一个100G的文件包含镜像和容器。每一个容器被限制在10G大小的卷内,可以自己配置调整,docker默认创建的是一个100G的空文件),这个文件有100G大,但实际上是一个空文件。然后创建一个本地回环设备loopback0,这个设备的特点是可以关联这个空文件A,并且可以把这个loopback0挂载出一个设备B。这样任何对B的改动都会通过loopback0保存在这个文件A中。
创建一个虚拟块设备例子
1、检查下哪个回环设备有空闲
[root@fp-web-130mnt]#losetup-f
/dev/loop2
2、制作img镜像[root@fp-web-130src]#ddif=/dev/zeroof=my.imgcount=2000
2000+0recordsin
2000+0recordsout
1024000bytes(1.0MB)copied,0.00305511s,335MB/s3、查看生成的镜像
[root@fp-web-130src]#ll
total1000
-rw-r--r--1rootroot1024000Feb900:22my.img4、格式化镜像
[root@fp-web-130src]#mkfs.ext3my.img
mke2fs1.42.9(28-Dec-2013)
my.imgisnotablockspecialdevice.
Proceedanyway(y,n)y//这里输入y,继续
Filesystemtoosmallforajournal
Discardingdeviceblocks:done
Filesystemlabel=
OStype:Linux
Blocksize=1024(log=0)
Fragmentsize=1024(log=0)
Stride=0blocks,Stripewidth=0blocks
128inodes,1000blocks
50blocks(5.00%)reservedforthesuperuser
Firstdatablock=1
Maximumfilesystemblocks=1048576
1blockgroup
8192blockspergroup,8192fragmentspergroup
128inodespergroup
Allocatinggrouptables:done
Writinginodetables:done
Writingsuperblocksandfilesystemaccountinginformation:done//查看格式化之后的镜像