如何在Linux下挂载带分区的镜像文件

之前一直有折腾ChromeOS,一位叫hexxeh的朋友一直有提供nightly build的镜像,所以免去了自己编译的烦恼。下载下来后,我打算修改一些东西后,再写入到U盘上,因为ChromeOS的映像文件是带有GPT分区的镜像,所以不能直接mount,需要在mount的时候的提供offset参数,即提供需要挂载的这个分区是从哪里开始的。像这样:

# sudo mount -o offset=xxx xxx.img /MOUNT/TO/DIR/

那么,如何得到这个offset的参数呢?我们可以用fdisk等工具来列出相关信息得到。不过,还有一个更NB的工具叫parted,一般可以在源里面找到。

首先,用parted列出相关信息:

parted ChromeOS-Vanilla-0.16.1092.2011_09_27_1647-r1643c060.img 
GNU Parted 3.0
Using /srv/ChromeOS-Vanilla-0.16.1092.2011_09_27_1647-r1643c060.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit                                                             
Unit?  [compact]? B                                                       
(parted) p
Model:  (file)
Disk /srv/ChromeOS-Vanilla-0.16.1092.2011_09_27_1647-r1643c060.img: 2051032576B
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start        End          Size         File system  Name        Flags
11      32768B       8421375B     8388608B                  RWFW
 6      8421376B     8421887B     512B                      KERN-C
 7      8421888B     8422399B     512B                      ROOT-C
 9      8422400B     8422911B     512B                      reserved
10      8422912B     8423423B     512B                      reserved
 2      10485760B    27262975B    16777216B                 KERN-A
 3      27262976B    926941183B   899678208B   ext2         ROOT-A
 1      926941184B   2000683007B  1073741824B  ext3         STATE
 8      2000683008B  2017460223B  16777216B                 OEM
12      2017460224B  2034237439B  16777216B    fat16        EFI-SYSTEM  boot
 4      2034237440B  2051014655B  16777216B                 KERN-B
 5      2051014656B  2051015167B  512B                      ROOT-B

(parted)

就这样得到各分区的信息了,如果想要挂载ROOT-A分区的话,27262976就是我们要的offset的参数值了。尝试一下:

# mount -o offset=27262976 ChromeOS-Vanilla.img /mnt/chromeos/
# cd /mnt/chromeos/

好了,就这么简单。