备份

备份

我买了一台新的 HP 笔记本电脑。我将彻底删除 Windows 并安装 Ubuntu(不是双启动)。

但是,如果我需要将笔记本电脑送回保修,我希望能够将磁盘恢复到其原始状态(启动+分区+原始操作系统+原始软件+等等)。

将原始 1TB 磁盘保存到网络位置的最佳方法是什么,这样我就不需要 > 1TB 的备份驱动器了?此外,解决方案的适当恢复步骤是什么?

(注意:第一次启动时我将简单地启动到 Ubuntu Live USB)。

答案1

如果您进行压缩备份,则备份不需要超过 1 TB 的存储空间。新机器上安装的 Windows 10 不应大于 40 GB,压缩率接近 50%,因此您“仅”需要大约 20 GB 左右的存储空间。如果您使用内置的 Ubuntu 备份实用程序,那么恢复(如果您需要保修服务)可以从您用于进行备份(并可能安装)的同一 Live 媒体进行。

稍微棘手的部分是准确地重新创建原始分区——Windows 机器不再带有一个大分区;相反,有一个“启动”分区、一个 Windows 分区和一个数据分区(最简单的情况)。如果您担心由于安装 Ubuntu 而导致保修失效或被拒绝,您需要确保可以将这些分区放回到与原来完全相同的位置和大小。幸运的是,gparted有一个选项可以备份分区,然后精确地恢复它——如果您使用该选项按顺序备份每个分区,然后对这些备份进行压缩备份,您只需要在从原始 Windows 到压缩的第二代备份所需的时间内使用大容量存储空间——并且在恢复时/如果您恢复时再次使用。

但是,你可以备份启动分区和 Windows 分区进入未触及的数据分区,然后将这些文件的压缩备份到外部介质上。完成后,如果您想要/需要恢复,您将创建一个足够大的分区来恢复压缩备份,从恢复的副本中恢复分区,然后删除并重新创建填充所有剩余空间的数据分区。

答案2

