如何挂载一个镜像文件(how to mount an image file)

如何挂载一个镜像文件(how to mount an image file)

如何挂载一个镜像文件(how to mount an image file)

08/16/2012master 4 Comments

在使用KVM或Xen虚拟化的情况下,经常需要使用镜像文件(image file),我们可以将Guest系统启动起来,然后对镜像文件进行修改,不过这样有时也是比较麻烦,其实也是可以将镜像文件直接进行mount的,可以用如下两种办法。

(本文写的RAW格式镜像文件的挂载;我的另一篇文章写了“如何挂载qcow2格式的镜像文件”)

方法一:找出分区开始的开始位置,使用mount命令的offset参数偏移掉前面不需要的,即可得到真正的分区。其具体步骤如下:

1. 用“fdisk -lu my.img”查询image信息;

2. 计算image内分区开始的地方(计算offset),用从N号sector(扇区)开始,则offset=N*M (M为一个sector的大小,一般为512)

3. 使用mount命令挂载为loop设备即可。 (如LVM分区,则会较复杂,请见本文最后的介绍)

在Linux系统上具体操作演示如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

[root@jay-linux image]# fdisk -lu rhel6u2.img

You must set cylinders.

You can do this from the extra functions menu.

Disk rhel6u2.img: 0 MB, 0 bytes

255 heads, 63 sectors/track, 0 cylinders, total 0 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00048b34

Device Boot Start End Blocks Id System

rhel6u2.img1 * 2048 1026047 512000 83 Linux

Partition 1 does not end on cylinder boundary.

rhel6u2.img2 1026048 104857599 51915776 8e Linux LVM

Partition 2 has different physical/logical endings:

phys=(1023, 254, 63) logical=(6527, 21, 22)

[root@jay-linux image]# echo $((2048*512))

1048576

[root@jay-linux image]# mount -o loop,offset=1048576 rhel6u2.img /media/

[root@jay-linux image]# cd /media/

[root@jay-linux media]# ls

config-2.6.32-220.el6.x86_64 initramfs-3.5.0.img System.map-2.6.32-279.el6.x86_64

config-2.6.32-279.el6.x86_64 lost+found System.map-3.5.0

efi symvers-2.6.32-220.el6.x86_64.gz vmlinuz

grub symvers-2.6.32-279.el6.x86_64.gz vmlinuz-2.6.32-220.el6.x86_64

initramfs-2.6.32-220.el6.x86_64.img System.map vmlinuz-2.6.32-279.el6.x86_64

initramfs-2.6.32-279.el6.x86_64.img System.map-2.6.32-220.el6.x86_64 vmlinuz-3.5.0

[root@jay-linux media]# echo $((1026048*512))

525336576

[root@jay-linux media]# umount /media

[root@jay-linux media]# cd /home/image/

[root@jay-linux image]# umount /media

[root@jay-linux image]# mount -o loop,offset=525336576 rhel6u2.img /media/

mount: unknown filesystem type 'LVM2_member'

(镜像文件中的LVM分区mount的问题,本文最后单独说明)

[root@jay-linux image]# fdisk -lu sles11sp2-i386.img

You must set cylinders.

You can do this from the extra functions menu.

Disk sles11sp2-i386.img: 0 MB, 0 bytes

255 heads, 63 sectors/track, 0 cylinders, total 0 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0002d3be

Device Boot Start End Blocks Id System

sles11sp2-i386.img1 2048 4208639 2103296 82 Linux swap / Solaris

Partition 1 does not end on cylinder boundary.

sles11sp2-i386.img2 * 4208640 41943039 18867200 83 Linux

Partition 2 has different physical/logical endings:

phys=(1023, 254, 63) logical=(2610, 212, 34)

[root@jay-linux image]# echo $((4208640*512))

2154823680

[root@jay-linux image]# mount -o loop,offset=2154823680 sles11sp2-i386.img /media

[root@jay-linux image]# cd /media/

[root@jay-linux media]# ls

bin dev home lost+found mnt proc sbin srv sys usr

boot etc lib media opt root selinux success tmp var

[root@jay-linux image]# umount /media/

方法二:用kpartx建立分区映射后,再mount映射后的设备即可,操作实例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[root@jay-linux image]# kpartx -av sles11sp2-i386.img

