`
fanrey
  • 浏览: 252081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

loop设备

 
阅读更多
loop 设备介绍
在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。

在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。

上面说的文件格式,我们经常见到的是 CD 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。

至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。

在 Linux 里,loop 设备的设备名形如:

ls /dev/loop*
/dev/loop0  /dev/loop2  /dev/loop4  /dev/loop6
/dev/loop1  /dev/loop3  /dev/loop5  /dev/loop7
... ...

例如,要在一个目录下 mount 一个包含有磁盘镜像的文件,需要分 2 步走:

losetup /dev/loop0 disk.img           #使磁盘镜像文件与循环设备连结起来
mount /dev/loop0 /home/user/disk_test   #将循环设备 mount 到目录 disk_test 下

经过上面的两个命令后,镜像文件就如同一个文件系统挂载在 disk_test 目录下,当然我们也可以往镜像里面添加文件。

其实上面的两个步骤可以写成一个步骤:

mount -t minix -o loop ./disk.img ./disk_test

其中,加了 -o loop 指定后,那么也就相当于执行了第一行的 losetup 命令。做一个简单的试验可以证明一点,首先分开执行 losetup 和 mount 命令,那么我们看到我们可以 mount 的是 /dev/loop0 这个设备。当我们在 mount 中指定参数 -o loop 时,镜像文件其实已和 /dev/loop1 相关联,这里我们在挂载镜像文件后,尝试再执行一下 mount -t minix /dev/loop1 ./disk_test 来验证,它会得到提示:

linux-z13e:/usr/local/share/bochs/Linux011/temp # mount -t minix /dev/loop1 ./test_dir/
mount: /dev/loop1 already mounted or ./test_dir/ busy
mount: according to mtab, /dev/loop1 is already mounted on /usr/local/share/bochs/Linux011/temp/test_dir


最后,要卸载的话,就直接 umount /dev/loop0 即可。

一个完整测试实例:

1. 首先创建一个 1M 大小的空文件:

root@ubuntu-VirtualBox:~# dd if=/dev/zero of=loopfile.img bs=1024 1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.108024 s, 9.7 MB/s

2. 对该文件格式化为 ext4 格式:

root@ubuntu-VirtualBox:~# mkfs.ext4 loopfile.img
mke2fs 1.41.14 (22-Dec-2010)
loopfile.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128 inodes, 1024 blocks
51 blocks (4.98%) 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

Writing inode tables: done                           

Filesystem too small for a journal
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


3. 用 file 命令查看下格式化后的文件类型:

root@ubuntu-VirtualBox:~# file loopfile.img
loopfile.img: Linux rev 1.0 ext2 filesystem data, UUID=47778640-92ca-4557-94d6-885c3aa57397 (extents) (huge files)

4. 准备将上面的文件挂载起来:

mkdir /mnt/initrd
mkdir /mnt/loopfile

mount -o loop loopfile.img /mnt/initrd/
mount -o loop loopfile.img /mnt/loopfile

root@ubuntu-VirtualBox:~# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/ubuntu/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=ubuntu)

/dev/loop0 on /mnt/initrd type ext4 (rw)
/dev/loop1 on /mnt/loopfile type ext4 (rw)


mount 命令的 -o loop 选项可以将任意一个 loopback 文件系统挂载。

上面的 mount 命令实际等价于下面两条命令:

# losetup /dev/loop0 loopfile.img
# mount /dev/loop0 /mnt/loopfile

因此实际上,mount -o loop 在内部已经默认的将文件和 /dev/loop0 挂载起来了。

然而对于第一种方法(mount -o loop)并不能适用于所有的场景。比如,我们想创建一个硬盘文件,然后对该文件进行分区,接着挂载其中一个子分区,这时就不能用 -o loop 这种方法了。因此必须如下做:

# losetup /dev/loop1 loopfile.img
# fdisk /dev/loop1


5. 卸载挂载点

# umount /mnt/loopfile
分享到:
评论

相关推荐

    ubuntu 下修改XEN loop device数目限制问题.

    ubuntu 修改XEN loop device数目限制问题.在虚拟机克隆时候的数量问题

    cloop:cloop 压缩环回块设备内核模块和实用程序

    这是 cloop,一个内核模块,用于添加对文件系统独立、透明解压、只读块设备的支持。 原作者:Paul 'Rusty' Russel 扩展、错误修正和更新的内核:Klaus Knopper ( ) 安装: make KERNEL_DIR=/path/to/linux-kernel...

    losetup命令 设置循环设备

    losetup命令用来设置循环设备,查看回环设备的状态。...[root@linuxcool ~]# losetup /dev/loop1 floppy.img 与该功能相关的Linux命令:mknod命令 – 创建字符设备文件和块设备文件gdisk命令 – 交互式GPT操纵器q

    Docker daemon 无法启动: does not match with stored UUID错误解决办法

     Docker 默认使用loop设备存储镜像。使用/var/lib/docker存储。但是当根分区不够大的时候(Centos7默认安装只有50G),那就麻烦了。 这里提供下修改方法(以centos7操作系统为例): 1. systemctl stop docker 2. ...

    Skyworks发布Helios 3 Polar Loop EDGE射频子系统

    宣布推出Helios 3——带数字RF(DigRF)接口的Polar Loop EDGE RF子系统,它是迄今市场上体积、效用的产品,也是其Helios系列的无线电解决方案。其架构将外部组件的数目降至,并大大降低了实施带数字接口的完整...

    Loop Messenger-crx插件

    关于Loop Flow Loop Flow –一个私人消息传递平台,允许招聘,人力资源和管理团队通过文本消息传递来利用移动设备的即时性,并通过支持以下功能来提高效率:作业警报,面试提醒,应用程序状态更新,直观的文本流,和...

    linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random)

    主要介绍了linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random),需要的朋友可以参考下

    Kloop Organize-crx插件

    Kloop是一项免费服务,可在所有设备上研究,保存和组织您喜欢的网页。 试图找到更多关于您真正重要的文章? Kloop的相关文章可以提供帮助。 Kloop实时收集与您当前正在浏览的页面相似的网页! 书签服务与相关文章相...

    Loop Picker(iPhone源代码)

    来源:未知Licence:Unspecified平台:iOS设备:iPhone / iPad作者:Paul Ingendorf  实现无限循环滚动的选择器(picker)。比如,循环显示0、1、2、3、4、0、1、2、3、4、0... Code4App编译测试,适用环境:...

    使用 MATLAB 和 FPGA-in-the-Loop 设计滤波器。:在 FPGA 上设计、测试、验证和实现滤波器的工作流程。-matlab开发

    该项目描述了设计滤波器并在FPGA上实现滤波器的整个工作流程。 - 研究过滤器要求。 - 使用过滤器设计器工具... - 使用 FPGA-in-the-Loop 验证相应设备上的滤波器- 在 Vivado 设计中集成滤波器并在应用程序上进行测试。

    HTML5的音频播放组件,兼容解决iOS系统下自动播放(autoplay)和循环播放(loop)的问题.zip

    硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式...

    HC05蓝牙模块特点及使用介绍

    HC05蓝牙模块是一款主从一体的蓝牙模块,它可以充当三种角色,分别是Slave(从角色)、Master(主角色)和Slave-Loop(回环...Slave-Loop(回环角色):被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备。

    game-loop:实现与帧速率无关的游戏循环的 Rust crate

    游戏循环 实现与帧速率无关的游戏循环的 Rust crate。 该代码基于 ,它非常轻量级,支持本机执行和编译到 wasm。 用法 use game_loop :: game_... 如果启用了 vsync 或为了节省移动设备的电量,这可能很有用。 值0.

    路由器打环测试.doc

    比如可能需要 在DTU设备上做某几个针脚的短接,也可能只需要在某cisco路由器中设置一条命令就可以 ,命令格式: interface pos 1/0 loop line or.. interface pos 1/0 loop internal 打上环路后,用show interface XX,...

    Skyworks推出Helios 3 Polar Loop EDGE射频子系统

    宣布推出Helios 3——带数字RF(DigRF)接口的Polar Loop EDGE RF子系统,它是迄今市场上体积、效用的产品,也是其Helios系列的无线电解决方案。其架构将外部组件的数目降至,并大大降低了实施带数字接口的完整射频...

    RFID技术中的Skyworks推出Helios 3 Polar Loop EDGE射频子系统

    宣布推出Helios 3——带数字RF(DigRF)接口的Polar Loop EDGE RF子系统,它是迄今市场上体积最小、效用最高的产品,也是其Helios系列最新的无线电解决方案。其架构将外部组件的数目降至最低,并大大降低了实施带数字...

    RFID技术中的Skyworks发布Helios 3 Polar Loop EDGE射频子系统

    宣布推出Helios 3——带数字RF(DigRF)接口的Polar Loop EDGE RF子系统,它是迄今市场上体积最小、效用最高的产品,也是其Helios系列最新的无线电解决方案。其架构将外部组件的数目降至最低,并大大降低了实施带...

    通信与网络中的Skyworks推出体积最小和带DigRF接口的Polar Loop EDGE RF子系统

    Skyworks Solutions宣布推出 Helios:trade_mark: 3 - 带数字 RF (DigRF) 接口的 Polar Loop:trade_mark: EDGE RF 子系统,它是迄今市场上体积最小、效用最高的产品,也是其 Helios:trade_mark: 系列最新的无线电...

    community-service-loop

    使用Peppermint Garden和薄荷犀牛熟悉的设备(通过剪贴画熟悉的千斤顶)作为复杂糖果的来源,用于合成:学习和合成:智能 需要接触史莱姆管中准备好史莱姆母亲的氏族才能获得内精灵,目前已成为霍博波利斯度假屋的...

Global site tag (gtag.js) - Google Analytics