备份

  1. 使用 Live USB 启动

    在正在备份的计算机上,启动 Ubuntu Live USB,并打开终端窗口。

  2. 列出分区信息

    我要备份的磁盘是/dev/nvme0n1。替换nvme0n1为您的磁盘。您可以使用 Ubuntu 中的磁盘应用程序查看磁盘及其设备名称的列表。

    sudo fdisk -l /dev/nvme0n1
    

    这就是制造商对我的磁盘进行的分区方式。

    Disk /dev/nvme0n1: 953.9 GiB, 1024209543168 bytes, 2000409264 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: gpt
    Disk identifier: 1C949023-866B-4764-B397-252D5125277C
    
    Device              Start        End    Sectors   Size Type
    /dev/nvme0n1p1       2048     534527     532480   260M EFI System
    /dev/nvme0n1p2     534528     567295      32768    16M Microsoft reserved
    /dev/nvme0n1p3     567296 1972772863 1972205568 940.4G Microsoft basic data
    /dev/nvme0n1p4 1972772864 1974779903    2007040   980M Windows recovery environment
    /dev/nvme0n1p5 1974779904 2000396287   25616384  12.2G Microsoft basic data
    
  3. 备份分区表

    从正在备份的计算机运行以下命令来创建分区表的备份。

    cd ~/
    sudo sgdisk --backup=nvme0n1.gpt /dev/nvme0n1
    

    将备份复制到/mnt/data/Backup/远程计算机上的目录。/mnt/data/Backup/用远程计算机上的现有备份位置替换。相应地替换remote_userREMOTE_COMPUTER

    rcp ~/nvme0n1.gpt remote_user@REMOTE_COMPUTER:/mnt/data/Backup/
    

    验证文件已安全复制后,删除本地副本。

    rm ~/nvme0n1.gpt
    
  4. 尖端

    • 实际上,您可以并行备份每个分区,使用下面的步骤 5 中的不同终端窗口。只需确保sudo -i在每个新终端窗口中执行即可。

    • 要在备份过程中监控您的连接,请执行以下操作。

      在正在备份的计算机上,打开终端并输入:

      ping REMOTE_COMPUTER.local
      

      在远程计算机上,打开终端并输入:

      ping <IP ADDRESS OF COMPUTER BEING BACKED UP>
      

      (我认为简单来说ping ubuntu.local也可能有效,因为你是从 Live USB 运行的)。

      我认为,持续的 ping 操作可使计算机之间的连接保持畅通。我注意到,偶尔会有一台计算机无法连接;我抵制住了终止该dd进程的冲动,而另一台计算机会在几分钟后开始响应 ping 请求。

    • 如果您想查看备份过程的进度和预计时间 (ETA),可以将命令合并pv到下面的步骤 5 中。我在备份期间没有这样做,但您可以在恢复有关如何使用的部分pv

  5. 备份每个分区到远程计算机

    从正在备份的计算机运行以下命令来创建每个分区的备份。

    备份文件放在/mnt/data/Backup/远程计算机的目录中。

    /mnt/data/Backup/用远程计算机上现有的备份位置进行替换。 相应地remote_user替换REMOTE_COMPUTER

    对上面步骤 2 中列出的每个分区执行dd命令。例如,对于我的五个分区,我分别执行了以下命令:

    sudo -i
    
    # (1) 260.0 MiB
    dd if=/dev/nvme0n1p1 | ssh remote_user@REMOTE_COMPUTER dd of=/mnt/data/Backup/nvme0n1p1.img
    
    # (2) 16.0 MiB
    dd if=/dev/nvme0n1p2 | ssh remote_user@REMOTE_COMPUTER dd of=/mnt/data/Backup/nvme0n1p2.img
    
    # (3) 940.4 GiB
    date; dd if=/dev/nvme0n1p3 | gzip -1 - | ssh remote_user@REMOTE_COMPUTER dd of/mnt/data/Backup/=nvme0n1p3.img.gz; date
    
    # (4) 980.0 MiB
    dd if=/dev/nvme0n1p4 | ssh remote_user@REMOTE_COMPUTER dd of=/mnt/data/Backup/nvme0n1p4.img
    
    # (5) 12.2 GiB
    dd if=/dev/nvme0n1p5 | ssh remote_user@REMOTE_COMPUTER dd of=/mnt/data/Backup/nvme0n1p5.img
    

    请注意,对于分区号 3,我选择gzip该分区是因为其大小较大。由于这是 Windows 主分区,并且从未使用过,因此我相信磁盘上的大部分位都是零,从而可以进行显著的压缩。如果使用该磁盘,或者您不使用压缩,则备份文件可能太大;此外,将数据复制到远程计算机可能需要更长的时间。分区号 1、2、4 和 5 并不大,而且我有存储空间来备份它们,所以我没有费心压缩它们,但gzip如果您愿意,也可以对所有分区使用它们。

    这是第三个分区的示例输出。

    root@ubuntu:~ # date; dd if=/dev/nvme0n1p3 | gzip -1 - | ssh remote_user@REMOTE_COMPUTER dd of=/mnt/data/Backup/nvme0n1p3.img.gz; date
    
    Fri Nov  3 03:23:06 EDT 2017
    remote_user@REMOTE_COMPUTER's password: 
    1972205568+0 records in
    1972205568+0 records out
    1009769250816 bytes (1.0 TB, 940 GiB) copied, 4422.5 s, 228 MB/s
    45542474+1 records in
    45542474+1 records out
    23317746863 bytes (23 GB, 22 GiB) copied, 4417.97 s, 5.3 MB/s
    Fri Nov  3 04:36:49 EDT 2017
    

    以下是已备份文件的列表。

    remote_user@REMOTE_COMPUTER:/mnt/data/Backup $ ls -g -o -h
    total 36G
    -r--r--r-- 1  18K Nov  3 01:14 nvme0n1.gpt
    -r--r--r-- 1 260M Nov  3 00:55 nvme0n1p1.img
    -r--r--r-- 1  16M Nov  3 00:55 nvme0n1p2.img
    -r--r--r-- 1  22G Nov  3 04:36 nvme0n1p3.img.gz
    -r--r--r-- 1 980M Nov  3 00:56 nvme0n1p4.img
    -r--r--r-- 1  13G Nov  3 01:06 nvme0n1p5.img
    

    如您所见,Windows 分区(分区号 3)的压缩大小只有 22GB,而原始分区大小为 940GB。同样,这是可能的,因为我在计算机刚买的时候备份了这个分区。

