回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。(当然,disk-image 必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)回环设备允许你这样使用一个普通文件。

回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。

回环设备的使用与其它任何块设备相同。特别是,你可以在这个设备上创建文件系统并像普通的磁盘一样将它挂载在系统中。这样的一个将全部内容保存在一个普通文件中的文件系统,被称为虚拟文件系统(virtual file system)(译者注:这个用法并不常见。VFS 通常另有所指,如指代 Linux 内核中有关文件系统抽象的代码层次等)。

可以通过下列步骤创建一个虚拟文件系统并通过回环设备挂载:

创建一个用于承载虚拟文件系统的空文件。这个文件的大小将成为挂载后文件系统的大小。
创建指定大小文件的简单方法是通过 dd 命令。这个命令以块为单位(通常为 512 字节)从一个文件向另一个文件复制数据。/dev/zero 文件则是一个很好的数据来源。
要建立一个 10 MB 大的名为 disk-image 的文件可以通过以下命令:
% dd if=/dev/zero of=/tmp/disk-image count=20480
20480+0 records in
20480+0 records out
% ls -l /tmp/disk-image
-rw-rw----     1 root      root       10485760 Mar   8 01:56 /tmp/disk-image
这个新建立的文件被填满了 0 字节。在挂载之前,必须在其上建立一个文件系统。这个过程会建立许多用于组织和存储文件的控制单元并构造根目录结构。
在这个磁盘映像之上可以构建任何类型的文件系统。以创建 ext2 文件系统为例(ext2 是 Linux 系统中最常见的文件系统),用 mke2fs 可以完成这个操作。因为这个命令通常是针对块设备进行操作,当对一个普通文件操作时它会要求确认:
% mke2fs -q /tmp/disk-image
mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
disk-image is not a block special device.
Proceed anyway? (y,n) y
这里 -q 参数用于省略输出有关新建立文件系统的概要信息。如果你想看到这些信息,则请省略这个参数。
现在 disk-image 文件包含了一个新建立的文件系统,正如一个被刚刚初始化完毕的 10 MB 大小的磁盘。
以一个环回设备挂载这个文件系统。方法是使用 mount 命令,指定磁盘文件为被挂载的设备。同时指定 loop=loopback-device 作为 -o 选项的参数,告诉 mount 命令使用哪个回环设备。
下面例子中的命令可用于挂载我们的 disk-image 文件系统。要记住的是只有超级用户可以使用环回设备。第一个命令将创建一个目录 /tmp/virtual-fs,这个目录将被用于挂载我们的文件系统。
% mkdir /tmp/virtual-fs
% mount -o loopback=/dev/loop0 /tmp/disk-image /tmp/virtual-fs
这时,这个设备应该已经被挂载,就如同一个普通的 10M 空间的磁盘一样。
% df -h /tmp/virtual-fs
Filesystem   Size Used Avail Use% Mounted on
/tmp/disk-image 9.7M 13k 9.2M 0% /tmp/virtual-fs
你可以向任何其它磁盘一样使用这个设备:
% cd /tmp/virtual-fs
% echo 'Hello, world!' > test.txt
% ls -l
total 19
drwxr-xr-x 2   root root 12288 Mar 8 02:00 lost+found
-rw-rw---- 1   root root     14 Mar 8 02:12 test.txt
% cat test.txt
Hello, world!
请注意 lost+found 是一个由 mke2fs 自动建立的文件夹一旦文件系统被破坏,部分数据被回复但没有与任何文件关联起来,将被放置在这个文件夹中。。
结束使用后,卸载这个文件系统:
% cd /tmp
% umount /tmp/virtual-fs
你可以删除 disk-image,或者之后再次挂载并使用其中的文件。你甚至可以将这个文件复制到远程主机并在那里挂载、使用——文件系统的内容完全不会受到影响。
除了从新创建一个文件系统,还可以从一个现有的文件系统复制而得到一份映像。例如,可以通过普通的复制操作为一个 CD-ROM 创建一份映像。

如果系统中有一个 IDE 接口的 CD-ROM 驱动器,使用前面说过的设备名如 /dev/hda。如果 CD-ROM 是 SCSI 接口的话,设备文件名可能是 /dev/scd0 之类。系统中也可能包含一个符号链接 /dev/cdrom 指向实际的光驱。请参考 /etc/fstab (译者注: 手册)查看系统实际使用的光驱对应的设备。

接下来要做的仅仅是将这个设备复制为一个文件——得到的文件将是被存在硬盘上的、这个 CD-ROM 内容的完整映像。例如:

