为什么要讲回环设备,下面看下系统的采样情况

上面图有loop0,loop1等设备标记,这些是什么?
看看下面fdisk -l 的结果,乱糟糟的一堆?

什么是回环设备?  上面的loop0, loop1就是。

回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟成一个块设备。(磁盘文件 --> 块设备)
创建回环设备即我们所说的创建虚拟块设备(虚拟块设备也说仿真块设备,类似模拟一块磁盘)。 我们有时候也叫循环设备。

loop设备(回环设备)是一种伪设备(相对真实的块设备(块设备包括磁盘等)来说),是使用文件来模拟块设备的一种技术(例如:把真实的磁盘文件中某一部分文件,模拟成独立的磁盘使用),文件模拟成块设备后, 就像一个磁盘或光盘一样使用(也有单独的入口,例如:/dev/loop0 这样,而真实的磁盘块文件比如/dev/sda)。在使用之前,一个 loop 设备必须要和一个文件进行连接(例如: 用losetup命令来把常规文件或块设备(/dev/loop0)关联到一个loop文件,loop文件可以是*.iso或者*.img或目录等)。
       例如: $losetup /dev/loop0  /var/lib/my/images/my.img
  如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被mount 起来(mount到根下的某一个目录使用)。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount起来的镜像文件(*.iso或者*.img等)它本身也包含有文件系统,通过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回环设备了.

[root@fp-web-130 mnt]#  losetup -f  //查看哪个loop设备是空闲的

我们拿docker实践来说---docker是默认通过devicemapper存储机制创建回环设备(其他存储机制还有OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS等)


同时看下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 中。

创建一个虚拟块设备例子 

1、检查下哪个回环设备有空闲

[root@fp-web-130 mnt]# losetup -f

/dev/loop2

2、制作img镜像
[root@fp-web-130 src]# dd if=/dev/zero of=my.img count=2000

2000+0 records in

2000+0 records out

1024000 bytes (1.0 MB) copied, 0.00305511 s, 335 MB/s
3、查看生成的镜像

[root@fp-web-130 src]# ll

total 1000

-rw-r--r-- 1 root root 1024000 Feb  9 00:22 my.img
4、格式化镜像

[root@fp-web-130 src]# mkfs.ext3 my.img

mke2fs 1.42.9 (28-Dec-2013)

my.img is not a block special device.

Proceed anyway? (y,n) y  //这里输入y ,继续

Filesystem too small for a journal

Discarding device blocks: done

Filesystem label=

OS type: Linux

Block size=1024 (log=0)

Fragment size=1024 (log=0)

Stride=0 blocks, Stripe width=0 blocks

128 inodes, 1000 blocks

50 blocks (5.00%) reserved for the super user

First data block=1

Maximum filesystem blocks=1048576

1 block group

8192 blocks per group, 8192 fragments per group

128 inodes per group

Allocating group tables: done

Writing inode tables: done

Writing superblocks and filesystem accounting information: done

//查看格式化之后的镜像

[root@fp-web-130 src]# ll

total 144

-rw-r--r-- 1 root root 1024000 Feb  9 00:23 my.img

开始把img文件模拟成设备
[root@fp-web-130 src]#losetup /dev/loop2 my.img

//查看执行后的结果

//创建挂载目录

[root@fp-web-130 src]# mkdir /mnt/loop2test

//挂载
[root@fp-web-130 src]# mount /dev/loop2 /mnt/loop2test

执行卸载
[root@fp-web-130 /]#umount /mnt/loop2test/
//删除回环设备
[root@fp-web-130 /]#losetup -d loop2

查看结果,loop2已经没有了

