pv方法

pv方法

案件设想:

$ sudo fdisk -l
Disk /dev/sda: 223,6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x13a30a5a

Device  Boot     Start     Final  Sectors Size Id Type
/dev/sda1  *           2048   1333247   1331200   650M 27 WinRE NTFS hidden
/dev/sda2           1333248 264058879 262725632 125,3G  7 HPFS/NTFS/exFAT
/dev/sda3         264060926 468860927 204800002  97,7G  5 Extended
/dev/sda5         264060928 434049023 169988096  81,1G  7 HPFS/NTFS/exFAT
/dev/sda6         434051072 464771775  30720704  14,7G 83 Linux
/dev/sda7         464773120 468860927   4087808     2G 82 Linux swap / Solaris

Windows 10安装在/dev/sda2并且我假设它/dev/sda1是来自同一 Windows 系统的隐藏分区。

我怎么能够备份我的 Windows 10安装从Linux以便稍后恢复?

根据要求提供更多数据:

  • 我所说的“安装”是指将 Windows 返回到克隆时所需的“完整分区”(或多个分区)。
  • 能够恢复到相同的系统(计算机、硬件)甚至硬盘就足够了。即:我安装了 Windows 10,做了备份,几个月前我想恢复我所做的备份,因此无需再次执行 Windows 10 的完整安装(驱动程序、打印机、程序...等)。

已测试到目前为止(所有测试都在具有相同分区布局的同一台计算机上执行):

  • 零件图像(克隆sda1sda2):不起作用。恢复的操作系统将无法启动。
  • FS存档器(克隆sda1sda2):不起作用。恢复的操作系统将无法启动。

答案1

pv方法

你可以使用pv(手册页)像这样的实用程序:

sudo sh -c 'pv < /dev/sda > /destination'

当然你可以先成为root:

sudo -i

然后就做备份:

pv < /dev/sda > /BackupDestination

然后在需要时执行恢复:

pv < /BackupDestination > /dev/sda

笔记

  • dd这基本上与其他答案中的工作相同,但速度更快并且显示出进步。

  • 此方法可能比 慢rsync,但它只是复制文件,这不是有意的。

  • 它以 1:1 的方式复制所有内容,您可能会说这是一个完美的复制。

  • 您还需要引导扇区以便稍后引导。最简单的方法是备份整个驱动器。

  • 显示进度dd(手册页),你可以添加到命令中:

    status=progress
    

提示

为了之后能够有效地压缩图像,请不要忘记将可用空间归零。

答案2

我刚刚成功完成了所描述的将 Windows 10 从 Linux 备份到文件并将其恢复到新驱动器上的场景。

使用删除用零填充未使用的空间

sdelete -z c:

这本身并不是必需的,但可以提高生成文件的压缩率。删除的文件实际上并没有在磁盘上替换为零,它们占用的空间只是被标记为再次可用,但数据仍然存在。 dd 也会恢复这些数据,因此用零填充标记为空闲的每个空间可以使压缩更加有效

获取一些实时 Linux USB 来启动并将 MBR 和分区表备份到备用驱动器

dd if=/dev/sda of=/somewhere/file.mbr bs=512 count=63

将启动分区复制到文件中

dd if=/dev/sda1 bs=1M status=progress | lz4 > /somewhere/sda1.lz4

将系统分区复制到文件

dd if=/dev/sda2 bs=1M status=progress | lz4 > /somewhere/sda2.lz4

将新磁盘放入计算机,再次启动live Linux并恢复磁盘的开头

dd of=/dev/sda if=/somewhere/file.mbr

这将为您提供相同的主分区布局(扩展分区内的分区存储在其他位置,并且不会通过执行此操作来恢复)。

现在恢复两个 Windows 分区

dd of=/dev/sda1 bs=1M status=progress < lz4cat /somewhere/sda1.lz4
dd of=/dev/sda2 bs=1M status=progress < lz4cat /somewhere/sda2.lz4 

驱动器在这个阶段没有启动(grub 抱怨)。因此启动Windows救援盘或安装介质并选择“修复”。在故障排除中启动 cmd 提示符并运行

bootrec /fixmbr

在这个阶段,我让原来的 Windows 系统在新的更大的驱动器上启动。我使用 gzip 和 lz4 获得了 50% 的压缩率(70% 已满驱动器),但 gzip 受到 CPU 速度的限制(在我的情况下为 27MB/s),而 lz4 则没有(480MB/s CPU 限制,180MB/s 我的备份)驱动限制)。

我的第一次尝试是使用,ntfsclone但没有生成可启动的 Windows(它抱怨 \Windows\System32 中缺少一些文件)。我不知道为什么它不起作用。最后,dd+lz4解决方案创建了比其本身更小的图像ntfsclone。您的里程可能会根据磁盘的满度和错误模数而有所不同ntfsclone-dd似乎更容易得到正确的结果:-)

答案3

是的,最简单的解决方案是

dd if=/dev/sda of="/media/usb/$(date).img"

这很慢并且占用大量空间,因此您可以

  • 只需复制您想要的分区+引导扇区
  • 归零并压缩可用空间
  • 文件而不是基于块的备份
  • rdiff-backup 用于反向差异(第一次后大小大幅减小)
  • rsync(在慢速网络上显着加速)
  • 如果您将 Windows 放入虚拟机中,则牛 FS (btrfs/zfs) 比 rsync/diff 备份更快/更小只是一个选择,而且我不确定它们是否适合该场景。

您可能错过了引导扇区、UUID,应该阅读 grub 和 https://en.m.wikipedia.org/wiki/Windows_Vista_startup_process

答案4

我对新安装的 Windows 计算机进行了备份,如下所示兹宾涅克·温克勒的回答多于。我尝试了lzmagzip --fast,但这些成为了瓶颈(我的两个 SSD 在没有压缩的情况下管理着 2 GB/s 的传输速度)。实际命令行:

$ sudo dd if=/dev/nvme0n1 bs=1M status=progress | pzstd -o /tmp/windows-disk.zst

该过程大约需要八分钟,1 TB SSD 被压缩为 8 GB 文件。请注意,这是全新安装,因此只有 Windows,没有用户数据或应用程序。

恢复:

$ pzstd -d /tmp/windows-disk.zst -c | sudo dd of=/dev/nvme0n1 bs=1M status=progress

相关内容