从磁盘映像中挂载或提取指定分区
最近在做虚拟机相关的事,需要处理一些磁盘和分区的映像文件。如何从一个磁盘映像中挂载指定的分区到本地 Linux 文件系统呢?理论上说,可以用 dd 把该分区从磁盘映像中提取出来再挂载,不过 mount 提供了针对 loop 设备的偏移量参数,方便直接从磁盘映像中挂载指定分区。笔记如下:
演示用的磁盘映像使用 qemu-img 制作。我们使用原生的 raw 格式,等价于磁盘上的原始数据流,保证它在任何 Linux 系统上都可以直接挂载。使用 Windows PE 工具盘启动该 qemu 虚拟机,创建一系列不同格式的分区并在其中建立几个文件。
磁盘分区结构如截图:
回到宿主系统,使用 fdisk 的 -l、-u 参数查看磁盘映像。其中 -u 表示以扇区为单位显示分区起止位置,方便后续计算。
这时我们只需要为 mount 添加 offset 参数,指定分区在磁盘映像中的逻辑地址,即可挂载这一分区。注意 offset 的单位是字节,通常一个扇区是 512 字节,因此需要用 fdisk 输出的 Start 乘以 512。以 vmtest.img3 分区为例。
如果有必要,我们可以将特定的分区从硬盘映像中提取出来,方便单独使用。通过 dd 可以完成提取,简便起见使用扇区大小 512 字节作为 bs 参数,这样 skip、count 参数很容易从 fdisk 的输出中计算出来。下面提取 vmtest.img5。
到这一步,我们已经实现了从磁盘映像中挂载或提取指定分区。其中 fdisk 帮我们完成了磁盘映像的分析,直接将分区的逻辑地址显示给了我们。现在我们再借机复习一下磁盘分区表的格式,试试手工计算相关地址。这里推荐大家阅读网上这篇《解读 Windows 操作系统分区表的秘密》,其中详解过的概念这里不再赘述,下面的内容权当对这篇文章在 Linux 平台下的补充。
首先查看磁盘映像的主引导扇区,其中分区表位于 0x1be 开始的 64 字节。
对于 vmtest.img1 和 vmtest.img3 这两个主分区,我们读出它们的起始逻辑地址分别为 0x3f 和 0x9c64fe(注意在分区表中以 Little-endian 存储),换算成十进制与 fdisk 输出的一致。bash 的算术表达式支持十六进制字面值,挂载方式同上。
对于扩展分区 vmtest.img2,我们通过 dd 定位到它所指向的第一个逻辑分区 vmtest.img5 前面的卷引导记录,查看逻辑分区的链式分区表。
vmtest.img5 相对于 vmtest.img2 的偏移量为 0x3f,按此地址挂载。
沿着链式分区表的第二条记录(即链表指针)指示的偏移量,我们可以找到第二、第三个逻辑分区(vmtest.img6、vmtest.img7)前面的卷引导记录以及这两个分区的逻辑地址。
取得了相应的地址,挂载或提取分区当然是轻而易举的。下面挂载了 vmtest.img7、提取了 vmtest.img5。
建议继续学习:
- Centos挂载新硬盘开机自动挂载 (阅读:8320)
- 从磁盘映像中挂载或提取指定的 LVM 逻辑卷 (阅读:4402)
- 将远程共享文件夹挂载到linux本地目录 (阅读:4204)
- linux磁盘管理学习笔记(下):linux分区、挂载 (阅读:3723)
- Oracle hash分区的秘密 (阅读:3742)
- 如何删除品牌电脑中的隐藏分区 (阅读:3485)
- linux大于2T的磁盘使用GPT分区 (阅读:3388)
- LVM介绍 (阅读:3345)
- 用CloneZilla制作紧急恢复分区 (阅读:3248)
- CentOS分区规律大总结 (阅读:3242)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Jian Lin 来源: 林健的BLOG
- 标签: 分区 挂载
- 发布时间:2009-11-17 23:27:23
-
[903] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 全站换域名时利用nginx和javascri -
[52] 海量小文件存储 -
[52] CloudSMS:免费匿名的云短信 -
[51] 用 Jquery 模拟 select -
[49] ps 命令常见用法
