在Linux中,有一种特殊的块设备叫loop device,这种loop device设备是通过映射操作系统上的正常的文件而形成的虚拟块设备。因为这种设备的存在,就为我们提供了一种创建一个存在于一般文件中的虚拟文件系统的机制. 它只是一个 pseudo ("fake") device (autually just a file) that acts as a block-based device.
在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。
理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。
下面是一个示例:
第一步:create a file with 'dd' command:
dd if=/dev/zero of=FS_on_file bs=1k count=10000
这样就在当前目录下创建了一个10Mb的文件"FS_on_file"
第二步:使用losetup命令创建一个loop device
losetup /dev/loop0 FS_on_file
第三步:创建一个文件系统(也是格式化命令)
mkfs -t ext3 /dev/loop0
第四步:挂载这个文件系统
(the mount point '/mnt/FS_file0' has been created before by 'mkdir'):
mount /dev/loop0 /mnt/FS_file0
最后:如果要删除刚才创建的这些对象,依次执行如下步骤:
$ umount /dev/loop0
$ losetup -d /dev/loop0
$ rm FS_on_file
说明:1)详细的losetup命令如下
[root@vm11g ~]# losetup
usage:
losetup loop_device # give info
losetup -d loop_device # delete
losetup [ -e encryption ] [ -o offset ] loop_device file # setup
[root@vm11g ~]#
其中加密选项有如下几种方式:
NONE use no encryption (default).
XOR use a simple XOR encryption.
DES use DES encryption.
DES encryption is only available if the optional DES package has been added to the kernel.
DES encryption uses an additional start value that is used to protect passwords against dictionary attacks.
2)默认情况下系统支持的loop device是8个
[root@vm11g dev]# ls -ltr /dev/loop*
brw-r----- 1 root disk 7, 0 Jul 19 2009 /dev/loop0
brw-r----- 1 root disk 7, 1 Jul 19 2009 /dev/loop1
brw-r----- 1 root disk 7, 2 Jul 19 2009 /dev/loop2
brw-r----- 1 root disk 7, 3 Jul 19 2009 /dev/loop3
brw-r----- 1 root disk 7, 4 Jul 19 2009 /dev/loop4
brw-r----- 1 root disk 7, 5 Jul 19 2009 /dev/loop5
brw-r----- 1 root disk 7, 6 Jul 19 2009 /dev/loop6
brw-r----- 1 root disk 7, 7 Jul 19 2009 /dev/loop7
[root@vm11g dev]#
如果需要超过8个loop device,那么使用losetup命令的时候可能会遇到类似的错误 'no such device',这是因为超过了可用loop device设备的最大限制,依据你的Linux系统,可以通过修改
/etc/modprobe.conf
配置文件,增加如下参数的方式进行扩展
options loop max_loop=20 --比如我增加到20个
保存退出,如果要了马上生效的话,可以通过
modprobe -v loop
命令立即加载该模块。
[root@vm11g dev]# cat /etc/modprobe.conf|grep loop
options loop max_loop=20
[root@vm11g dev]# modprobe -v loop
insmod /lib/modules/2.6.9-42.0.0.0.1.ELsmp/kernel/drivers/block/loop.ko max_loop=20
[root@vm11g dev]# ls -ltr /dev/loop*
brw-rw---- 1 root disk 7, 8 Jul 19 07:44 /dev/loop8
brw-rw---- 1 root disk 7, 9 Jul 19 07:44 /dev/loop9
brw-rw---- 1 root disk 7, 10 Jul 19 07:44 /dev/loop10
brw-rw---- 1 root disk 7, 11 Jul 19 07:44 /dev/loop11
brw-rw---- 1 root disk 7, 12 Jul 19 07:44 /dev/loop12
brw-rw---- 1 root disk 7, 13 Jul 19 07:44 /dev/loop13
brw-rw---- 1 root disk 7, 14 Jul 19 07:44 /dev/loop14
brw-rw---- 1 root disk 7, 15 Jul 19 07:44 /dev/loop15
brw-rw---- 1 root disk 7, 16 Jul 19 07:44 /dev/loop16
brw-rw---- 1 root disk 7, 17 Jul 19 07:44 /dev/loop17
brw-rw---- 1 root disk 7, 18 Jul 19 07:44 /dev/loop18
brw-rw---- 1 root disk 7, 19 Jul 19 07:44 /dev/loop19
brw-rw---- 1 root disk 7, 0 Jul 19 2009 /dev/loop0
brw-rw---- 1 root disk 7, 1 Jul 19 2009 /dev/loop1
brw-rw---- 1 root disk 7, 2 Jul 19 2009 /dev/loop2
brw-rw---- 1 root disk 7, 3 Jul 19 2009 /dev/loop3
brw-rw---- 1 root disk 7, 4 Jul 19 2009 /dev/loop4
brw-rw---- 1 root disk 7, 5 Jul 19 2009 /dev/loop5
brw-rw---- 1 root disk 7, 6 Jul 19 2009 /dev/loop6
brw-rw---- 1 root disk 7, 7 Jul 19 2009 /dev/loop7
有了这个东西,在Linux下就可以借助file来测试学习ASM了。