LOOP块设备

在Linux系统中存在一种特殊的块设备,这种设备本身以一般文件的形式存在于一般文件系统中,但是又可以被制作成其他文件系统从而被mount上。这种理解方式比较绕,举个例子:在ext4文件系统中存在一个文件为loop_dev.img的文件其大小为1000Kib,但是其又可以作为一个独立的块设备被挂载在系统的某一目录下面,比如mount。这种设备也称作LOOP设备。
本质上来说loop设备的文件盘以普通文件的形式存在于系统中的,当文件模拟成块设备后(比如使用dd if=/dev/zero of=xxxx bs=2K count=xxxx制作一个模拟磁盘)使用losetup命令和/dev/loop*相关联我们就可以把虚拟磁盘当做普通硬盘来进行访问了。

loop设备的使用

  1. 在loop设备使用前,先要制作本地模拟块设备或者叫做模拟硬盘也或者叫做本地镜像以下简称虚拟镜像或者本地镜像:
dd if=/dev/zero of=./loop_dev.img bs=2K count=1000

bs和count可以调整本地磁盘的大小。

  1. loop设备和本地镜像相关联:

    losetup /dev/loop0 ./loop_dev.img    #也可以使用-e参数,-e参数是磁盘的加密方式.
    
  2. loop设备格式化文件系统类型(ext2,ext3,ext4…)我们使用ext2文件系统,所以需要格式化成ext2文件系统类型(注意:一旦模拟硬盘已经有内容,此步骤一定要小心,否则模拟硬盘的内容会一同被格式化掉,这个原理和格式化磁盘差不多)

mkfs -t ext2 /dev/loop0
  1. loop设备的挂载,需要与第三步骤指定相同或者兼容的文件系统。
mount -t ext2 /dev/loop0 /mnt

经历过以上步骤我们就可以对于/dev/loop0可以以一个块设备进行访问了,而且已经挂载在/mnt目录下。

  1. loop设备的卸载:
umount /mnt       # 先把LOOP设备卸载掉
losetup -d /dev/loop0   # 然后把loop设备和虚拟镜像去关联

通过以上五个步骤我们可以正常使用loop设备并且把loop设备和虚拟镜像去关联。我们还有对于loop设备的进一步高级讨论:

疑问

1. 经过上述步骤在制作虚拟镜像时候虽然指定了虚拟镜像的磁盘大小,我们在loop设备的时候是否能够指定虚拟磁盘大小呢?
2. 在制作文件系统的时候能不能指定文件大小呢?
3. 在操作过程中如果把虚拟镜像和/dev/loop0关联了,但是如果忘了去关联的话是否能够关联的上呢?

下面就开始一一解答上述疑问:

  1. 经过上述步骤在制作虚拟镜像时候虽然指定了虚拟镜像的磁盘大小,我们在loop设备的时候是否能够指定虚拟磁盘大小呢?答案是当然可以,那什么时候可以指定大小呢?如何指定呢?
    在本地镜像和回环设备驱动关联之后可以使用如下命令指定偏移量和大小:
losetup /dev/loop0 -o 2KiB
losetup /dev/loop0 --sizelimit 80Kib

上述命令的具体操作过程如下:

root@ubuntu:/home/alex# dd if=/dev/zero of=./loop_dev.img bs=2K count=1000
1000+0 records in
1000+0 records out
2048000 bytes (2.0 MB) copied, 0.0072437 s, 283 MB/s
root@ubuntu:/home/alex# losetup /dev/loop0  ./loop_dev.img 
root@ubuntu:/home/alex# losetup /dev/loop0 -o 2KiB
/dev/loop0: [0801]:700701 (/home/alex/loop_dev.img)
root@ubuntu:/home/alex# losetup /dev/loop0 --sizelimit 100KiB
/dev/loop0: [0801]:700701 (/home/alex/loop_dev.img)
root@ubuntu:/home/alex# mkfs -t ext2 /dev/loop0 88
mke2fs 1.42.9 (4-Feb-2014)
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
16 inodes, 88 blocks
4 blocks (4.55%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
root@ubuntu:/home/alex# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   21G   26G  45% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.1G   12K  3.1G   1% /dev
tmpfs           621M  1.6M  620M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.1G  152K  3.1G   1% /run/shm
none            100M   36K  100M   1% /run/user
/dev/loop0       81K   14K   63K  19% /mnt
  1. 在制作文件系统的时候能不能指定文件大小呢? 当然可以,不过要注意要和loop设备指定文件系统小,否则可能制作失败。上述截图就有指定大小操作。

  2. 在操作过程中如果把虚拟镜像和/dev/loop0关联了,但是如果忘了去关联的话是否能够关联的上呢?有一个losetup -f命令来查找第一个可用的loop设备的设备名,如下:

root@ubuntu:/home/alex# losetup -f
/dev/loop1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值