mount disk Image

mount disk Image
2009-08-10 21:27
如果你今天面对的是disk image而不是一般的partition image,当使用mount -o loop是将无法mount成功。这很容易理解,因为你必须知道disk image中partition的位置之后才能mount起來,怎么做呢?

需求: mount test.img 并更改第一个partition中的某个文件

我们先看看如果直接用mount -o loop会如何:
lawrence@lawrence-x24:~/Desktop$ sudo mount -o loop test.img /mnt/test/
mount: you must specify the filesystem type
lawrence@lawrence-x24:~/Desktop$ sudo mount -o loop -t ext3 test.img /mnt/test/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

恩,看起来是不work......

所以我必须先知道test.img的磁轨与磁区大小才能算出第一个partition的位置:
lawrence@lawrence-x24:~/Desktop$
fdisk -l test.img
You must set cylinders.
You can do this from the extra functions menu.

Disk test.img: 0 MB, 0 bytes
16 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x00000000

所用设备 Boot Start End Blocks Id System
test.img1 1 32 16096+ 83 Linux

得知每个 track 共 63 sectors, 每个 sector 是 512bytes,故得知第一个partition是在63*512=32256

接下来利用losetup将第一个partition先挂到/dev/loop0,并验证:
lawrence@lawrence-x24:~/Desktop$ sudo losetup --offset 32256 /dev/loop0 test.img
lawrence@lawrence-x24:~/Desktop$ sudo losetup /dev/loop0
/dev/loop0: [0803]:865823 (test.img), offset 32256

好了,将它mount起來
lawrence@lawrence-x24:~/Desktop$ sudo mount /dev/loop0 /mnt/test/
lawrence@lawrence-x24:~/Desktop$ df -h | grep test
/dev/loop0 16M 7.9M 6.6M 55% /mnt/test

修改完后,同样将其umount掉并detach /dev/loop0
lawrence@lawrence-x24:/mnt/test$ cd
lawrence@lawrence-x24:~$ sudo umount /mnt/test
lawrence@lawrence-x24:~$ df -h | grep test
lawrence@lawrence-x24:~$ sudo losetup -d /dev/loop0
lawrence@lawrence-x24:~$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: 沒有此一设备或位置

以上希望对大家有帮助。

PS. Redhat中如果要位移,是使用losetup -o 32256而不是losetup --offset 32256

补充一下如果要mount第二个partition可以这样:

1. fdisk -lu test.img
-> 得知第二个partition开始的sector, so offset=sector * sector size (512bytes)

fdisk -u When listing partition tables, give sizes in sec­tors instead of cylinders.

PS. 更精简的mount方法:
mount -o loop,offset=32256 test.img /mnt/test
============

例子:
liubin@liubin-laptop:$ fdisk -lu redhat6.img
You must set cylinders.
You can do this from the extra functions menu.

Disk redhat6.img: 0 MB, 0 bytes
16 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00000000

Device Boot      Start         End      Blocks   Id  System
redhat6.img1   *          63       33263       16600+  83  Linux
redhat6.img2           33264     1032191      499464    5  Extended
redhat6.img5           33327       99791       33232+  82  Linux swap / Solaris
redhat6.img6           99855     1032191      466168+  83  Linux

可以看出redhat6.img有4个分区,其中第一个分区
redhat6.img1为主分区,是加载linux时用的。另外有扩展分区,交换分区,和linux使用的ext2文件系统分区。

要挂载主分区
redhat6.img1时,首先计算 第一个partition的 偏移字节 63*512=32256
然后使用命令:
liubin@liubin-laptop:$ sudo mount -t ext2 -o loop,offset= 32256 redhat6.img /mnt
挂载主分区。

要挂载
redhat6.img6时 首先计算 partition的 偏移字节 99855 *512=51125760
然后使用命令:
liubin@liubin-laptop:$ sudo mount -t ext2 -o loop,offset= 51125760 redhat6.img /mnt
挂载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值