如何对整个硬盘和分区表进行完全增量、可搜索的备份?

如何对整个硬盘和分区表进行完全增量、可搜索的备份?

在 UEFI 出现之前,这曾经很容易。您只需使用 dd 备份前 63 个扇区,然后使用 rsync 来维护 / 分区中所有内容的副本。

现在有没有简单的方法可以做到同样的事情,其中​​将 efi 分区安装为 /boot/efi,然后使用 / 挂载点和交换来安装主 ext4 分区?

答案1

使用rsync备份根分区和ESP(EFI系统分区)上的文件。如果您还想要分区表的副本​​,可以使用 的sgdisk( -bbackup) 选项将分区表的备份保存到文件中。使用-l(加载)来恢复。 sgdisk 手册页建议您仅将备份恢复到同一磁盘,因为即使在名义上大小相同的磁盘上,大小也可能略有不同。无论如何,如果您只是手动重新创建分区,情况可能会更好。

我认为使用 UEFI 备份磁盘更加容易,因为除了分区表之外的所有内容都在文件中,而不是像第一个 GRUB 阶段那样在 msgic、非分区扇区中。

答案2

dd if=/dev/sda of=/my/backup/image.img bs=8M当我需要 EFI 在备份的驱动器上保持完整时,我倾向于将整个设备映像到映像文件。

这可能有点矫枉过正(而且耗时),但这是我所知道的最简单的方法。

如果需要,您可以将映像安装为循环设备并浏览/管理其中的文件。gnome-disk-utility提供了一个易于使用的 GUI 来处理这个问题。

答案3

此备份将复制分区表,然后对分区内容进行增量备份rsync。相对于盲目完整备份的优点dd是,您可以经常快速更新备份,并且只有已更改的信息才会更新,而且您可以在副本中轻松访问所有文件,并且可以在之前修改它们恢复备份,或仅拯救其中的一些。

我正在使用 Debian Stretch(命令可能有不同的名称,例如 RedHat)

这里的一切都是以 root 身份完成的,所以要小心!:

su

  1. 查看哪个硬盘被识别为sda、sdb等

    fdisk -l

    我看到我要备份的笔记本电脑硬盘驱动器名为/dev/sda(sda1、sda2...是分区)。

    警告:不要盲目复制行。我假设我要备份的硬盘驱动器是,/dev/sda但可能不是您的情况。

  2. 将外部硬盘安装到我们要存储备份副本的位置:

    通过再次执行,fdisk -l我可以看到它的名字是 now /dev/sdb。 Debian Stretch 将其挂载,/media/[username]/[whatever]但我更喜欢将其作为 root 挂载在 下/mnt/USB/,因此:

    umount /media/[username]...
    mkdir /mnt/USB/  # this is done only this first time
    mount -t auto /dev/sdb1 /mnt/USB -rw
    mkdir /mnt/USB/backup #this is done only this first time
    mkdir /mnt/USB/backup/partition_table #this is done only this first time
    mkdir /mnt/USB/backup/files #this is done only this first time
    
  3. 判断分区表类型是MBR还是GPT

    parted /dev/sda print
    

    您会看到“分区表:gpt”或“分区表:msdos”

  4. 将分区表备份到外部硬盘中的文件

    如果您有 MBR 表(分区表:msdos):

    我们可以对存储分区表的所有扇区进行完整的二进制备份:

    dd if=/dev/sda of=/mnt/USB/backup/partition_table/backup-sda.mbr bs=512 count=1
    

    (稍后我们将看到如何恢复它)

    备注:我更喜欢dd后者,sfdisk因为后者会要求你确认是否要向分区表写入一些更改,而在我尝试的过程中,我不小心按了“Y”,所以很容易搞砸。

    如果您有 GPT 表

    sgdisk --backup=/mnt/USB/backup/partition_table/gpt_partition_table.bin /dev/sda
    

    (稍后我们将看到如何恢复它)

  5. 将所有文件增量备份到外部驱动器:

    这假设您像我一样,在硬盘驱动器中安装了一个 Linux 发行版,并且所有信息树都挂在/请各位知识渊博的 Linux 人员以更技术性的方式重写此内容)。就我而言,备份所有内容可以/解决问题,因为 efi 分区已挂载,因此/boot/efi其内容也将包含在备份中:

    rsync -aAXv /* /mnt/USB/backup_of_laptop_hd/files --exclude={/dev/,/过程/,/系统/,/tmp/,/跑步/,/mnt/,/媒体/,/丢失+找到,/家//.gvfs,/var/tmp/,/家//。缓存/,/家//.缩略图//,/root/.缩略图//,/root/.cache/,/家//.config/VirtualBox/*} --删除

    备注1:这是一增加的备份,这意味着下次执行此操作时,无需再次复制所有内容,而只会自动更新已更改的文件(删除的文件也会从副本中删除)。

    备注2:{} 之间的所有选项对于备份(例如临时内容)和虚拟机(我更喜欢在每台计算机上保留一个封装的 .ova 文件)都是没有意义的。

  6. 如何恢复这一切:

    首先,最坏的情况是你永远弄乱了硬盘。您首先要恢复分区表(如果您的分区表仍然存在,请跳过此步骤),然后从实时 USB 启动:

    在实时发行版中打开终端并检查硬盘驱动器的名称

    fdisk -l
    

    我假设笔记本电脑的硬盘仍然/dev/sda在示例中(警告,这次很可能是/dev/sdb)。

    如果您的表是 MBR 表,请按照我们上面的操作安装带有备份的外部硬盘驱动器,然后:

    dd if=/mnt/USB/backup/partition_table/backup-sda.mbr of=/dev/sda
    

    但是,如果您的表是 GPT 表,则它将是:

    sgdisk --load-backup=/mnt/USB/backup/partition_table/gpt_partition_table.bin /dev/sda
    

    如果您已经执行了此操作,或者由于分区完好无损而无需执行此操作,那么是时候恢复所有文件了。这也可以在正常工作的系统中非常安全地使用,将其恢复到最后的备份:

    rsync -aAXv /mnt/USB/backup/files/* / --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs,/var/tmp/*,/home/*/.cache/*,/root/.cache/*} --delete
    cp /mnt/USB/backup/files/vmlinuz / --preserve=all --remove-destination
    cp /mnt/USB/backup/files/vmlinuz.old / --preserve=all --remove-destination
    cp /mnt/USB/backup/files/initrd.img / --preserve=all --remove-destination
    cp /mnt/USB/backup/files/initrd.img.old / --preserve=all --remove-destination
    

    评论:最后四行我必须将它们添加到rsync命令中,因为由于某种原因,直接位于树根的文件不会被恢复。另外,当文件夹直接位于 / 上并在计算机中删除时,它不会在备份中删除。这不会带来任何麻烦(相应的文件和库不再存在,因此没有人链接或需要它们),但它很丑陋。谁能帮我纠正这里的 rsync 语法?

    最后,

    grub-install /dev/sda
    

备注1:虽然我经常使用上述 rsync 语法将系统恢复到以前的状态,但我从未需要恢复分区表,因此:

  1. 您需要自行承担风险,并且,
  2. 请随时提出修改建议以改进此答案。

备注2:为了简单起见,对于 MBR 分区,我仅介绍如何使用dd.如果您有扩展分区,请按以下方式进行备份:

    dd if=/dev/sda of=/mnt/USB/backup/partition_table/backup-sda.mbr bs=512 count=1

    sfdisk -d /dev/sda > /mnt/USB/backup/partition_table/backup-sda.sfdisk

并通过以下方式恢复 MBR 和分区表:

    dd if=/mnt/USB/backup/partition_table/backup-sda.mbr of=/dev/sda

    sfdisk /dev/sda < /mnt/USB/backup/partition_table/backup-sda.sfdisk

相关内容