背景说明

群晖存储自带有个 Active Backup for Business 看着可以选择单独的硬盘分区备份,以为和 Symantec Ghost 一样,恢复的时候可以选择某个分区直接还原。

然而,湾湾的开发人员的脑回路和正常人不太一样,经过尝试和咨询客服,想要使用 Active Backup for Business 恢复向导 对镜像进行恢复,有以下限制和需要满足的条件

  • 不能单独选择某个分区恢复,只能全盘恢复,即使你备份的时候只选择了其中某个分区。
  • 目标硬盘是全新的硬盘,不能经过初始化。
  • 目标硬盘整个大小比原备份硬盘要大。

WTF...

想尝试使用群晖自带的 Active Backup for Business Portal 按文件恢复。文件是能恢复,但是,但是...文件的创建、修改、访问时间全部变成了恢复时的时间,而不是原来的时间。看着满盘同一个时间的文件,mdzz。

官方工具不靠谱或者说不能按照我想要的方式恢复,但能否挂载镜像,然后镜像恢复呢?问下客服,客服回答的很直接:不能

....

正题

使用 File Station 打开名为ActiveBackupforBusiness的共享文件夹。展开到如下类型的文件路径:

/ActiveBackupforBusiness/ActiveBackupData/PC-NULL-MBP-Data/ActiveBackup_2019-04-19_030002
  • PC-NULL-MBP-Data 是备份任务,包含备份设备类型(PC)、电脑主机名(NULL_MBP)、任务名(Data)
  • ActiveBackup_2019-04-19_030002 某个备份,包含有备份时间点。

在该文件夹上点击右键-属性,在所在位置中可以看到当前目录的位置:

/volume2/ActiveBackupforBusiness/ActiveBackupData/PC-NULL-MBP-Data/ActiveBackup_2019-04-19_030002

通过ssh使用root账号进入到存储,进入到上面的路径。

# cd /volume2/ActiveBackupforBusiness/ActiveBackupData/PC-NULL-MBP-Data/ActiveBackup_2019-04-19_030002

# ls -la
total 118182592
dr-xr-xr-x 1 ActiveBackup ActiveBackup           76 Apr 19 07:39 .
dr-xr-xr-x 1 ActiveBackup ActiveBackup         1480 May 11 00:00 ..
-rw-r--r-- 1 ActiveBackup ActiveBackup 500277792768 Apr 19 07:39 0.img
-r--r--r-- 1 root         root               129024 Apr 19 07:39 backup_db.sqlite
-r--r--r-- 1 root         root                13172 Apr 19 07:35 device_spec

其中的 0.img 是备份镜像。在 device_spec 文件中保存有硬盘分区信息。用 cat 显示文件内容。我的是D盘,所以我找到相应内容如下

{
   "device_spec" : {
      "cpu_number" : 4,
      "disk_layout" : {
         "0" : [
            ....,
            {
               "alias_name" : "D:\\",
               "attribute" : 2,
               "available_space" : "0",
               "device_name" : "\\Device\\HarddiskVolume5",
               "device_type" : 7,
               "disk_extents" : [
                  {
                     "disk_number" : 0,
                     "length" : "128859504640",
                     "offset" : "370721947648",
                     "partition_number" : 4
                  }
               ],
               "file_system" : "NTFS",
               "is_primary_partition" : true,
               "mount_path" : "D:\\",
               "volume_label" : "Data",
               "volume_name" : "\\\\?\\Volume{f1d71d4f-ab23-4532-b1b6-5fdda451aeff}\\"
            }
         ]
      }
	}
	....
}

这里面只有 "offset" : "370721947648" 字段是我们需要的,表示分区的开始位置,记住这个值。

执行以下命令挂载

mkdir /mnt/tmp
mount -o loop,offset=370721947648 -o ro 0.img /mnt/tmp

如果没错误信息返回,则表示挂载成功了。其中的370721947648是从刚才的device_spec文件中找到的。-o ro 表示只读挂载。

使用

ls /mnt/tmp 

可以看到分区里面的文件了。这时候,你可以用其他方式复制里面的文件出来,scp 什么的。

注意事项:

  • 可以挂载到其他共享目录,这样可以直接在File Station中直接访问,方便通过文件共享方式复制。
  • 不要尝试修改备份镜像,可能会导致镜像损坏。