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命令 根据文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”到根文件系统上的某个目录来实现,此关联操作即为“挂载”:此目录即为“ ...
随机推荐
- [ Shell ] 两个 case 实现 GetOptions 效果
https://www.cnblogs.com/yeungchie/ 可以用 getopt,但我还是喜欢自己写这个过程,便于我够控制更多细节. 下面要实现的效果是,从命令行参数中分析,给 $libNa ...
- 在/etc/docker/下 创建daemon.json重新加载后docker无法启动问题 /etc/docker/daemon.json编辑不了 找不到
可能产生这个问题的原因至少有以下几个: 编辑daemon.json步骤不对:想要创建并编辑daemon.json,应该是先启动docker服务,此时系统自动产生/etc/docker目录,此时cat生 ...
- 开源版-阿里云人脸搜索M:N,人脸比对1:1
一.人脸搜索概要 本项目是阿里云视觉智能开放平台的人脸1:N的开源替代,项目中使用的模型均为开源模型,项目支持milvus和proxima向量存储库,并具有较高的自定义能力. 项目使用纯Java开发, ...
- 无传感FOC控制中的转子位置和速度确定方法一
使用PLL估算器在无感的情况下,估计转子的角度和角速度 PLL估算器的工作原理基于反电动势的d分量在稳态下等于零,其框图如下: ΚΦ 表示电压常量,下面给出了电气转速计算中使用的归 一化 ΚΦ : ...
- 基于COLA架构的电商财务系统-总
财务 清算-clearing 对账-check 结算-settle 平账-correct 划拨-remit 包划分 按照COLA规则进行划分,综合考虑功能和领域两个维度包结构定义 技术参考 dddpl ...
- 同一套代码部署多个实例来并行完成mysql某项任务,且避免重复执行
我经常会碰到一些耗时较长的任务,譬如更新5千万条表数据中的某个字段,代码中可以通过分页依次读取db,然后更新即可.但是耗时极长,那么能否通过将代码部署多个实例,譬如启动多个docker来并行执行任务, ...
- 在Spring的事务体系中,事务传播特性:Required和RequiresNew有何不同?
Required 如果当前存在一个事务,则加入当前事务.如果不存在任何事务,则创建一个新的事务.总之,要至少保证在一个事务中运行.PROPAGATION_REQUIRED通常作为默认的事务传播行为.p ...
- springBoot 多配置文件切换之profile
说明: 我们平时工作,有开发环境,和生产环境,利用springboot的多profile配置,可以很轻松切换配置. 实现方式1(推荐): 配置文件命名遵循:application-{开发模式}.pro ...
- 怎么根据Comparable方法中的compareTo方法的返回值的正负 判断升序 还是 降序?
public int compareTo(Student o) { return this.age - o.age; // 比较年龄(年龄的升序) } 应该理解成return (-1)×(thi ...
- Ls 命令执行什么功能? 可以带哪些参数,有什么区别?
ls 执行的功能: 列出指定目录中的目录,以及文件哪些参数以及区别: a 所有文件 l 详细信息,包括大小字节数,可读可写可执行的权限等