loop设备的概念及使用实践

一、什么是loop设备

loop设备是类Unix系统中的一种伪设备,是一种使文件可以模拟为块设备(也称块特殊文件)来访问的技术。
在使用loop设备前,先要将其与需要模拟的文件进行链接,这种链接提供了一系列API使文件可以像块设备一样被用户使用,对这个loop设备的所有读写操作都将被重定向到文件所在的实际磁盘空间进行读写。

二、Loop设备的作用

那么问题来了,文件就在系统目录中我们为什么不直接访问而链接到loop设备上然后再通过loop设备访问呢,loop设备的作用是什么呢?

作用一般有如下三个

1.用于离线管理和编辑系统映像文件

对于.iso格式这样的镜像文件,我们在Linux系统中是无法直接打开读取其中的文件的,那么我们可以通过loop设备将文件映射为一个特殊的块设备,然后再将这个块设备挂载到系统的某个目录下,这样我们就可以通过通常的文件系统接口正常访问其中的文件了。

当然,这个操作的前提是文件要包含一个Linux可识别的文件系统,否则也无法正常访问,比如.iso文件一般包含 iso 9660 文件系统,这是一种CD上用的文件系统,linux是可以识别的。

2.快捷安装操作系统

在loop设备上映射一个包含文件系统的空文件,然后就可以将操作系统安装到文件系统上,而无需对磁盘进行重新分区。

3.提供数据的隔离

loop设备还提供了数据的永久隔离,例如,在更快更方便的硬盘上模拟可移动媒体或封装加密的文件系统时。

三、loop设备使用实践

本实践中将创建一个后端文件系统是f2fs的loop设备,并进行读写访问测试

1.创建一个固定大小的文件

如下命令在家目录下创建了一个200M大小的文件loop_test,其内容全为空字符

dd if=/dev/zero of=~/loop_test bs=1M count=200

其中/dev/zero是“零”设备,可以无限的提供空字符,常用来生成一个特定大小的文件。

2.在文件上建立一个文件系统

我们创建的还只是一个普通文件,现在我们要在loop_test文件上建立一个f2fs文件系统,使用命令

mkfs.f2fs -l f2fs loop_test

完成后的loop_test包含了一个f2fs文件系统,正如一个被刚刚初始化完毕的200 MB 大小的磁盘

3.将文件映射为loop设备

可通过losetup -a查看所有在运行的loop设备,若无输出则说明系统中还没有文件映射被为loop设备

将包含文件系统的文件loop_test映射为loop设备,使用命令

losetup /dev/loop0 ~/loop_test

映射完成后使用lsblk -f命令就可以看到loop_test文件模拟出的块设备loop0,它的文件系统是f2fs
loop设备的概念及使用实践

4.将loop设备挂载到指定目录上

最后我们就可以像访问一个普通的块设备一样将其挂载到指定的系统目录

 mount /dev/loop0 /mnt/loop_test_dir/

再使用lsblk -f命令可以看到loop0已经成功挂载到了/mnt/loop_test_dir目录上。可以发现设备的空间已经被使用了38%,这是f2fs文件系统所占用的空间
loop设备的概念及使用实践

5.读写访问测试

1.写入测试
在目录/mnt/loop_test_dir中新建文件夹,新建文件
loop设备的概念及使用实践
loop设备的概念及使用实践
经测试均可正常写入

2.读取测试

写入操作完成后我们重新映射挂载一下,再看能否正常读取我们写入的数据。

取消挂载

umount /dev/loop0

卸载loop设备

losetup -d /dev/loop0

移除后再使用lsblk -f命令就可以看到设备loop0已经被卸载了。不过此操作只是移除loop设备与文件的映射关系,并不是删除,在/dev目录下依然可以看到loop0。

然后再按照第3、4步重新映射挂载文件
最后再打开/mnt/loop_test_dir目录进行读取测试
loop设备的概念及使用实践
经测试可正常读取数据,实验结束。

参考资料

1.Loop device——wikipedia
2.Device file——wikipedia
3.关于loop设备挂载
4.Linux中的虚拟设备/dev/null、/dev/zero、/dev/random和/dev/urandom

上一篇:matlab中如何对xslx文件进行换行写入


下一篇:Jmeter系列(26)- 常用逻辑控制器(5) | 循环控制器Loop Controller