恢复

  1. 使用 Live USB 启动

    在正在恢复的计算机上,启动 Ubuntu live USB,并打开终端窗口。

  2. 列出分区信息

    我要恢复的磁盘是/dev/nvme0n1。替换nvme0n1为您的磁盘。您可以使用 Ubuntu 中的磁盘应用程序查看磁盘及其设备名称的列表。

    sudo fdisk -l /dev/nvme0n1
    

    输出将取决于您在安装 Ubuntu 时如何对磁盘进行分区。

    Disk /dev/nvme0n1: 953.9 GiB, 1024209543168 bytes, 2000409264 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: gpt
    Disk identifier: 2CF060B8-D127-491A-80D6-6AE411E5A7B8
    
    Device             Start        End    Sectors   Size Type
    /dev/nvme0n1p1      2048     405503     403456   197M EFI System
    /dev/nvme0n1p2    405504   10172415    9766912   4.7G Linux filesystem
    /dev/nvme0n1p3  10172416  242595839  232423424 110.8G Linux filesystem
    /dev/nvme0n1p4 242595840 2000409230 1757813391 838.2G Linux filesystem
    
  3. 恢复分区表

    从正在恢复的计算机运行以下命令。

    /mnt/data/Backup/用远程计算机上现有的备份位置进行替换。 相应地remote_user替换REMOTE_COMPUTER

    cd ~/
    rcp remote_user@REMOTE_COMPUTER:/mnt/data/Backup/nvme0n1.gpt ~/
    sudo sgdisk --load-backup=nvme0n1.gpt /dev/nvme0n1
    
    The operation has completed successfully.
    
  4. 列出(已恢复)分区信息

    sudo fdisk -l /dev/nvme0n1
    

    如您所见,我的磁盘的分区表已恢复为原始制造商分区。

    Disk /dev/nvme0n1: 953.9 GiB, 1024209543168 bytes, 2000409264 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: gpt
    Disk identifier: 1C949023-866B-4764-B397-252D5125277C
    
    Device              Start        End    Sectors   Size Type
    /dev/nvme0n1p1       2048     534527     532480   260M EFI System
    /dev/nvme0n1p2     534528     567295      32768    16M Microsoft reserved
    /dev/nvme0n1p3     567296 1972772863 1972205568 940.4G Microsoft basic data
    /dev/nvme0n1p4 1972772864 1974779903    2007040   980M Windows recovery environment
    /dev/nvme0n1p5 1974779904 2000396287   25616384  12.2G Microsoft basic data
    
  5. 尖端

    • 实际上,您可以并行恢复每个分区,使用下面的第 7 步中的不同终端窗口。只需确保sudo -i在每个新终端窗口中执行即可。

    • 要在备份过程中监控您的连接,请执行以下操作。

      在正在恢复的计算机上,打开终端并输入:

      ping REMOTE_COMPUTER.local
      

      在远程计算机上,打开终端并输入:

      ping <IP ADDRESS OF COMPUTER BEING RESTORED>
      

      (我认为简单来说ping ubuntu.local也可能有效,因为你是从 Live USB 运行的)。

  6. 安装进度监控工具

    安装一个工具,用于在终端中查看恢复过程的进度。此工具将在后续命令中用到。

    sudo apt install pv
    

    pv在命令行上显示进度条,其中包含百分比和剩余时间 (ETA)。我发现 ETA 非常准确;这非常有用,因为恢复 1TB 分区可能需要一天多的时间。请注意,ETA 1:12:05:40 翻译为“一个 24 小时的一天:十二小时:五分钟:四十秒”;换句话说,差不多 36 小时!

  7. 从远程计算机恢复每个分区

    从正在恢复的计算机上运行以下命令。

    备份文件是从/mnt/data/Backup/远程计算机上的目录复制的。

    /mnt/data/Backup/用远程计算机上现有的备份位置进行替换。 相应地remote_user替换REMOTE_COMPUTER

    使用步骤 4 中的信息作为 的值pv -s,这样它就可以计算出您的 ETA。您可以四舍五入到最接近的 MB,因为这不必精确;它只是向您显示大约剩余多少时间。

    对上面第 4 步中列出的每个分区执行dd命令。例如,对于我的五个分区,我分别执行了以下命令:

    sudo -i
    
    # (1) 260.0 MiB
    date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p1.img" | pv -s 260M | dd of=/dev/nvme0n1p1; date
    
    # (2) 16.0 MiB
    date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p2.img" | pv -s 16M | dd of=/dev
    
    # (3) 940.4 GiB
    date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p3.img.gz | gunzip -1 - " | pv -s 940G | dd of=/dev/nvme0n1p3; date
    
    # (4) 980.0 MiB
    date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p4.img" | pv -s 980M | dd of=/dev/nvme0n1p4; date
    
    # (5) 12.2 GiB
    date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p5.img" | pv -s 12G | dd of=/dev/nvme0n1p5; date
    

    请注意,对于分区 3,我们解压了备份文件。如果您还压缩了其他分区的备份文件,gunzip也请将其用于这些文件。

    以下是分区号 4 的输出示例。您需要输入远程计算机的密码。密码输入提示可能会被进度输出稍微遮挡,但只需输入您的远程密码,然后按 Enter 即可。

    root@ubuntu:~ # sudo -i
    root@ubuntu:~ # date; ssh remote_user@REMOTE_COMPUTER.local "dd if=/mnt/data/Backup/nvme0n1p5.img" | pv -s 12G | dd of=/dev/nvme0n1p5; date
    Sun Feb 11 03:17:30 UTC 2018
    remote_user@REMOTE_COMPUTER's password:
    12.2GiB 0:33:01 [6.31MiB/s] [=========================================================================>] 101%            
    25616384+0 records in
    25616384+0 records out
    13115588608 bytes (13 GB, 12 GiB) copied, 1982.54 s, 6.6 MB/s
    Sun Feb 11 03:50:33 UTC 2018
    

    性能说明

    我使用了 5 GNZ Wi-Fi(无线 AC)来完成此过程。要备份的计算机有一个 nvme 驱动器,而接收备份文件的计算机有一个 SSD 驱动器。最大的分区是 940 GB;备份此分区花了一个多小时,但恢复它却花了 36 个小时。在整个过程中,Wi-Fi 传输速率在 ~4 MiB/s 到 ~12 MiB/s 之间波动,有时会降至 0MiB 或短暂达到 16MiB。

    我的机器刚从制造商那里买来时我就做了备份,因此未使用的 nvme 磁盘在所有未使用的区域都有“零”;这使得 940GB 分区的压缩率和备份时间非常快。

    因此,我强烈建议在您的计算机是新的时候、启动 Windows 之前先进行备份。

相关内容