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

上面图有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磁盘之回环设备的更多相关文章
- centos 安装MATLAB :设置回环设备失败: 没有那个文件或目录
基本参数:centos 7 x86_64,linux 系统, 安装matlab, 已经下载R2016b_glnxa64.iso 但挂载的时候遇到问题: [root@lf mnt]# mount -o ...
- linux文件系统之loop环设备--新建一个文件系统并挂载
1. /dev目录下有所有已经连接到操作系统上的设备,他们能在/dev里出现就表示他们在硬件层面和系统核心层面被识别了.对于stdin.stdout.zero等设备是可以直接用> <这些 ...
- 攻城狮在路上(叁)Linux(二十三)--- linux磁盘参数修改(设备代码、设备名)
一.mknod:设置设备代码 linux中,所有的设备都是用文件来表示,文件通过major与minor数值来判断. major为主设备代码,minor为设备代码(需要查询),示例如下: /dev/hd ...
- 关于Linux的本地回环路由lo [127.0.0.1 ]
最近 打算配开发板的socket通讯,打印环境变量发现却没有 127.0.0.1 / # ifconfig -a eth0 Link encap:Ethernet HWaddr 86:43:C9:A1 ...
- Linux回环接口(loop-back/loopback)
回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...
- Linux回环接口-----(loop-back/loopback)
回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...
- Linux学习笔记之Linux磁盘及文件系统管理笔记
Linux磁盘及文件系统管理 CPU,memory(RAM),I/O i/o: disks,ehtercard disks:持久存储数据 接口类型: IDE(ata): 并口,133MB/s;并行总线 ...
- linux磁盘分区fdisk命令操作(实践)
写这篇的目的,还是要把整个过程完整的记录下来,特别是小细节的地方,通常很多情况是一知半解,平时不实践操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考慢慢你的思路也会打开.练就自己的学习 ...
- Linux磁盘及文件系统管理4
文件系统的使用: 首先要“挂载”:mount命令和umount命令 根据文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”到根文件系统上的某个目录来实现,此关联操作即为“挂载”:此目录即为“ ...
随机推荐
- 道路中心线提取、河道中心线的提取(ArcScan)
道路中心线的提取,相信大家并不陌生. 道路中心线是道路路线几何设计中的重要特征线,也是道路交通管理中的重要控制线. 街区内的道路应考虑消防车道的通行,道路中心线间的距离不宜大于160米. 今儿个,博主 ...
- [root-me](web-client)write up 一个大坑怎么填啊
root-me web-client writeup 地址:www.root-me.org HTML - disabled buttons 打开网页发现按钮不能按,查看源代码,有 'disabled' ...
- Makefile学习(一)
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o ...
- redux和vuex以及dva?
redux: 通过store存储,通过action唯一更改,reducer描述如何更改.dispatch一个action dva: 基于redux,结合redux-saga等中间件进行封装 vuex: ...
- 如果一个 linux 新手想要知道当前系统支持的所有命令的列表,他需要怎么做?
使用命令 compgen -c,可以打印出所有支持的命令列表. [root@localhost ~]$ compgen -cl.lllswhichifthen elseelifficaseesacfo ...
- 数组有没有 length()方法?String 有没有 length()方法?
数组没有 length()方法,有 length 的属性. String 有 length()方法.JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混 ...
- JS Promise对象学习
Promise对象的三个状态 pending(进行中) fulfilled(已成功) rejected(已失败) Promise代表一个异步操作,对象的状态一旦改变,就不会再改变 Promise构造函 ...
- @Qualifier 注解 ?
当有多个相同类型的 bean 却只有一个需要自动装配时,将@Qualifier 注解和 @Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean.
- 表单属性method的值get和post的区别?什么时候用get?什么时候用post?
get和post的区别 一.安全性 因为get会将用户名和密码放在URL中,进而出现在浏览器的历史记录中,显然这种情况应该用post. 二.编码 get只能向服务器发送ASCII字符,而post则可以 ...
- DSP选型
DSP芯片也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法.根据数字信号处理的要求,DSP芯片一般具有如下主要特点: (1)在一个指 ...