linux磁盘之回环设备的更多相关文章

  1. centos 安装MATLAB :设置回环设备失败: 没有那个文件或目录

    基本参数:centos 7 x86_64,linux 系统, 安装matlab, 已经下载R2016b_glnxa64.iso 但挂载的时候遇到问题: [root@lf mnt]# mount -o  ...

  2. linux文件系统之loop环设备--新建一个文件系统并挂载

    1.  /dev目录下有所有已经连接到操作系统上的设备,他们能在/dev里出现就表示他们在硬件层面和系统核心层面被识别了.对于stdin.stdout.zero等设备是可以直接用> <这些 ...

  3. 攻城狮在路上(叁)Linux(二十三)--- linux磁盘参数修改(设备代码、设备名)

    一.mknod:设置设备代码 linux中,所有的设备都是用文件来表示,文件通过major与minor数值来判断. major为主设备代码,minor为设备代码(需要查询),示例如下: /dev/hd ...

  4. 关于Linux的本地回环路由lo [127.0.0.1 ]

    最近 打算配开发板的socket通讯,打印环境变量发现却没有 127.0.0.1 / # ifconfig -a eth0 Link encap:Ethernet HWaddr 86:43:C9:A1 ...

  5. Linux回环接口(loop-back/loopback)

    回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...

  6. Linux回环接口-----(loop-back/loopback)

    回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...

  7. Linux学习笔记之Linux磁盘及文件系统管理笔记

    Linux磁盘及文件系统管理 CPU,memory(RAM),I/O i/o: disks,ehtercard disks:持久存储数据 接口类型: IDE(ata): 并口,133MB/s;并行总线 ...

  8. linux磁盘分区fdisk命令操作(实践)

    写这篇的目的,还是要把整个过程完整的记录下来,特别是小细节的地方,通常很多情况是一知半解,平时不实践操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考慢慢你的思路也会打开.练就自己的学习 ...

  9. Linux磁盘及文件系统管理4

    文件系统的使用: 首先要“挂载”:mount命令和umount命令 根据文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”到根文件系统上的某个目录来实现,此关联操作即为“挂载”:此目录即为“ ...

随机推荐

  1. pygame坦克大战前夕

    最近想自己写pygame版的坦克大战,今晚已经完成如下功能: 1,我方坦克,可手动移动:敌方坦克,自动转方向与移动 2,坦克颜色随机,坦克形态大小可调. 3,双方坦克速度可调. 4,刷新坦克的位置随机 ...

  2. IIS短文件猜解

    1.IIS短文件漏洞 Microsoft IIS 短文件/文件夹名称信息泄漏最开始由Vulnerability Research Team(漏洞研究团队)的Soroush Dalili在2010年8月 ...

  3. C/C++ 文件读写

    •前言 第一次接触文件读写是在大一的C语言教材中,当时哼哧吧唧的学的贼费劲,虽然最后也学会了,但好像没怎么用过. 在后来,就是在OJ上刷题的时候,编写的代码有时候连样例都不能通过: 这个时候就需要各种 ...

  4. java面向对象思想之继承

    一.什么是继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.可以联系生活进行理解,相当于父亲和儿子的关系.父亲有的属 ...

  5. nginx反向代理失败,又是 fastdfs 的锅

    fdfs问题记录 [root@hostcad logs]# systemctl status fdfs_trackerd.service ● fdfs_trackerd.service - LSB: ...

  6. Mysql的索引及优化

    一:四种存储引擎: mysql使用 show engines查询其存储引擎: 功  能 MYISAM Memory InnoDB Archive 存储限制 256TB RAM 64TB None 支持 ...

  7. Spring MVC的异常处理 ?

    可以将异常抛给Spring框架,由Spring框架来处理:我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可.

  8. 在 Spring中如何注入一个java集合?

    Spring提供以下几种集合的配置元素: 类型用于注入一列值,允许有相同的值. 类型用于注入一组值,不允许有相同的值. 类型用于注入一组键值对,键和值都可以为任意类型. 类型用于注入一组键值对,键和值 ...

  9. 说说for循环的两种写法

    for循环 执行多次,条件写在()里,语法形式: 1 2 3 for(计数器变量;条件;计数器增减){ // 将要执行的代码 } 示例: 1 2 3 for (int i = 0; i < 5; ...

  10. vue 初识(基础语法与数据驱动模型)

    1.es6的语法 let 特点: 1.局部作用域 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.局部作用域 2.不会存在变量提升 3.不能重复声明,只声明常量 不可变的量 模板字 ...