% cp /dev/cdrom /tmp/cdrom-image
取决于设备的速度和 CD-ROM 的容量,这个操作可能需要几分钟的时间。最终的文件将会相当大,它的体积与这个 CD-ROM 的容量相同。

这时,你可以在系统中挂载这个光盘而无须插入原始的 CD-ROM 盘片。要挂载在 /mnt/cdrom 目录下:

mount -o loopback=/dev/loop0 /tmp/cdrom-image /mnt/cdrom
因为映像位于磁盘上,这个文件系统的速度将远胜于直接挂载自实际光驱的时候。请注意多数光盘使用的文件系统类型都是   iso9660。

回环设备(loop-back devices)相关推荐

  1. linux umount swap,挂载、卸载、free查看内存情况、创建交换分区、回环设备、dd命令、自动挂载、fuser...

    挂载.卸载 分区.格式化创建了文件系统后就可以挂载了 挂载:将新的文件系统关联至当前根文件系统 卸载:将某文件系统与当前根文件系统的关联关系移除 mount挂载 使用方法: mount 设备 挂载点 ...

  2. linux 增加回环设备,linux命令练习:mount fdisk swap dd创建本地回环设备

    练习一 1.创建一个1G的分区,文件系统为ext4,卷标为MYDATA,块大小为1024,预留管理空间为磁盘 分区的3%,要求开机后制动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用. f ...

  3. ubuntu(Linux)使用losetup创建虚拟磁盘(挂载,格式化虚拟磁盘,回环设备)

    创建一个200M的磁盘 dd if=/dev/zero of=~/HDD.img bs=1M count=200 使用fdisk对其进行分区 fdisk HDD.img 使用losetup创建loop ...

  4. 什么是lo本地回环?

    本地回环地址指的是以127开头的地址(127.0.0.1 – 127.255.255.254),通常用127.0.0.1来表示. 127.0.0.1,通常被称为本地回环地址(Loop back add ...

  5. linux中的lo介绍及作用(回环接口 回环IP)

    Linux回环IP地址lo的作用https://www.cnblogs.com/ArcherWuAIot/p/16359864.html 1.什么是LO接口? 在LINUX系统中,除了网络接口eth0 ...

  6. mysql本地回环_路由器与本地回环地址的区别

    本地回环地址 127.0.0.1通常被称为本地回环地址(Loop back address),它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口. 在windows操作系统中也有相似的定义, ...

  7. linux 回环接口实现,Linux回环接口-----(loop-back/loopback)

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

  8. [转载]回环接口(loop-back/loopback)

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

  9. 基于 2D 激光雷达和实时回环优化的 SLAM 算法

    基于 2D 激光雷达和实时回环优化的 SLAM 算法 原文: https://www.ixueshu.com/document/771d692c7d3c0c40318947a18e7f9386.htm ...

最新文章

  1. 001.搭建开发环境
  2. tensorflow调用问题解决
  3. 总分第一!阿里云数据库应用迁移解决方案通过信通院首批最高级评测
  4. vi编辑器的学习使用(十三)
  5. Django的静态资源
  6. 通过图片 找到桌面相同图片区域坐标_【Axure RP9原型案例】京东与淘宝的商品图片是如何被放大的...
  7. leetcode108 将有序数组转换为二叉搜索树
  8. [Android]Thread线程入门3--多线程
  9. 我和阿里巴巴的孽缘(一)
  10. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示
  11. TCP/IP协议学习(四) 基于C# Socket的Web服务器---静态资源处理
  12. 内码输入法手机版下载_内码输入法
  13. 常用计算机操作技巧与方法ppt,相见恨晚的20个常用PPT小技巧
  14. 莫烦 pytorch
  15. 7种常用数据分析方法 (下)
  16. 4个常用Linux开发环境工具,你最常用的是那个?
  17. 高性能服务器设计——常用网络服务器设计模型
  18. 元素化学期末(考点)整理
  19. 发改委指导意见保障大豆产业安全
  20. 万维钢:但是人终将老去

热门文章

  1. windows 下oracle 数据库 rman 备份
  2. Win XP必须禁止的服务
  3. windows 批处理
  4. mysql复制安全性_从MySQL复制功能中得到一举三得实惠
  5. svn redis和rabbitmq服务启动
  6. mysql查询结果每条记录两个字段求和_MYSQL实现将两个结果集合并,并且按照时间字段分组,其他字段的值求和...
  7. (JAVA)格式化输出日期
  8. three20 TTTableViewController + TTActionSheetController
  9. Oracle 客户端连接服务器[转]
  10. iOS项目开发— CoreLocation的定位服务和地理编码与发编码实现