[程序员] 对 Symantec Ghost 的 GHO 格式研究

五一假期结束,公司运维紧急找到我,说是 1T 多的 GHO 系统备份无法通过 Ghost 还原,使用 GhostExp 也无法打开提示“Out of Memory”( OOM )。 应该是 Norton Ghost 的浏览器在读取 GHO 文件时全加载进内存里了,不过现在跟 VMware 一样都是博...
[程序员] 对 Symantec Ghost 的 GHO 格式研究
[程序员] 对 Symantec Ghost 的 GHO 格式研究

五一假期结束,公司运维紧急找到我,说是 1T 多的 GHO 系统备份无法通过 Ghost 还原,使用 GhostExp 也无法打开提示“Out of Memory”( OOM )。 应该是 Norton Ghost 的浏览器在读取 GHO 文件时全加载进内存里了,不过现在跟 VMware 一样都是博通的了 undefined

得亏系统没格,不然跟搜狐上这个《 2.8TB 外贸数据生死救援! GHOST 备份崩溃后,我们如何 100%恢复? 》一样完蛋 按某数据恢复工程师提供的思路,研究了 GHO 文件结构:

[File Header]                  (512 字节)
    │
    ├── [Record: Track 0]      (类型 0x0006)  → MBR + 引导扇区
    │
    ├── [Record: Partition]    (类型 0x0603)  → 分区描述符
    │
    ├── [FEEF Partition Header] (512 字节)    → 该分区的压缩参数
    │
    ├── [Compressed Data Blocks]              → 实际数据( 32KB 对齐)
    │       ├── Block 1 (2B 长度 + 数据)
    │       ├── Block 2 ...
    │       └── ...
    │
    ├── [Record: Continuation] (类型 0x0703)  → 跨文件续卷标记(多文件时出现)
    │
    └── [Record: End]          (类型 0x0023)  → 文件结束标记

赛门铁克的压缩方法,是一个比较黑盒的自定义 LZ77 变种,每个块解压后固定 32KB:

[2 字节 stored_len] [1 字节 控制字节] [数据...]

附:哈希表( 4096 条) h = ((-24993 * (b2 ^ (16 * (b1 ^ (16 * b0))))) >> 4) & 0xFFF 其中 b0 、b1 、b2 是当前 3 字节窗口,在 2000 年那会比较常见的一种轻量级高压缩比的老格式了,新的诺顿克隆精灵似乎用的是 i2v 格式,但我从小到大见过的 Ghost 镜像都是 gho 格式的

具体的代码已开源: https://github.com/nyarime/gho

来源: v2ex.com查看原文