其他分享
首页 > 其他分享> > docker与回环设备(loop-back devices)

docker与回环设备(loop-back devices)

作者:互联网

回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟成一个块设备。(磁盘文件 --> 块设备)
创建回环设备即我们所说的创建虚拟块设备。 我们说法很多也叫循环设备。

loop设备(回环设备)是一种伪设备(相对真实的块设备(块设备包括磁盘等)来说),是使用文件来模拟块设备的一种技术(例如:把真实的磁盘文件中某一部分文件,模拟成独立的磁盘使用),文件模拟成块设备后, 就像一个磁盘或光盘一样使用(也有单独的入口,例如:/dev/loop0 这样,而真实的磁盘块文件比如/dev/sda)。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop。

我们看看下面的磁盘情况

 

我们看到回环设备和块设备情况了,如果你没有安装docker,可能就没有loop0,loop1这样的回环设置
可能就是这样(除非我们明确的在系统中创建了回环设置)

想一下一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。

(当然,disk-image 必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)

回环设备就是允许你这样使用一个普通文件。

回环设备以 /dev/loop0、/dev/loop1 等命名。(注意:只有超级用户才有权限设置回环设备)

回环设备的使用与其它任何块设备相同。特别是,你可以在这个设备上创建文件系统并像普通的磁盘一样将它挂载在系统中。这样的一个将全部内容保存在一个普通文件中的文件系统,被称为虚拟文件系统(virtual file system)。
实例机器采样


如果你想建回环设备,首先确认当前系统是否有在使用回环设备
 

/dev/loop0 已经存在,你会得到类似上面面的结果。然后你就需要把 /dev/loop0 替换成 /dev/loop1, 或者再把 /dev/loop1替换成/dev/loop2, 并以此类推,
直到找到一个空的回环设备为止。这时你就可以建/dev/loop2回环设备了.

 

我们拿docker实践来说---docker是通过devicemapper机制创建回环设备


 

同时看下docker info输出

[root@fpvm-DBServer61 storage]# docker info
Containers: 9
Running: 0
Paused: 0
Stopped: 9
Images: 61
Server Version: 18.06.1-ce   #docker的版本信息
Storage Driver: devicemapper  ##采用的存储驱动,这里看到采用的是devicemapper 存储驱动,docker目前支持的存储驱动有:OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS。
                         docker提供了上面几种存储驱动来实现不同的方式存储镜像。有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢? dm是Device Mapper的缩写,Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的,关于dm我另外章节会讲。插入几个图

Pool Name: docker-253:0-1228875-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs     ##回环设备的文件格式,对Docker 来说,backing filesystem 就是/var/lib/docker/所在的文件系统
Udev Sync Supported: true
Data file: /dev/loop0   #loop0回环设备给了 data
Metadata file: /dev/loop1  #loop1回环设备给了metadata,这里存的是容器镜像的大小信息,以及该容器镜像所代表的rootfs等
Data loop file: /mnt/docker/storage/devicemapper/devicemapper/data  ###具体挂载,这个目录地址默认是/var/lib/docker ,我已经改变默认的到了/mnt/docker/storage/下
Metadata loop file: /mnt/docker/storage/devicemapper/devicemapper/metadata
Data Space Used: 17.28GB
Data Space Total: 107.4GB   
Data Space Available: 20.9GB
Metadata Space Used: 15.67MB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.132GB
Thin Pool Minimum Free Space: 10.74GB
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.146-RHEL7 (2018-01-22)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-327.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.66GiB
Name: fpvm-DBServer61
ID: WJF2:VDH3:GEII:QHMF:RMWB:OTKU:FC2H:BEQC:A7BJ:ANBP:FWWM:HD3M
Docker Root Dir: /mnt/docker/storage
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

 


 device mapper 在构建自己的存储设备的时候是通过下面这个流程

 

 

       首先会先创建一个空文件 A(Device mapper 驱动默认会创建一个100G的文件包含镜像和容器。每一个容器被限制在10G大小的卷内,可以自己配置调整,
docker 默认创建的是一个 100G 的空文件), 这个文件有 100G 大,但实际上是一个空文件。
    然后创建一个本地回环设备 loopback0, 这个设备的特点是可以关联这个空文件 A,并且可以把这个 loopback0 挂载出一个设备 B。
   这样任何对 B 的改动都会通过 loopback0 保存在这个文件 A 中。
    



 

标签:文件,back,devices,dev,回环,磁盘,docker,设备
来源: https://www.cnblogs.com/aozhejin/p/15867559.html