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
分享到:
相关推荐
然而,XEN默认对loop设备的数量有一定的限制,可能会在克隆虚拟机时遇到问题,因为每个虚拟机可能需要一个或多个loop设备。为了解决这个问题,我们需要修改Ubuntu系统中XEN的loop设备数目限制。 首先,打开GRUB配置...
在Linux操作系统中,Loop设备是一种特殊的文件系统,它允许用户将一个普通文件(例如一个包含文件系统的映像文件)挂载为一个块设备。这意味着用户可以在不使用物理媒介的情况下,对文件进行挂载并访问其内部的文件...
### Linux挂载IMG镜像文件详解 ...整个过程包括了查找可用的loop设备、创建loop设备、查看镜像信息、计算偏移量以及最终的挂载操作。掌握这些步骤对于管理和使用Linux环境下的虚拟磁盘和镜像文件具有重要意义。
kpartx 命令可以用来建立块设备文件中的磁盘分区与 loop 设备的对应。kpartx 命令的格式如下:kpartx [-a|-d|-l] [-v] wholedisk。其中,-a 选项用于添加分区 devmappings,-d 选项用于删除分区 devmappings,-l ...
- `losetup -a`:列出所有已连接的loop设备。 **创建数据库** 1. **创建数据库软件必要条件**: 安装Oracle数据库软件,确保所有依赖项已满足。 2. **上传Oracle软件及补丁**: 将Oracle数据库软件和必要的补丁...
- 创建一个临时目录,如`/mnt/loop`,作为loop设备的挂载点。 2. **创建文件系统映象**: - 使用`dd`命令创建一个特定大小的文件,例如15MB,初始化为零,这将作为文件系统映象。 3. **关联loop设备**: - 使用...
在创建过程中,`losetup`命令的作用至关重要,它将一个普通文件与一个loop设备关联,使得这个普通文件可以被当作一个块设备来操作,从而能够被格式化和挂载。在第3步中,`/tmp/loop_tmp`并不需要是块设备文件,而是...
4. **格式化文件系统**:使用`/sbin/mke2fs`命令将loop设备格式化为指定的文件系统,如`/sbin/mke2fs –m 0 /dev/loop0`,这里使用的是ext2文件系统。 5. **挂载ramdisk**:使用`mount`命令将格式化的ramdisk挂载到...
1. 建立 loop 设备的临时挂载点:使用 mkdir 命令创建一个临时挂载点 /mnt/loop。 2. 建立一个大小为 15M 的临时文件:使用 dd 命令创建一个大小为 15M 的临时文件 /tmp/loop_tmp。 3. 将设备文件与临时文件联系起来...
- 创建initrd的基本步骤包括:首先,将内核的initrd映像解压,然后使用mount命令以loop设备方式挂载。例如,可以创建一个临时目录,将initrd映像复制并解压,然后使用`mount -t ext -o loop`命令挂载并查看其内容。...
2. **创建 loop 设备**:使用 `losetup` 命令将镜像文件关联到一个 loop 设备上。例如: ```bash losetup /dev/loop0 myimage.img ``` 这条命令会将 `myimage.img` 文件映射到 `/dev/loop0` 设备上。 3. **查看...
3. **设置loop设备**:通过`losetup`命令将`/dev/loop0`设备与`loop_tmp`文件关联,确保没有其他进程占用`/dev/loop0`。 4. **格式化文件系统**:使用`mke2fs`命令将`/dev/loop0`格式化为ext2文件系统,`-m 0`表示...
Loop复用器是一种在通信和网络设备中常见的组件,主要用于管理和协调多个数据通道,确保数据高效、可靠地传输。在本文中,我们将深入探讨Loop AM3490的操作指南,以及如何进行配置和使用。 首先,我们看到的是...
3. 添加GRUB启动功能:通过`losetup`创建loop设备,然后使用`dd`将GRUB的stage1和stage2写入映像文件。stage1包含基本的加载逻辑,stage2包含了更复杂的引导信息。最后,解除loop设备的挂载。 三、GRUB配置与QEMU...
《Gameloop游戏运行核心与Silverlight Beta2游戏开发研究》 在当今的数字娱乐领域,游戏开发技术日新月异,不断推动着行业的进步。其中,Gameloop(游戏循环)作为游戏引擎的核心组成部分,对于游戏的稳定运行至关...
这个步骤是必需的,因为ISO文件本质上是一个磁盘映像,需要通过loop设备来模拟成真正的磁盘进行挂载。 #### 第三步:挂载ISO镜像 现在我们已经准备好了挂载点,并加载了必要的loop模块,接下来就可以将ISO文件挂载...
2. **关联loop设备**:将空白文件与loop设备关联。 ```bash [root@FC3-vmopt]# losetup /dev/loop0 /opt/testptn ``` 3. **格式化文件系统**:使用`mke2fs`工具创建EXT2文件系统。 ```bash [root@FC3-vmopt]# ...
根据分区信息,卸载 loop 后重新从 1048576 字节开始挂载,使用 losetup -d /dev/loop0 命令卸载 loop 设备,最后使用 qemu-img convert -f raw -O qcow2 ubuntu.img ubuntu.qcow2 命令将 raw 镜像转换成 qcow2 格式...
在使用 Faking 方式时,需要使用 dd 命令创建大文件,然后使用 losetup 命令将大文件映射到 loop 设备上。 方法二:直接修改/etc/sysconfig/rawdevices 配置 直接修改/etc/sysconfig/rawdevices 配置是创建 ASM ...