| 
 | 
 
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 却无法在打开镜像后直接写镜像,不知是哪里设置不对还是软件试用期到了。 |   
 
 
 
 |