add map loop3p1 (253:2): 0 4206592 linear /dev/loop3 2048

add map loop3p2 (253:3): 0 37734400 linear /dev/loop3 4208640

[root@jay-linux image]# mount /dev/mapper/loop3p2 /media/

[root@jay-linux image]# ls /media/

bin dev home lost+found mnt proc sbin srv sys usr

boot etc lib media opt root selinux success tmp var

[root@jay-linux image]# umount /media/

[root@jay-linux image]# mount /dev/mapper/loop3p1 /media/

/dev/mapper/loop3p1 looks like swapspace - not mounted

mount: you must specify the filesystem type

(其中的交换分区,我也还不知道是否可以mount;其实mount交换分区也没意义)

(使用完成后,卸载挂载点、删除映射关系即可)

[root@jay-linux image]# umount /media/

[root@jay-linux image]# kpartx -d sles11sp2-i386.img

loop deleted : /dev/loop3

关于LVM的mount,可以参考文末参考资料中的vpsee的文章(我也是试多次没做成功,才偶然看到这篇文章的),我对镜像文件中LVM分区的mount操作如下供参考。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

[root@jay-linux image]# fdisk -lu rhel6u2.img

You must set cylinders.

You can do this from the extra functions menu.

Disk rhel6u2.img: 0 MB, 0 bytes

255 heads, 63 sectors/track, 0 cylinders, total 0 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00048b34

Device Boot Start End Blocks Id System

rhel6u2.img1 * 2048 1026047 512000 83 Linux

Partition 1 does not end on cylinder boundary.

rhel6u2.img2 1026048 104857599 51915776 8e Linux LVM

Partition 2 has different physical/logical endings:

phys=(1023, 254, 63) logical=(6527, 21, 22)

[root@jay-linux image]# echo $((1026048*512))

525336576

[root@jay-linux image]# losetup /dev/loop0 rhel6u2.img -o 525336576

[root@jay-linux image]# pvscan

PV /dev/loop0 VG VolGroup lvm2 [49.51 GiB / 0 free]

Total: 1 [49.51 GiB] / in use: 1 [49.51 GiB] / in no VG: 0 [0 ]

[root@jay-linux image]# vgchange -ay VolGroup

2 logical volume(s) in volume group "VolGroup" now active

[root@jay-linux image]# lvs

LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert

lv_root VolGroup -wi-a--- 45.57g

lv_swap VolGroup -wi-a--- 3.94g

[root@jay-linux image]# mount /dev/VolGroup/lv_root /media/

[root@jay-linux image]# ls /media/

bin cgroup etc lib lost+found misc net proc sbin srv tmp var

boot dev home lib64 media mnt opt root selinux sys usr

(使用完后的卸载操作,如下)

[root@jay-linux image]# umount /media/

[root@jay-linux image]# vgchange -an VolGroup

0 logical volume(s) in volume group "VolGroup" now active

[root@jay-linux image]# losetup -d /dev/loop0

mount LVM 分区的 参考资料:

Related posts:

如何挂载qcow2格式的镜像文件(how to mount a qcow2 image)

Linux挂载NTFS分区:mount unknown filesystem type ‘ntfs’

Ubuntu上的android sdk: ./emulator: No such file or directory

“mount: could not find any free loop device”解决方案

相关推荐

经济剩余
365bet亚洲版登陆

经济剩余

📅 07-20 👁️ 1872
《蚂蚁》伊索寓言故事及寓意道理
365bet亚洲版登陆

《蚂蚁》伊索寓言故事及寓意道理

📅 07-06 👁️ 4877
python含金量高的证书排行,python哪个证书含金量高
365bet亚洲版登陆

python含金量高的证书排行,python哪个证书含金量高

📅 07-07 👁️ 9583
苹果6现在多少钱 港版iPhone6报价4340元
365betappios

苹果6现在多少钱 港版iPhone6报价4340元

📅 07-23 👁️ 9056
东北话小歘歘什么意思
365bet亚洲版登陆

东北话小歘歘什么意思

📅 08-07 👁️ 3979
李晨背景揭秘!怪不得能让“国际范”死心塌地!