[原创]在Ubuntu中实现Win分区的备份和还原(取代PE和Ghost)

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
zhangjint5
帖子: 304
注册时间: 2011-01-02 12:31

[原创]在Ubuntu中实现Win分区的备份和还原(取代PE和Ghost)

#1

帖子 zhangjint5 » 2018-03-08 17:56

随身携带一个自己定制的Ubuntu Live优盘已经是我的常态

有时帮别人维护电脑,还总要再带个WinPE+GHOST系统盘 装Win7 很是尴尬

最近几经试验,终于完美解决了在 Ubuntu 中直接克隆安装 Windows 这个问题

第一步准备好一个安装有Win7/10的分区,并进行系统封装。
也可以将网上已经封装的 Win7/10 释放到一个分区中。

需要特别注意的是,不要boot单独分区。


第二步
对源Windows分区的BCD进行修改!(可以在PE中进行)
命令格式例如 bcdedit /store C:\Boot\BCD /set {bootmgr} device boot
一共要修改下面我加粗的3项

Windows Boot Manager
--------------------
identifier {bootmgr}
device boot
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {d89b8296-137c-11e8-9d1d-bc8e9c3fc4c2}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30

Windows Boot Loader
-------------------
identifier {current}
device boot
path \Windows\system32\winload.exe
description Windows 10
locale en-US
inherit {bootloadersettings}
allowedinmemorysettings 0x15000075
osdevice boot
systemroot \Windows
resumeobject {d89b8296-137c-11e8-9d1d-bc8e9c3fc4c2}
nx OptIn
bootmenupolicy Standard

C:\Windows\system32>

这样用[boot]这个变量来代指引导分区,就可以解决恢复到其他计算机分区时 PARTUUID 变化导致 BCD 引导出错!

第三步 在Ubuntu Live中使用 gparted 分区工具缩小这个Windows分区,让其只有1个GB的剩余空间以下即可!

因为接下来的备份过程不是按文件进行备份,而是按块进行备份,剩余空间也会读取进行备份。所以不要留太大剩余空间。以免造成备份文件过大。

第四步 使用 dd 读取 Windows 分区,将流送给 xz 压缩!

dd if=/dev/sda1 bs=32MiB | xz -z -9 -T 0 -v > win7_raw.xz

需要注意的是 xz 5.2.2 版本以上才支持 -T 0 参数,后面数字表示用几个CPU核心进行压缩,0表示自动判断CPU有几个核心并全部使用。

完成后就可以得到一个xz格式的高压缩镜像了。

源先我的GHOST高压缩系统备份有9GiB,释放后重新这样用dd捕获xz压缩,总共才6GiB。

可见 xz 压缩的威力~!

下面谈下系统恢复,很简单!

第一步 释放分区到 sda1 ,目标分区必须要大于源备份时的分区大小!
xz -d -c -v win7_raw.xz | dd of=/dev/sda1 bs=32MiB

此时,由于恢复的文件系统比目标分区小,分区后面的空间还没有被利用上

接下来

第二步 查看分区大小 ( Current device size 值)
sudo ntfsresize -i -f /dev/sda1

第三步 将恢复的 ntfs 文件系统展开到分区大小
sudo ntfsresize -s [上一步获得的值] -f -v /dev/sda1

需要注意的是 ntfsresize 工具会设置 NTFS 的 dirty ,所以重启进 Windows 的时候会触发 Windows 的磁盘扫描!

如果不喜欢,在 Ubuntu 中用 ntfsfix 工具的 -d 参数清除 NTFS 的 dirty 位就可以了!

不过 Windows 扫描下磁盘不是坏事,就让他扫好了!

重启后 Windows 就可顺利进行引导了!

亲测好使!


对于新硬盘的机器,我用parted进行分区,激活分区,parted 连 mbr 引导都自动写好了!还是比较方便的!

如有不当之处或更好的建议,欢迎跟帖!
490365333ibmc
帖子: 413
注册时间: 2011-08-04 4:19
系统: Ubuntu 12.10

Re: [原创]在Ubuntu中实现Win分区的备份和还原(取代PE和Ghost)

#2

帖子 490365333ibmc » 2018-03-17 15:20

还以为可以打包ntfs了,原来是dd
回复