|
mount 磁盘镜像不像 mount 普通磁盘分区那样“一蹴而就”,下面举例说明。
磁盘镜像文件可以通过 bochs 虚拟机自带的 bximage 工具制作。如果懒得制作,可以直接从 bochs 官网上下载别人制作好的镜像文件,比如这里下载了一个 500M 的 debian-3.0r0.img 。
先试一下直接 mount 这个文件:$ sudo mount -o loop debian-3.0r0.img /mnt/img/
mount: you must specify the filesystem type 提示要指定文件系统类型。根据提示,我们尝试添加一下文件系统类型:$ sudo mount -o loop -t ext2 debian-3.0r0.img /mnt/img/
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so $ sudo mount -o loop -t ext3 debian-3.0r0.img /mnt/img/
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so 不管是指定 ext2 或者是 ext3 都会出错。
出错的原因是,一个磁盘镜像文件里,如果包含有多个不同的分区信息(比如有 ext2,ext3 以及 swap),那么这样粗鲁的做法势必会产生错误。
接下来分析一下这个镜像文件的结构:$ sudo fdisk -l debian-3.0r0.img
You must set cylinders.
You can do this from the extra functions menu.
Disk debian-3.0r0.img: 0 MB, 0 bytes
16 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x00008000
Device Boot Start End Blocks Id System
debian-3.0r0.img1 1 261 131512+ 82 Linux swap / Solaris
debian-3.0r0.img2 262 1024 384552 83 Linux 看到分区信息了,原来包含有两个分区,第一个分区是 swap,第二个分区是 linux 系统。更重要的是我们还知道了磁盘的各种参数,比如有 16 个磁头,每磁道有 63 个扇区,共有 1024 个磁道。
这里顺便说一下一个磁柱的字节是怎么算的。先算 512*63=32256 ,这个数表示每个磁道的字节数。因为有 16 个磁头,每个磁头可以读写一个磁道(同心圆上的同半径的那一圈),所以一个磁柱上就有 16*63*512 = 516096 个字节。
这样一来,我们就容易知道第 2 个分区的字节偏移,从而将它 mount 上来。计算字节偏移:261*16*63*512 = 134701056 再尝试一下,$ sudo losetup -o 134701056 /dev/loop1 debian-3.0r0.img
$ sudo mount /dev/loop1 /mnt/img/
$ ls /mnt/img/
bin cdrom dev floppy initrd lost+found proc sbin usr vmlinuz
boot cdrom0 etc home lib mnt root tmp var vmlinuz.old OK,终于 mount 上来了!
有 root 权限的话,可以读写这个被 mount 上来的镜像。但在 windows 下用 Winimage 却无法在打开镜像后直接写镜像,不知是哪里设置不对还是软件试用期到了。 |
|