1.创造一个空映象文件
引用:root@debian:/home/fs:0# dd if=/dev/zero of=test.img bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB) copied, 0.126087 seconds, 81.2 MB/s
2.创建文件系统
引用:root@debian:/home/fs:1# losetup /dev/loop0 test.img
root@debian:/home/fs:0# mkfs.ext3 /dev/loop0
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2512 inodes, 10000 blocks
500 blocks ( 5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=10485760
2 block groups
8192 blocks per group, 8192 fragments per group
1256 inodes per group
Superblock backups stored on blocks:
8193
Writing inode tables: done
Creating journal (1400 blocks): done
Writing superblocks and filesystem accounting information: done
这里用到一个命令losetup,该命令能够将系统中空闲的loop 设备和文件联系起来。
这时候该文件就不是普通的ASCII文件,而是块设备了。
mkfs.ext3在块设备中创建ext3文件系统,当然也可以创建别的,随便测试都没有关系。
3.挂载文件系统
引用:root@debian:/home/fs:1# mkdir /mnt/test
root@debian:/home/fs:0# mount /dev/loop0 /mnt/test
root@debian:/home/fs:1# mount -l
/dev/hdb3 on / type ext3 (rw,errors=remount-ro) [/]
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode
=620)
/dev/loop0 on /mnt/test type ext3 (rw)
可以看到,文件系统已经成功的挂载。
这个时候可以到/mnt/test下面成功的读写文件了。4.卸载
root@debian:/mnt:0# umount /mnt/test
创建出这样一个虚拟的文件系统之后,就可以在/dev/loop0上执行任何可以对实际硬盘设备进行的操作。
例如badblock,检查分区的坏块;fsck,进行文件系统检查,等等。
附:
本次实验的核心是利用了linux中的loop device,已经用来设置loop device的程序losetup。
它的基本用法如下:
引用:usage:
losetup loop_device # give info
losetup -d loop_device # delete
losetup -f # find unused
losetup [ options ] {-f|loop_device} file # setup

