AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 424208
Accepted
Mephisto
Mephisto
Asked: 2018-02-15 11:41:24 +0800 CST2018-02-15 11:41:24 +0800 CST 2018-02-15 11:41:24 +0800 CST

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

  • 772

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

现在有没有简单的方法来做同样的事情,将 efi 分区挂载为 /boot/efi,然后是带有 / 挂载点的主 ext4 分区和交换?

backup uefi
  • 3 3 个回答
  • 1435 Views

3 个回答

  • Voted
  1. Johan Myréen
    2018-02-15T14:34:31+08:002018-02-15T14:34:31+08:00

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

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

    • 3
  2. Mio Rin
    2018-02-15T12:26:41+08:002018-02-15T12:26:41+08:00

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

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

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

    • 2
  3. Best Answer
    Mephisto
    2018-02-15T17:47:21+08:002018-02-15T17:47:21+08:00

    此备份将复制分区表,然后对分区内容进行增量备份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/ ,/proc/ ,/sys/ ,/tmp/ ,/run/ ,/mnt/ ,/media/ ,/lost+found ,/home/ /.gvfs,/var/tmp/ ,/home/ /.cache/ ,/home/ /.thumbnails/ / ,/root/.thumbnails/ / ,/root/.cache/ ,/home/ / .config/VirtualBox/*} --delete

      备注1:这是一个增量备份,意思是下次你做的时候,你不需要再复制所有的东西,但只有改变的文件会自动更新(而那些被删除的,也会从副本中删除) )。

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

    6. 如何恢复所有这些:

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

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

      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
    
    • 2

相关问题

  • Red Hat 7.4:如何将 kickstart 文件注入仅 UEFI 系统的 USB 介质?

  • /sys/firmware/efi/efivars/ 中的 efi 变量条目

  • 用于增量备份的 pax 命令,带有类似于 rsync 的硬链接

  • 如何为多个项目组织您的系统?[关闭]

  • 我可以将时移快照保存到保管箱吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve