跳转到内容

如何备份操作系统

25% developed
来自维基教科书,开放的书籍,开放的世界

这是一个逐步指南,用于备份和恢复安装在您的 PC 上的操作系统(Linux、Windows 等)。具体来说,它描述了如何使用免费工具备份和恢复硬盘分区和 MBR 引导代码,并讨论了备份和恢复过程和场景。备份和恢复分别需要大约 10 分钟。

常见问题解答

[编辑 | 编辑源代码]

为什么这有用?

[编辑 | 编辑源代码]

用途和好处包括

  • 在系统升级或其他“手术”失败后,您可以将系统回滚到其之前的精确状态。
  • 如果一段时间后您的系统性能下降,您可以将系统回滚到其“全新安装”状态,而无需重新安装。
  • 如果您正在使用您的电脑并且您的系统出现问题,与其花时间研究和解决问题,您可以在几分钟内恢复您的系统并继续工作。
  • 如果您不确定新问题是硬件问题还是软件问题,您可以将系统软件回滚到您知道它正常工作的时间点。如果问题仍然存在,则很可能是硬件问题。
  • 您的系统感染了病毒。从备份恢复是一个快速彻底的解决办法,相当于格式化整个硬盘并从头开始重新安装所有内容(在 10 分钟内)。
  • 您在公共场所维护系统。与其担心有人可能会“搞乱”系统,您知道可以在几分钟内恢复它。
  • 将您的备份存储在 CD/DVD、外置驱动器或网络共享上,如果硬盘出现故障,您可以购买新的硬盘并简单地从备份恢复分区。
  • 在安装操作系统期间,您可以在几个阶段进行备份。例如,您可以在安装视频驱动程序之前进行备份。如果您遇到驱动程序问题,与其尝试干净地删除它并重试,您可以将系统回滚,确信它对下一次驱动程序测试是“干净的”。
  • 拥有 MBR 备份意味着可以轻松修复 MBR 损坏或覆盖。
  • 您可以测试新版本的您的操作系统。如果它没有达到您的预期,您可以在几分钟内恢复您的旧系统。
  • 您的备份工具不依赖于任何商业产品或安装在您的计算机上的任何操作系统。

简而言之,这是一个相对简单的过程,值得花时间学习!掌握这项技术可以消除对系统更改的大部分恐惧 - 您知道如何对您所做的一切按下“倒带”按钮,并且倒带按钮可靠且快速地工作。


哪些操作系统可以备份?

[编辑 | 编辑源代码]

您运行什么操作系统并不重要。唯一的限制是正在使用的文件系统和数据量。大多数 Linux 和 Windows 系统都支持备份。虽然本指南中的一些工具可用于 Mac,但本指南没有专门介绍 Mac 备份。

本指南支持以下文件系统(至少):ext2/3/4、reiserfs、reiser4、btrfs、xfs、jfs、vfat、fat16/32、ntfs、iso9660。请注意,无法使用本指南中的方法备份加密分区。

第二个问题是将要备份的硬盘分区上的数据量。虽然对涉及的分区大小没有一般限制,但最实用的方法是备份一个系统,该系统为操作系统和用户数据设置了单独的分区。这使得备份的大小变得实用。这意味着,如果您的硬盘只有一个巨大的分区包含操作系统和用户数据(电影、音乐文件、文档等),则由于备份的大小以及在某些情况下缺乏存储备份的空间(不能存储在正在备份的分区上),备份此系统将很困难。在这种情况下,请考虑重新分区您的硬盘,以便您的操作系统与已安装的软件存储在它自己的分区中,与您的用户数据文件分开。(重新分区硬盘超出了本指南的范围,这里没有描述。)

谁可以使用本指南?

[编辑 | 编辑源代码]

本指南主要面向维护多操作系统系统的 Linux 用户。了解 Linux 如何引用和挂载分区以及谨慎地输入一些控制台命令将有所帮助,因为本指南使用多个 Linux 工具来完成任务。还将需要能够从 ISO 镜像刻录 CD。如果您没有这些知识,可能需要额外做一些功课才能成功使用本指南。

所需工具

[编辑 | 编辑源代码]

本指南将使用以下工具

  • SystemRescueCD - 一个免费的、精简的、可启动的 Linux CD,包含 Partimage 和 FSArchiver 程序以及其他有用的系统工具。这是您将运行以备份和维护计算机上其他系统的系统。
  • Partimage 程序 - 免费软件,可以轻松地将分区的內容复制到单个压缩的“分区镜像文件”中,也可以使用此类文件恢复分区的內容。 http://www.partimage.org/
  • FSArchiver 程序 - 一个仍在开发中的新程序,它添加了 Partimage 中未包含的功能(例如 ext4 支持)。 http://www.fsarchiver.org

获取 SystemRescueCD

[编辑 | 编辑源代码]

第一步是为自己制作一个 SystemRescueCD 的副本。该 CD 可以从 http://www.sysresccd.org/Download 下载为 iso 文件。下载 iso 文件后,建议您使用 md5sum 检查其完整性。例如,在 Linux 系统上,您通常可以通过输入以下命令来完成此操作

md5sum systemrescuecd-x86-1.3.5.iso

并将输出与下载页面上发布的 md5sum 进行比较。

最后,使用您的 CD 刻录软件刻录 CD 的副本,如果可能,让该软件验证刻录的完整性。

注意:如果您计划使用 FSArchiver,最好使用 SystemRescueCD 的最新 beta 版本。 http://www.sysresccd.org/Beta-x86

注意:本指南基于 SystemRescueCD 版本 1.3.5。更高版本应与本指南兼容,但如有疑问,请查看最新手册。

相关主题

创建备份

[编辑 | 编辑源代码]

分区备份要求

[编辑 | 编辑源代码]

要备份分区,您需要一个“源分区”(要备份的分区)和一个“目标分区”(保存备份文件的位置)。源分区和目标分区都必须包含有效的文件系统(ext2/3/4、reiserfs、reiser4、btrfs、xfs、jfs、vfat、fat16/32、ntfs、iso9660)。

注意,源分区可以是主分区或扩展分区上的逻辑驱动器 - 这没有区别。

“目标文件系统”(保存备份文件的位置)不能位于源分区上。备份文件的大小约为源分区上总数据大小的一半(而不是总分区大小的一半)。例如,如果 6 GB 的源分区包含 2 GB 的文件,则备份文件大约为 1 GB。(分区上的数据是压缩的;忽略空闲空间。)

目标文件系统的示例,可用于保存备份文件

  • 另一个已格式化的分区,位于与源分区相同的硬盘驱动器上,并具有充足的空间
  • 另一个内部硬盘驱动器上的已格式化的分区
  • 具有充足空间的 USB 存储棒或外部硬盘驱动器
  • 另一台计算机上的 NFS 共享
  • 网络上的 Windows 计算机上的共享文件夹(samba 共享)

如果您知道源分区的驱动器号和分区号,并且知道目标文件系统的位置,那么您就可以继续执行操作。

准备目标

[编辑 | 编辑源代码]

首先,您可能需要 打印本指南的副本

启动 SystemRescueCD。您通常可以在“boot:”和键盘提示符处按 Enter 键,最终将显示根控制台提示符。

输入以下命令准备目标文件系统的挂载点

mkdir /mnt/target

接下来,挂载您的目标文件系统(您将保存备份文件的位置)。示例包括

# Note: If you'd like to see a list of partitions and sizes, you can enter:
fdisk -l
# OR
cat /proc/partitions

# To mount a local partition (hard drive, USB stick, etc.):
# In this example, sda5 (partition 5 of drive 1)
mount /dev/sda5 /mnt/target

# To mount a local NTFS partition with write permission:
ntfs-3g /dev/sda5 /mnt/target

# Note: Before mounting networked filesystems as shown below, you may need to enter:
net-setup

# OR  To mount a networked Windows shared folder (samba share):
mount -t smbfs -o lfs //192.168.10.3/my-share/ /mnt/target

# OR  To mount an NFS share:
mount -t nfs 192.168.10.1:/home/user/share /mnt/target

# Finally, make sure the target filesystem is successfully mounted:
ls /mnt/target

目标文件系统挂载后,您就可以创建备份了。本指南包含两种创建分区备份的方法:FSArchiver 和 Partimage。每种方法都有其优缺点。选择最适合您要备份的每个分区的 方法。

创建分区备份 - FSArchiver 方法

[编辑 | 编辑源代码]

FSArchiver 方法最适合 linux 文件系统(ext2/3/4、reiserfs、xfs 等),也支持 ntfs。FSArchiver 比 Partimage 有几个优点:它支持 ext4 和 btrfs;它可以将数据恢复到比创建备份时原始分区更小的分区;它可以在恢复时更改文件系统类型(例如 ext3 到 ext4);它可以加密备份;它对数据进行校验和以检测损坏;它可以从部分损坏的备份中恢复文件。但是,FSArchiver **不支持 FAT** 文件系统,ntfs 支持是新的,可能不稳定。FSArchiver 还在积极开发中,因此不建议用于重要数据(截至 2010 年 1 月)。查看 FSArchiver 主页 以获取有关这些问题的最新信息。有关更多比较信息,请参见 FSArchiver 与 Partimage 的比较。要确保您拥有最新版本的 FSArchiver,请确保下载 最新版本的 SystemRescueCD

本指南目前建议,如果分区包含 ext2/3/4 或其他 linux 文件系统,则使用 FSArchiver 方法。否则,建议使用下一节中详细介绍的 Partimage 方法。

以示例为例,以下命令将创建 /dev/sda5 分区的备份,并将备份保存到 目标文件系统 上的备份文件“/mnt/target/backup-sda5.fsa”中

fsarchiver savefs /mnt/target/backup-sda5.fsa /dev/sda5

这将需要几分钟。完成后,您可以使用以下命令查看已创建的存档信息

fsarchiver archinfo /mnt/target/backup-sda5.fsa

FSArchiver 有其他存档创建选项。示例包括

# To encrypt the backup using "yourpassword":
fsarchiver -c yourpassword savefs /mnt/target/backup-sda5.fsa /dev/sda5

# To split the backup into 4300MB files for DVD burning:
fsarchiver -s 4300 savefs /mnt/target/backup-sda5.fsa /dev/sda5

# To use a dual-core processor for greater compression speed (or use -j4 for quad):
fsarchiver -j2 savefs /mnt/target/backup-sda5.fsa /dev/sda5

# To see progress and more details as the backup is created::
fsarchiver -v savefs /mnt/target/backup-sda5.fsa /dev/sda5

有关更多选项和信息,请参阅 FSArchiver 快速入门指南

如果您拥有多操作系统系统,请创建每个相关分区的备份(使用 Partimage 或 FSArchiver),并将每个备份保存到适当命名的备份文件中。(不需要备份 Linux 交换分区。)

创建分区备份 - Partimage 方法

[编辑 | 编辑源代码]

Partimage 方法适用于大多数文件系统(ext2/3、reiserfs、reiser4、xfs、jfs、vfat、fat16/32、ntfs、iso9660),但**不支持 ext4** 或 btrfs。Partimage 还有一些其他限制:它不会对数据进行校验和,因此可能无法检测到损坏;无法部分恢复损坏的存档;您只能将数据恢复到与创建备份时的原始分区大小相同或更大的分区;没有内置的加密功能;不支持多线程压缩。Partimage 的优点包括它会备份分区上的所有数据,包括 VBR 引导代码,并且会将文件恢复到其原始磁盘扇区。 Partimage 是一个比较旧的程序,非常稳定,但不再开发,因此预计不会支持 ext4。

本指南目前建议,如果分区包含 FAT(包括 vfat)或 ntfs 文件系统,则使用 Partimage 方法。否则,建议使用上一节中详细介绍的 FSArchiver 方法。

目标文件系统挂载后,运行 Partimage 程序

partimage

Partimage 的 GUI 只需要您填写框子。您可以在此处查看一些屏幕截图... http://www.partimage.org/Partimage-manual_Usage

首先,使用上/下箭头键突出显示您要备份的分区。突出显示后,按 Tab 键将光标移动到“要创建/使用的镜像文件”框中。在此处输入备份文件。例如

/mnt/target/backup-sda5

(这会将备份保存到 /mnt/target/ 中名为“backup-sda5.000”的文件中)

现在,按 Tab 键向下移动到“要执行的操作:”框,并确保选中“将分区保存到新的镜像文件中”选项(如果需要,使用空格键选择它)。按 F5 键继续。

接下来,您会看到一些选项 - 按照您的意愿设置这些选项,使用 Tab 键移动,使用空格键选中/取消选中选项。通常,您可以保持原样。如果镜像文件大于设置的大小(默认值为 2 GB),它将被分成多个文件(.000、.001 等)如果您将镜像文件保存到 FAT32 文件系统,请确保将拆分大小设置为不高于 4000 MB。如果您打算将备份刻录到 CD 或 DVD,请将其设置为 690 MB(CD)或 4300 MB(DVD)。

按 F5 键继续。

分区的內容将被压缩并保存到备份“镜像”文件(s) 中 - 在大多数系统上需要 5-10 分钟。完成后,退出 Partimage。

如果您拥有多操作系统系统,请创建每个相关分区的备份(使用 Partimage 或 FSArchiver),并将每个备份保存到适当命名的备份文件中。(不需要备份 Linux 交换分区。)

如何备份 MBR 和分区表

[编辑 | 编辑源代码]

MBR 备份

[编辑 | 编辑源代码]

有关 MBR 的内容以及为什么要备份它的讨论,请阅读 计算机如何启动 - MBR 解释

对于自动创建和恢复 MBR 备份文件的实用程序,建议使用 mbrback

MBR 备份是一个非常小的文件(512 字节)。在本例中,我们假设 /dev/sda 是系统中的第一个硬盘(启动驱动器)。根据您的实际情况替换正确的启动驱动器。

# Back up entire MBR:
dd if=/dev/sda of=/mnt/target/sda-MBR-backup bs=512 count=1

请注意,您在设备名称后面不包含分区号,只写 “sda”。

重要提示:每次更改驱动器的分区或更改 MBR 中的启动代码时,都应创建新的 MBR 备份。使用过时的备份 MBR 文件恢复 MBR 可能对驱动器上的所有数据造成致命损害!

注意:Linux 用户不需要 SystemRescueCD 来创建 MBR 备份。上面的 dd 命令可以在系统运行时从 root 控制台执行。

分区表备份

[编辑 | 编辑源代码]

虽然 MBR 包含主分区表,但不包含扩展分区表,扩展分区表存储在扩展分区中。程序 sfdisk 可用于备份和恢复整个分区表,包括扩展分区。例如,要创建第一个硬盘的分区表备份

sfdisk -d /dev/sda > /mnt/target/sda-part-table.sf

注意:sfdisk 的输出是纯文本,可以通过将文件加载到文本编辑器中或省略重定向来查看。此输出可用于 sfdisk 恢复(重新创建)分区表,如 分区表恢复 中所述。


重启和完成

[编辑 | 编辑源代码]

最后,卸载目标文件系统并重启

umount /mnt/target
reboot

当屏幕变黑时,移除 CD,以便计算机启动到您的操作系统。您现在应该在保存备份文件的位置找到它们。如果在 Linux 文件系统上,它们将由 root 拥有 - 您可以根据需要更改它们。例如

sudo chown 1000:1000 backup-sda5.*

我现在建议创建一个文本文件来描述备份文件的内容。在本例中,它可以命名为 “backup-sda5.txt”,并描述在备份时分区上安装的操作系统版本、创建日期、备份文件的 md5sum、安装的软件和驱动程序等。您也可以使用此文本文件记录您对系统进行的后续更改。这使得在恢复后记住和重复这些更改变得非常快。

您现在可以根据需要复制和移动备份文件 - 到另一个驱动器、到网络计算机、刻录到 CD 或 DVD 上。如果创建了多个备份文件,则将其编号为 .000、.001...(Partimage)或 .fsa、.f01、.f02...(FSArchiver),只需将它们放在一起 - 恢复时需要所有这些文件。

如何备份 /home 文件夹

[编辑 | 编辑源代码]

在 Linux 系统上,/home 文件夹包含用户软件/桌面设置和一些用户文件。这些数据比系统文件更频繁地更改 - 通常每天 - 因此,拥有这些数据的最新备份非常方便。此外,与系统文件不同,这些数据可以在系统运行且用户登录时可靠地备份。

手动备份 /home 文件夹

[编辑 | 编辑源代码]

以下示例假设您的备份分区已挂载到 /user - 如有必要请更改。

# To make a backup tar file of your /home folder, enter in a console:
sudo tar --preserve -czf /user/home-backup.tar.gz /home

# Or, you can save space by omitting unnecessary files:
sudo tar --preserve --exclude=/home/*/.mozilla/firefox/*/Cache/* \
--exclude=/home/*/.mozilla/firefox/*/bookmarkbackups/* \
--exclude=/home/*/.googleearth/Cache/* \
--exclude=/home/*/.local/share/Trash/* --exclude=/home/*/.thumbnails/* \
-czf /user/home-backup.tar.gz /home

/home 文件夹已压缩并保存到 /user/home-backup.tar.gz。

或者,您可以简单地将 /home 文件夹复制到备份位置,而不进行压缩

sudo cp -a /home /user/home-backup

-a 选项确保保留文件权限和所有权信息。

或者,如果您的 /home 文件夹位于它自己的单独分区上,您可以使用 Partimage 来备份该分区。

自动备份 /home 文件夹

[编辑 | 编辑源代码]

还可以自动备份 /home 文件夹,以便每天创建备份。为此,请在控制台中输入(或复制/粘贴)以下命令:(将您的所需备份位置替换为“/user”,最好是与您的系统分区不同的分区)

# Create folders for backups and scripts to be used
mkdir -p /user/scripts
mkdir -p /user/backups
# Create a script to perform daily backups
echo '#!/bin/bash' > /user/scripts/daily-home-backup.sh
echo 'tar --preserve --exclude=/home/*/.mozilla/firefox/*/Cache/* \
--exclude=/home/*/.mozilla/firefox/*/bookmarkbackups/* \
--exclude=/home/*/.googleearth/Cache/* --exclude=/home/*/.local/share/Trash/* \
--exclude=/home/*/.thumbnails/* -czf /user/backups/home-backup-$(date +%Y-%m-%d-%H%M).tar.gz \
/home' >> /user/scripts/daily-home-backup.sh
# Make the script automatically remove backups older than 20 days
echo 'find -L /user/backups -type f -mtime +20 -name "home-backup-*.tar.gz" \
-execdir rm {} \;' >> /user/scripts/daily-home-backup.sh
# Make the script owned by root (security precaution since it will be run by root)
sudo chown root:root /user/scripts/daily-home-backup.sh
# Make the script executable
sudo chmod ugo+x /user/scripts/daily-home-backup.sh
# Create a crontab file to run the backup script daily at 3:00AM
echo '00 3 * * * /user/scripts/daily-home-backup.sh' > /user/scripts/root-crontab
# Install the crontab file
sudo crontab -u root /user/scripts/root-crontab

上面的命令会生成以下可执行脚本 (/user/scripts/daily-home-backup.sh) 并将其安排在每天凌晨 3:00 运行

#!/bin/bash
tar --preserve --exclude=/home/*/.mozilla/firefox/*/Cache/* \
--exclude=/home/*/.mozilla/firefox/*/bookmarkbackups/* --exclude=/home/*/.googleearth/Cache/* \
--exclude=/home/*/.local/share/Trash/* --exclude=/home/*/.thumbnails/* \
-czf /user/backups/home-backup-$(date +%Y-%m-%d-%H%M).tar.gz /home
find -L /user/backups -type f -mtime +20 -name "home-backup-*.tar.gz" -execdir rm {} \;

每次想要手动创建 home 的备份时,只需输入

sudo bash /user/scripts/daily-home-backup.sh

如果您决定不想让 daily-home-backup.sh 脚本每天运行,只需删除 crontab 作业

sudo crontab -u root -r

上面的脚本只是一个简单的示例,可以通过编辑 /user/scripts/daily-home-backup.sh 来定制。大多数系统上还有 GUI 备份程序可以自动备份您的 /home 文件夹。

从备份中恢复

[编辑 | 编辑源代码]

恢复要求

[编辑 | 编辑源代码]

恢复分区的内容应恢复备份时存在的所有文件和启动信息。假设分区包含您的操作系统,则位于该分区上的所有设置和已安装的软件将恢复到以前的状态。

要恢复,您需要一个 Partimage 或 FSArchiver 创建的备份文件,以及一个目标分区。目标分区可以位于任何驱动器上,不需要是创建备份的同一个分区。您可以将备份文件恢复到任何驱动器上的任何分区,只要

  • 如果备份文件包含操作系统,请确保备份文件是在同一台计算机上创建的。通常,尝试使用一台计算机上创建的备份文件在另一台计算机上使用,除非硬件几乎完全相同,否则这是一个不好的主意。(每台计算机通常都有不同的主板、显卡、内存和其他细节。运行在不同机器硬件上安装的操作系统通常不会很好地运行!)为每台计算机的操作系统(es)创建单独的备份文件,不要将它们混在一起。
  • 目标分区不需要在其上具有有效的文件系统。它可以是未格式化的,也可以包含任何文件系统或数据。无论存在什么,都将被覆盖。如果您要恢复到一个全新的驱动器,您只需创建分区(使用 cfdisk、sfdisk 或类似程序)。
  • (仅限 Partimage)目标分区的大小必须至少与创建备份的原始分区一样大,而不仅仅是足够大到容纳数据。例如,如果原始源分区为 10 GB,并且其中有 2 GB 的文件,则新的目标分区必须至少为 10 GB(或更大 - 取决于文件系统,它可能会自动增长以使用可用空间)。Partimage 将拒绝恢复到比原始分区更小的分区。(Partimage 使用低级块/集群复制来复制和恢复分区的內容,因此文件数据被放置在分区上的原始位置。更多信息) 要将分区复制和恢复到更小的分区,请使用 FSArchiver 方法,或在 如何将数据复制到更小的分区 中描述的方法。)

如果你知道备份映像文件的存储位置和类型(Partimage 或 FSArchiver),并且它可以从计算机访问,并且你知道目标分区所在的驱动器和编号,那么你就可以准备恢复了。请注意,Partimage 备份的扩展名为 .000、.001 等,而 FSArchiver 备份的扩展名为 .fsa、.f01 等。

准备源文件

[编辑 | 编辑源代码]

首先,启动 SystemRescueCD 并挂载存储备份文件的分区或网络共享。使用我们之前示例中的备份位置

# Our backup file is on /dev/sda5
mkdir /mnt/back
mount /dev/sda5 /mnt/back

或者,如果你将备份文件刻录到可启动的 SystemRescueCD DVD 上(查看操作方法),你将在 /mnt/cdrom 中找到它。你不需要挂载任何内容。

或者,如果你的备份文件位于单个 CD 或 DVD 上,你可以在启动 SystemRescueCD 之前将备份文件复制到另一个位置,或者你可以以一种可以从驱动器中取出备份文件的方式启动 SystemRescueCD。为此,在 "boot:" 提示符下输入

boot: fb1024 docache doeject

或者

boot: fb800 docache doeject

SystemRescueCD 启动后,CD 将弹出,你可以将另一张 CD 或 DVD 插入驱动器并挂载它。

或者,如果你的备份文件被拆分为多个文件(.000、.001 等),你必须在继续之前将它们复制到一个位置,例如另一个分区或网络共享,并挂载这个位置。

恢复分区 - FSArchiver 方法

[编辑 | 编辑源代码]

如果你使用 FSArchiver 创建了备份文件,你必须使用此方法恢复它。

以示例为例,要从备份文件 /mnt/back/backup-sda5.fsa 恢复 /dev/sda5(替换你要恢复到的设备名称!)

fsarchiver restfs /mnt/back/backup-sda5.fsa id=0,dest=/dev/sda5

注意:上述命令中的 "id=0" 指定要恢复的存档中的文件系统 #0。除非你将多个文件系统保存到存档文件,在本指南中未涵盖,否则始终使用 "id=0"。

如果你使用 -c 选项对存档进行加密,请在恢复时使用相同的 -c 选项。

如果你的备份被拆分为多个文件(.fsa、.f01、.f02...),只需指定第一个文件(带有 .fsa 扩展名),FSArchiver 会找到其余文件。

注意:与 Partimage 不同,Partimage 使用低级块复制来恢复分区的完全副本,FSArchiver 重新创建文件系统。这意味着文件将在磁盘上的不同位置。如果你恢复的分区包含 GRUB 的阶段文件(/boot/grub/),你需要 将 GRUB 重新安装到 MBR ,以便它可以标记其文件的新磁盘位置。如果使用 LILO,它也必须重新安装。

注意:如果你恢复到与原始分区不同的分区,你可能需要更改 Linux(GRUB、fstab)或 Windows(boot.ini)启动信息。请参阅 恢复场景 部分了解更多信息。

最后,卸载你挂载的内容,然后重启

umount /mnt/back
reboot

在空白屏幕处移除 SystemRescueCD,你的计算机将回到过去!

恢复分区 - Partimage 方法

[编辑 | 编辑源代码]

如果你使用 Partimage 创建了备份文件,你必须使用此方法恢复它。一旦你挂载了备份文件的位置,就运行 Partimage

partimage

首先,使用上箭头和下箭头键,突出显示目标分区(使用你的备份文件恢复的分区)。

按 Tab 键将光标移动到 "要创建/使用的映像文件" 字段。输入你的备份文件位置和名称。在本示例中

/mnt/back/backup-sda5.000

(如果你有多个备份文件,只需输入第一个文件的名称,包括扩展名 .000)

然后按 F5 键继续。按照屏幕上的说明进行操作,分区通常会在 5-10 分钟内恢复。

退出 Partimage,卸载你挂载的内容,然后重启

umount /mnt/back
reboot

注意:如果你恢复到与原始分区不同的分区,你可能需要更改 Linux(GRUB、fstab)或 Windows(boot.ini)启动信息。请参阅 恢复场景 部分了解更多信息。

在空白屏幕处移除 SystemRescueCD,你的计算机将回到过去!

如何将数据复制到较小的分区

[编辑 | 编辑源代码]

如果你想将分区的内容复制到一个较小的分区,并且无法使用 FSArchiver,你可以使用 cp 命令避免 Partimage 的限制。启动 SystemRescueCD,并执行以下示例命令的变体

# format destination partition (in this example /dev/sda3 using ext3)
# WARNING: this destroys all data on the partition!
mkfs.ext3 /dev/sda3
# mount source partition (/dev/sda2) and target
cd /mnt
mkdir source
mkdir target
mount /dev/sda2 source
mount /dev/sda3 target
# copy the filesystem
# Note: be sure to include the dots
cp -ax /mnt/source/. /mnt/target/.

注意:与 Partimage 不同,上述方法只复制分区上的文件。它不复制分区的 VBR 启动扇区(对 Windows 启动至关重要),并且它会更改 Linux 内核文件的存储位置(这可能需要将引导加载程序重新安装到 MBR)。

如何恢复 MBR 和分区表

[编辑 | 编辑源代码]

MBR 恢复

[编辑 | 编辑源代码]

只有在必要时才应恢复 MBR,并且应确保你拥有最新的备份文件。因为主分区表存储在 MBR 中,所以包含不同版本分区表的过时备份文件会导致数据丢失。

如果你只是回滚分区状态以回滚你的操作系统,则不需要恢复 MBR。只有当系统无法按预期启动(可能是 MBR 损坏、你购买了新的硬盘并且没有可启动的 MBR,或者你安装了 Windows,它会覆盖 MBR 而不会安装多操作系统引导管理器)或者主分区表损坏时,才需要恢复 MBR。请参阅 恢复场景 部分以确定何时适合恢复 MBR。

你可以选择恢复整个 MBR,这将恢复引导代码以及主分区表。或者,你可以只恢复 MBR 中的引导代码。如果分区表没有问题,只需恢复引导代码。

如果你之前在硬盘的 MBR 中安装了 GRUB,从备份中恢复引导代码通常等同于将 GRUB 重新安装到 MBR。

对于自动备份和恢复 MBR 的实用程序,mbrback 是推荐的。

在本示例中,我们假设 /dev/sda 是系统中的第一个硬盘(启动驱动器)。请相应地替换你正确的启动驱动器。

启动 SystemRescueCD 并挂载存储你的备份文件的位置。使用我们之前示例中的备份位置

# Our backup file is on /dev/sda5
mkdir /mnt/back
mount /dev/sda5 /mnt/back

# Our boot drive is /dev/sda
# To restore the boot code ONLY, leaving the partition table unchanged:
dd if=/mnt/back/sda-MBR-backup of=/dev/sda bs=448 count=1

# OR, to restore the ENTIRE MBR (including partition table):
dd if=/mnt/back/sda-MBR-backup of=/dev/sda bs=512 count=1

重要:请注意,在 dd 命令中,你没有在设备名称后包含分区号,只是 "sda"。

注意:Linux 用户可能不需要 SystemRescueCD 来恢复 MBR。如果你有工作的 Linux 系统,可以在系统运行时从 root 控制台执行上述 dd 命令。

分区表恢复

[编辑 | 编辑源代码]

虽然 MBR 包含主分区表,但它不包含扩展分区表。如果需要恢复完整的分区表(可能是它已损坏或被错误地修改),则可以使用 sfdisk 创建的备份文件。(此方法也适用于在与另一个驱动器相同的新的驱动器上创建分区表。)例如,要从第一个硬盘的备份中重新创建分区表

sfdisk /dev/sda < /mnt/back/sda-part-table.sf

如何恢复 /home 文件夹

[编辑 | 编辑源代码]

如果 /home 位于单独的分区上,则可以使用与其他分区相同的方法恢复它。

如果 /home 文件夹被复制或压缩,请启动你的操作系统或 SystemRescueCD。如果使用你的操作系统,重要的是不要以图形用户身份登录系统。在图形桌面管理器问候语处,按 Ctrl-Alt-F1 访问控制台。以 root(首选)或用户身份登录。

如果使用 SystemRescueCD,你必须挂载备份文件的位置和 /home 文件夹的位置,然后继续,并在以下示例中使用 /home 的正确位置(例如 /mnt/mysystem/home 而不是 /home)。

# First, remove the /home folder:
sudo rm -r /home

# If your backup of the /home folder was a copy made with "cp -a", just copy it back:
sudo cp -a /user/home-backup /home

# OR, if your backup is a tar file:
sudo cd /
sudo tar xzfp /user/home-backup.tar.gz

然后你可以重启(输入 "reboot")或按 Ctrl-Alt-F7 登录到桌面。


计算机如何启动 - MBR 解释

[编辑 | 编辑源代码]

了解计算机启动的基本原理非常重要,这样您就知道在维护系统时需要备份什么以及需要恢复什么。

BIOS 设备优先级

[编辑 | 编辑源代码]

当您打开计算机时,BIOS 编程(存储在主板上的内存芯片中)开始运行。除了其他功能外,此 BIOS 程序还会确定哪个驱动器或设备将首先启动。可以通过在启动时进入 BIOS(又称设置)来更改“启动设备优先级”。典型的启动设备优先级为软盘、CDROM、硬盘 1。在大多数情况下,BIOS 可以被告知系统上的哪个设备应被视为驱动器 1。这使您可以控制启动系统的设备。

主引导记录

[编辑 | 编辑源代码]

然后,BIOS 会查询启动设备的主引导记录 (MBR)。MBR 不位于设备的任何分区上。相反,它是设备的第一个 512 字节扇区,位于第一个分区之前。

MBR 包含

  • 一个“引导代码”区域
  • 主分区表
  • 一个 32 位“磁盘签名”

MBR 引导代码

[编辑 | 编辑源代码]

在启动启动设备(例如硬盘)时,BIOS 会运行 MBR 中包含的程序代码(此程序称为 MBR 的“引导代码”。重新分区硬盘、格式化分区或从备份还原分区不会改变或还原 MBR 引导代码。

MBR 引导代码通常仅由以下内容修改

  • OS 的安装程序(例如 Linux 或 Windows 安装光盘)
  • OS 的修复工具(例如 Windows fixmbr)
  • 安装引导管理器(例如 GRUB)
  • 本指南中使用的直接磁盘写入(dd)
  • 感染 MBR 的病毒
  • 磁盘擦除工具(例如 DBAN)

MBR 主分区表

[编辑 | 编辑源代码]

除了引导代码外,MBR 还包含驱动器的主分区表。此信息包括分区的大小、编号和 OS 类型,以及哪个分区被标记为“可启动”(称为驱动器的“引导”或“活动”分区)。(定义驱动器任何逻辑分区的扩展分区表位于扩展分区上,而不是 MBR 中。)MBR 的主分区表由以下内容修改

  • OS 的安装程序(例如 Linux 或 Windows 安装光盘)
  • 分区软件(例如 cfdisk、sfdisk、Gparted)
  • 本指南中使用的直接磁盘写入(dd)

格式化分区或更改分区上的数据不会更改分区表。您必须调整大小、删除或创建分区、更改其类型或更改可启动分区才能影响 MBR 的分区表。

MBR 磁盘签名

[编辑 | 编辑源代码]

最后,应该注意的是,MBR 包含一个 32 位数字(“Windows NT 磁盘签名” - 现在也用于 Linux)旨在唯一地识别磁盘介质(注意:这与存储在分区上的文件系统中的 UUID 不同)。将整个 MBR 从 MBR 备份文件还原到新驱动器将复制此数字。

有关 MBR 的详细讨论,请参见:http://en.wikipedia.org/wiki/Master_boot_record

引导管理

[编辑 | 编辑源代码]

一旦 BIOS 将控制权传递给 MBR 引导代码,该程序将决定下一步该做什么。MBR 的引导代码区域不是很大,因此它无法做太多的事情。它主要做的就是将控制权传递给另一个程序。以下是几种可能的引导配置

通用引导代码

[编辑 | 编辑源代码]

在简单的单 OS 系统(例如 DOS 或早期 Windows)上,MBR 引导代码会检查 MBR 的分区表部分以查看哪个分区被标记为“可启动”(又称“活动”)。然后,它将控制权传递给此启动分区的卷引导记录 (VBR)。(VBR 存储在分区的前几个扇区中,而 MBR 存储在驱动器的第一个扇区中)。在这种情况下,VBR 包含一个引导加载程序 - 一个程序,已安装的 OS 使用它来启动并运行。使用这种通用 MBR 引导代码,唯一能够启动其他分区的办法是修改分区表。具体来说,使用 cfdisk 之类的程序,您必须更改哪个分区被标记为“可启动”.

Linux 引导管理器

[编辑 | 编辑源代码]

在大多数 Linux 系统上,MBR 引导代码包含一个引导管理器,例如 GRUB 或 LILO。例如,如果将 GRUB 安装到驱动器的 MBR,它将首先运行。GRUB 会查询其“根分区”以获取更多信息。(安装 GRUB 时,会将一个分区定义为 GRUB“根”,并包含 GRUB 使用的数据,通常位于 /boot/grub/ 中。具体来说,GRUB 的“menu.lst”或“grub.cfg”文件告诉 GRUB 系统上哪些分区可以启动以及如何启动它们。)GRUB 可能会在启动时向用户显示一个菜单,询问要启动哪个分区。然后,控制权将传递给 Linux 内核和引导程序。请注意,这种情况至少在两个地方存储了重要的引导信息:在 MBR 引导代码中,以及在被指定为 GRUB“根”的分区上。如果任一区域损坏或更改,都可能会影响引导过程。请注意,此方法会忽略分区表中哪个分区被标记为“可启动”。还要注意,GRUB 在 MBR 引导代码中存储其阶段文件所在的物理磁盘扇区。如果此文件的物理位置发生变化(例如,由于使用 FSArchiver 还原),则需要将 GRUB 重新安装到 MBR。

Windows 引导管理器

[编辑 | 编辑源代码]

在更新的 Windows 系统(如 NT、XP 和 Vista)上,使用引导管理器:NT Loader 又称“NTLDR”(Windows NT 和 XP),或 Windows Boot Manager(Windows Vista)。安装 Windows 时,MBR 的引导代码将被覆盖。启动时,此代码会将控制权传递给启动分区的 VBR,VBR 接着会将控制权传递给 NT Loader 或 Windows Boot Manager,它们将控制剩余的引导过程。有时,引导管理器会显示一个菜单,询问用户要启动哪个安装的 Windows 版本。请注意,这种情况至少在四个地方存储了重要的引导信息:在 MBR 引导代码中,在 MBR 分区表的启动标志中,在启动分区的 VBR 中,以及在包含 NT Loader 或 Windows Boot Manager 的分区的文件系统中。如果这些区域中的任何一个损坏或更改,都可能会影响引导过程。

Linux 和 Windows

[编辑 | 编辑源代码]

如果多操作系统系统包括 Linux 和 Windows,则必须使用 Linux 引导管理器来控制引导过程,因为 Windows 引导管理器不支持 Linux 分区。这种设置与仅 Linux 系统非常相似,只是为了引导 Windows 分区,引导管理器(例如 GRUB)会将控制权传递到 Windows 分区的 VBR,从而允许 Windows 引导加载程序或管理器接管控制权(称为链式加载)。请注意,此方案在几个地方存储重要的引导信息:在 MBR 引导代码中,在指定为 GRUB 的“根”的分区上,在 Windows 分区(s) 的 VBR(s) 中,以及在包含 NT Loader 或 Windows 引导管理器的分区(s) 的文件系统(s) 中。如果这些区域中的任何一个损坏或更改,可能会影响引导过程。请注意,此方法忽略了分区表中哪个分区被标记为“可引导”。

Grub 在 VBR 中及更多

[edit | edit source]

GRUB 安装的另一种更罕见的变化是将 GRUB 的引导代码仅安装到分区的 VBR 区域,而不是安装到驱动器的 MBR 中。在这种情况下,MBR 包含通用引导代码,它只引导“可引导”分区。如果安装 GRUB 到 VBR 的分区被标记为“可引导”,GRUB 将引导,并将显示其菜单,同样基于其位于其根分区上的配置文件。

还有许多其他可能的引导管理变体,但上面的示例描述了最常见的配置。

备份和恢复引导过程

[edit | edit source]

为了备份整个系统,您需要确定需要备份什么才能恢复文件系统,如果可能的话,还要恢复整个引导过程。例如,如果您有一个简单的单操作系统系统,那么 MBR 引导代码将只引导标记为“可引导”的分区。在这种情况下,如果您备份了 MBR 和包含操作系统的分区,则您有一个完整的备份。您可以通过恢复 MBR 和操作系统分区来完全恢复系统。(如果您将操作系统移动到不同的分区,您只需要更改标记为“可引导”的分区。)

如果您有一个多操作系统系统,其中 GRUB 安装在 MBR 中,那么备份和控制引导过程会更加复杂。您必须备份 MBR,它包含 GRUB 引导代码。您还必须备份 GRUB 的“根”分区,它包含 /boot/grub/(以及您的 Linux 操作系统)。此外,您还必须备份包含其他操作系统的其他分区。要控制此类系统的引导过程,您需要编辑 GRUB 的配置文件。更改 cfdisk 中的“可引导”标志不会产生任何影响。要更改 GRUB 的“根”分区,您必须运行 GRUB 并将其安装到 MBR

在大多数情况下,恢复 MBR 引导代码和操作系统分区将恢复系统的引导过程。但是,也有一些例外。Windows 安装程序有时会借用另一个兼容分区的 VBR 来引导包含 Windows 的分区,这会导致非常混乱的引导行为,并会导致引导过程中的故障。例如,Windows 坚持从硬盘 1 引导,而不是从扩展分区(逻辑驱动器)引导。如果您尝试将其安装到另一个驱动器上的分区或扩展分区,它可能会将引导加载程序写入驱动器 1 上的主分区之一的 VBR 以便引导。在备份和恢复 Windows 方面,这意味着有时恢复包含 Windows 的分区不足以将引导过程恢复到工作状态。在这种情况下,可能需要使用 Windows 安装光盘重新安装或修复 Windows。在其他情况下,可能需要重新配置 Windows 引导管理器(编辑 boot.ini 等)。有关 Windows 引导过程的更详细讨论,请参阅Windows NT/XP 启动过程Windows Vista 启动过程

另请注意,Partimage 程序是本指南中用于备份和恢复分区的一种方法,它不仅复制分区上的文件系统,还复制分区 VBR 的“引导扇区”内容,并且它维护内核和其他文件的位置。(Partimage 使用低级块/簇复制,而不是 linux 内核的文件系统支持。)有关更多信息,请参阅Partimage:如何读取/写入分区

另一方面,FSArchiver 方法只是重新创建文件系统,因此文件可能会被移动,并且 VBR 的内容可能不会被恢复。但是,在恢复 ntfs 分区时,FSArchiver 确实执行了ntfs-clone,该方法旨在维护 Windows 分区的引导功能。如果您使用 FSArchiver 恢复的分区包含 GRUB 的根(/boot/grub/),您将需要将 GRUB 重新安装到 MBR,以便它可以标记其文件的新位置。

如何设置引导分区

[edit | edit source]

本节仅适用于您拥有一个单操作系统系统,该系统具有引导“可引导”(也称为“活动”)分区的通用 MBR 引导代码,或者您将 GRUB 安装到分区的 VBR 而不是 MBR 中(这通常不会这样做)。如果您将 GRUB 安装到 MBR 中,更改“可引导”分区不会产生任何影响,因为 GRUB 会忽略它。

要更改“可引导”分区,请引导 SystemRescueCD 或任何 Linux 控制台并输入

cfdisk

使用上/下箭头键突出显示所需的引导分区。接下来,确保屏幕底部突出显示“[可引导]”。如果不是,请反复按 Tab 键,直到“[可引导]”被突出显示。按 Enter 键。“引导”应出现在上面列表中分区名称旁边。现在反复按 Tab 键,直到“[写入]”被突出显示,然后按 Enter 键。

分区表已修改,因此请务必备份 MBR。

如何设置 Grub 的根分区

[edit | edit source]

如果您将 GRUB 安装到 MBR 中,那么它将使用其“根”上的文件来确定哪些分区是可引导的以及如何引导(GRUB 菜单)。如果您将 GRUB 的根重新定位到不同的分区,或移动其文件磁盘位置(如 FSArchiver 在恢复时会做的那样),您需要告诉 GRUB 在哪里可以找到这些文件(称为阶段文件)。

如果 GRUB 尚未安装到 MBR,此方法还会安装 GRUB 的引导代码。

由于现在通用使用两种版本的 GRUB(v1 和 v2),它们的工作方式非常不同,因此您必须首先确定您使用的是哪个版本。从安装了 GRUB 的 linux 操作系统中,运行

grub-install -v

如果版本报告为类似于“(GNU GRUB 1.97~beta4)”,则表示您正在运行 GRUB v2。如果报告为“(GNU GRUB 0.97)”,则表示您正在使用 GRUB v1。

使用适合您的 GRUB 版本的方法。

GRUB v1

[edit | edit source]

这描述了如何设置 GRUB v1 的根分区并将它的引导代码安装到 MBR。

从 Linux 控制台(SystemRescueCd 或已安装的系统)中,输入

# To set GRUB's root partition and reinstall GRUB in the MBR:
# start GRUB
sudo grub
# Show partitions containing GRUB's stage 1
grub> find /boot/grub/stage1
# Select a partition from the list and set it as root  (sda2 in this example)
grub> root (hd0,1)
# Install GRUB into the MBR
grub> setup (hd0)
# exit GRUB
grub> quit

请注意,GRUB v1 从 0 开始对硬盘和分区进行编号,而不是从 1 开始。因此,(hd0,4)等效于 /dev/sda5。

请注意,根分区必须包含 GRUB 的阶段文件(通常位于 /boot/grub/)。如果没有,您需要安装 GRUB 程序(这超出了本指南的范围)。大多数 Linux 发行版在安装过程中都会安装 GRUB。

MBR 已修改,因此请务必备份 MBR。

GRUB v2

[edit | edit source]

本节简要描述了如何设置 GRUB v2 的根分区、将它的引导代码安装到 MBR,以及重新安装 GRUB2 阶段文件(/boot/grub/)。

首先,从 SystemRescueCD 或已安装的 linux 系统中,确定并挂载包含 GRUB 文件(/boot/grub/)的分区。从已安装的系统中,它应该已经被挂载到“/”或您的引导分区。如果使用 SystemRescueCD,请手动挂载分区。例如,如果您的 GRUB 根位于 sda1 上,那么从 SystemRescueCD

mkdir /mnt/grubroot
mount /dev/sda1 /mnt/grubroot

挂载了 GRUB 的根之后,请重新安装 GRUB。使用 SystemRescueCD

grub2-install --root-directory=/mnt/grubroot /dev/sda

或者,如果您使用已安装的 linux 系统

sudo grub-install --root-directory=/ /dev/sda

如果您使用已安装的 linux 系统,您可能还想更新 GRUB 菜单

sudo update-grub

注意:GRUB 将在其文件安装到您指定的根目录下的引导文件夹(例如 /mnt/grubroot/boot/grub/ 或 /boot/grub/)。请务必在 grub-install 命令中不要包含分区号,只包含“/dev/sda”。

注意:SystemRescueCD 包含 GRUB v1 和 v2。 “grub-install” 运行 GRUB v1,而“grub2-install”运行 v2。在只安装了一个版本的 GRUB 的 linux 系统上,“grub-install” 是要使用的命令。使用“grub-install -v”查看版本(0.9x 是 v1,1.9x 及更高版本是 v2)。

有关使用 GRUB v2 的更详细的信息,请参阅GNU GRUBUbuntu GRUB2 指南 或 GRUB2 可用的许多其他指南。

MBR 已修改,因此请务必备份 MBR。

使用 UUID

[edit | edit source]

某些 Linux 系统,例如 Ubuntu,使用 UUID 在 GRUB 的配置文件和 /etc/fstab 中标识分区。UUID 是一个随机生成的识别号码(例如 ddec031f-558c-378f-b26f-158f5742c397),它在格式化分区时存储在该分区的文件系统中。这意味着重新格式化分区将更改该分区的 UUID。这也意味着从备份中恢复分区将恢复备份文件系统的 UUID。

如果分区的 UUID 发生更改,而 GRUB 和 fstab 没有更新,则系统将无法引导,它会引导错误的分区,或者它可能会抱怨文件系统缺失。

您需要避免的一个特别麻烦的情况是两个分区具有相同的 UUID。这通常是由于从另一个分区上创建的备份中还原分区造成的。如果两个分区具有相同的 UUID,并且 GRUB 或 fstab 使用 UUID 启动,则会导致非常混乱的启动行为。确保在使用包含重复 UUID 的备份还原分区时生成新的 UUID。

在某些情况下,更改 GRUB 和 fstab 中的 UUID 引用为设备名称可能更容易。

例如,GRUB v1 的 /boot/grub/menu.lst 中的这一行

kernel  /boot/vmlinuz-2.6.20-16-generic  root=UUID=ff0531cb-a7c6-4973-a106-02f62f432fff ro splash

可能会变成

kernel  /boot/vmlinuz-2.6.20-16-generic root=/dev/sda2 ro splash

而 /etc/fstab 中的这一行

UUID=d08bed28-71d2-45e8-9a20-07e593a7c828  / reiserfs  defaults  0 1

可能会变成

/dev/sda2  /  reiserfs  defaults  0 1

如果您确实希望继续使用 UUID,您可能需要了解如何查找 UUID 以及如何更改 UUID。以下示例适用于 Ubuntu - 您的发行版可能略有不同。

# To look up the current UUID of /dev/sda2:
sudo blkid
# OR
sudo vol_id -u /dev/sda2

# To install a new random UUID in an ext2/ext3 filesystem:
# Note: device sda2 should not be mounted
sudo tune2fs -U random /dev/sda2

# To install a new random UUID in a reiser filesystem:
# Note: device sda2 should not be mounted
sudo reiserfstune --uuid random /dev/sda2

# Note: On some systems the reiserfstune command is tunefs.reiserfs

# To generate a random UUID for general purposes:
uuidgen -r

系统分区建议

[edit | edit source]

通过合理地对系统进行分区并仔细设置,您可以使维护变得更加容易。这不是关于如何设置多启动系统的指南,但其中包含一些关于分区使用的讨论,将在下一节关于恢复方案中进行引用。如果您没有从干净的硬盘驱动器开始,则可能能够更改现有分区的大小并创建新分区,而不会丢失驱动器上的数据。一种这样的方法是 Gparted 程序,它在许多 Live CD 上发布,包括 SystemRescueCD(您必须启动 startx 才能看到 Gparted 图标)。出于讨论的目的,我将假设您正在从头开始设置一个全新的多操作系统系统。如果是这种情况,您可以在 SystemRescueCD 上运行 cfdisk 程序来破坏性地(重新)对驱动器进行分区。驱动器上的所有数据都将丢失。

建议的分区表

device  size    mount       use
------  ----    -----       ---
MBR     512b                GRUB boot code installed
sda1    2G      swap        Linux swap
sda2    7G      /           Linux system  [GRUB root partition]
sda3    20G     /mnt/win    Windows OS (ntfs or fat32) [VBR contains Windows boot code]
sda4    -                   Extended Partition (contains extended partition table)
sda5    20G     /mnt/sda5   test system
sda6    20G     /mnt/sda6   backup partition  [bootable SystemRescueCD]
sda7    xxG     /user       user data (reiser, ext3/4, ntfs, or vfat)

如果您要安装 Windows,最好对驱动器进行分区(使用 SystemRescueCD 上的 cfdisk 或其他方法),然后将 Windows 安装到其正确的分区中。Windows 安装完成后,再安装 Linux 操作系统。大多数 Linux 操作系统会将 GRUB 安装到 MBR,因此您的系统将成为多启动系统。

注意:Windows 首先安装的原因是它会覆盖 MBR,使其成为系统中唯一可启动的操作系统。如果您在 Linux 之后安装它,这将从 MBR 的启动代码中删除 GRUB,并且您将无法启动 Linux,除非恢复 MBR 启动代码或将 GRUB 重新安装到 MBR。

如果您的计算机上有多个 Linux 系统,它们可以共享单个交换分区。交换分区中的数据仅在操作系统运行(或休眠)时有效。通常,您只需要一个交换分区。

上面分区的大小是近似的,会根据您安装它们的 OS 以及您安装的软件数量而有所不同。通常,Windows XP 在没有软件的情况下使用大约 5 GB,Vista 使用 12 GB。典型的 Linux 安装以及软件可能使用 2-5 GB。

上述示例中的 sda5 是一个额外的系统分区,您可以在其中测试新版本的 OS 或新的 OS,而不会影响您的主要 OS。如果您喜欢新系统,那么您就可以将其设置为您的主要操作系统(请参阅恢复方案 #4)。

sda6 是 Partimage 创建的备份分区映像的存储区域。将它们保存在自己的未挂载分区上更安全。您还可以轻松地将此分区设置为可启动的 SystemRescueCD,这样您就不需要插入 SystemRescueCD 来执行维护。请参阅如何在硬盘驱动器上安装 SystemRescueCD

sda7 使用驱动器上剩余的空间,并包含大部分用户数据,例如文档、电影、音乐和其他大型数据。由于数据量很大,因此难以备份,因此最好将其放在单独的分区上。此分区也可以用于存储 Partimage 备份文件。如果您希望从 Windows 和 Linux 中都能访问此分区,最简单的方法是将其格式化为 FAT32 或 NTFS(尽管也有一些驱动程序可以让 Windows 访问 Linux 文件系统)。

请注意,/home 文件夹已保留在 /(Linux 根)分区上。这允许您为不同的操作系统安装维护不同的 /home 文件夹。通常,让两个操作系统共享单个 /home 文件夹会产生问题。为 /home 创建一个单独的分区也是可以接受的。在这种情况下,/home 分区或文件与系统分区分开备份和恢复。

因为我们已经将 GRUB 安装到 MBR,所以哪个分区标记为“可启动”并不重要。GRUB 在 sda2 上的 /boot/grub/ 文件将决定默认的启动 OS 和选项。


恢复方案

[edit | edit source]

通过示例,本节将探讨各种恢复方案。假设您拥有启动驱动器 MBR 的最新备份,以及系统中每个包含操作系统的分区的最新备份映像文件。您可能还有一个单独的、更新的 /home 文件夹备份(用于 Linux 系统),以及使用 sfdisk 创建的整个分区表的备份。

本节中描述的所有活动的说明,例如恢复 MBR 启动代码,都在本指南的前几节中详细介绍。

方案 #1:系统修改失败

[edit | edit source]

这是恢复的常见用途。也许您尝试了操作系统升级,但结果并不理想。也许您安装了一个导致问题的驱动程序,并且您不知道如何干净地将其删除。也许您只是想将系统回滚到运行得更好的“全新安装”状态。或者,也许您想彻底清理并重新配置系统以提高安全性。

在这种情况下,只需要使用备份文件恢复包含操作系统的分区。不需要恢复 MBR。

唯一需要考虑的另一个细节是是否从更近的备份(如果可用)恢复您的 /home 文件夹。如果您认为系统问题可能与 /home 文件夹中的用户设置有关,您可能希望使用较旧版本的 /home 文件夹。如果您想恢复用户的设置,那么请在系统分区恢复之后额外恢复您的 /home 文件夹。

方案 #2:在多启动系统上修复或重新安装 Windows

[edit | edit source]

Windows 安装和修复程序可能会覆盖 MBR,这意味着系统将不再使用 GRUB 启动 - 它将仅启动到 Windows。这是一个快速修复。恢复 MBR 的启动代码部分。或者,您可以将 GRUB 重新安装到 MBR

方案 #3:在您的测试分区上安装新版本的 Windows

[edit | edit source]

分区建议示例中,sda5 是一个保留用于测试新版本的 OS 的分区。您可能希望将新版本的 Windows 安装到此分区,同时将旧版本保留在另一个分区上。

Windows 安装程序将覆盖 MBR。最好的情况下,它会看到多个版本的 Windows,并且会允许您启动到它们,但不能启动到 Linux。或者,您可能只能启动到新安装的 Windows 中。

纠正此问题的第一个步骤是恢复 MBR 启动代码,这将使 GRUB 重新回到 MBR。或者,您可以将 GRUB 重新安装到 MBR

系统现在将启动到 GRUB 启动管理器,但它不会意识到新的 Windows 系统。如果使用 GRUB v1,您需要在 GRUB 根分区(通常是您的 Linux 系统分区)上编辑 /boot/grub/menu.lst,并在适当的位置添加 Windows 分区的条目。这通常看起来像这样

# /dev/sda5
title		Microsoft Windows
root		(hd0,4)
savedefault
makeactive
chainloader	+1

请注意,GRUB v1 从 0 开始对硬盘和分区进行编号,而不是从 1 开始。因此,(hd0,4)等效于 /dev/sda5。

如果您使用的是 GRUB v2,只需使用在已安装的 Linux 系统上执行的以下命令更新菜单,它会自动查找并添加您的 Windows 操作系统

sudo update-grub

您可以检查 /boot/grub/grub.cfg 以查看是否添加了操作系统。请注意,GRUB v2 从 0 开始对硬盘驱动器进行编号,从 1 开始对分区进行编号。因此 (hd0,5) 等效于 /dev/sda5。

根据您安装的 Windows 版本,行为可能会有所不同。在某些情况下,每个 Windows 分区都可以通过单独的 GRUB 菜单条目独立启动。在其他情况下,一个 Windows 分区将启动到 Windows 启动管理器,它会显示另一个启动菜单,这次只显示您安装的不同版本的 Windows。请注意,您安装了新版本的 Windows 的分区甚至可能不可启动 - 它可能使用另一个分区作为其启动分区。有关更多信息,请参阅上述备份和恢复启动过程

请注意,当分区在重新安装期间格式化时,其 UUID 可能会发生变化。这可能会导致您的 Linux 系统在启动时查找 Windows 分区的旧 UUID 时出现错误。如果是这样,您需要编辑您的 /etc/fstab 文件以反映新的 UUID,或更改为 /dev/xxx 引用。有关说明,请参阅使用 UUID

方案 #4:在您的测试分区上安装新版本的 Linux

[编辑 | 编辑源代码]

如果您想测试新版本的 Linux 而不影响您当前的工作系统,您可以将其安装到测试分区(在 分区示例 中为 sda5)。它可以使用与您的原始 Linux 系统相同的交换分区。

好消息是,大多数 Linux 安装都会重新安装 GRUB,并且会识别系统上的其他操作系统。重新启动后,您应该可以选择启动到所有操作系统。

但是,有一点需要注意 - GRUB 的重新安装可能将 GRUB 的根分区更改为新系统 (sda5)。这意味着新系统分区上的 GRUB 配置文件(在 /boot/grub/ 中)现在正在控制启动选项。这可能可以使用。但是,您应该知道,如果您删除测试分区,GRUB 将无法找到其 /boot/grub/ 文件,您将无法启动。

如果您希望让您的原始 Linux 分区继续控制 GRUB,您可以从备份中恢复 MBR 引导代码,或者可以 更改 GRUB 的根分区。如果使用 GRUB v1,则在您的菜单.lst 文件(在原始 Linux 系统 - 本例中为 sda2)中添加一个条目来启动新的 Linux 系统。类似以下内容:

# Linux installation on /dev/sda5
title		Ubuntu (sda5)
root		(hd0,4)
kernel		/vmlinuz root=/dev/sda5 ro
initrd		/initrd.img
savedefault
boot

请注意,GRUB v1 从 0 开始对硬盘和分区进行编号,而不是从 1 开始。因此,(hd0,4)等效于 /dev/sda5。

如果您使用的是 GRUB v2,只需使用在已安装的 Linux 系统上发出的此命令来更新菜单,该命令应自动查找并添加已安装的操作系统

sudo update-grub

另请注意,在安装过程中格式化分区时,其 UUID 可能会发生变化。这可能会导致您的旧 Linux 系统在启动时查找测试分区的旧 UUID 时出现错误。如果是这样,您需要编辑您的 /etc/fstab 文件(在旧系统上)以反映新的 UUID 或更改为 /dev/xxx 引用。请参阅 使用 UUID 获取说明。

方案 #5:交替版本的 Linux

[编辑 | 编辑源代码]

Linux 的重大升级每隔几个月就会发布一次。使用这些升级的一种方法是将它们安装到交替分区。例如,您可以将 Linux 版本 6 安装到 sda2。然后将版本 7 安装到 sda5,保留 sda2 上的版本 6 不变。然后,您可以在 sda2 上安装版本 8,保留 sda5 上的版本 7 不变,等等。这样,您就可以试用新系统的安装或升级,同时仍然可以访问“老可靠”。如前所述,两种安装都可以共享一个公共交换分区。

如果您希望避免升级,并在发布新版本时只进行全新安装,这非常容易。您只需将新版本安装到空闲分区即可。这也会安装 GRUB,并将新 Linux 分区设为 GRUB 根分区。您的计算机将默认启动到新安装,但这可以通过编辑 GRUB 配置(在新分区上)轻松修改。您可以在空闲时间设置新安装,同时仍然可以访问您的旧系统。(如果您运行的是服务器,您可能希望在使用新安装时为其分配不同的 IP 地址,以将其与旧系统区分开来。)

如果您希望使用升级,则需要执行一些额外的步骤。首先,将您的旧系统分区复制到新分区。这就像制作分区的备份文件并将其还原到新分区一样简单。(如果适用,请确保 为复制分区生成新的 UUID。)接下来,通过在 GRUB 菜单(在旧分区上)中添加一个条目来使新分区可启动。最后,更新新分区上的 /etc/fstab,以便系统知道在哪里找到其根文件系统和其他可挂载的分区。您现在可以启动到两个 Linux 系统的镜像副本。

接下来,启动到复制系统并执行升级,根据需要进行测试。如果它可以正常工作,您可以通过编辑 GRUB 配置(在旧分区上)将其设为默认启动分区,使其成为您的主要系统。旧分区可以保留为备份。

在这些交替安装期间如何处理 /home 文件夹取决于您的偏好。我的建议是将 /home 文件夹复制到新分区,从而创建两个并行的 /home 文件夹。或者,您可以让两种安装共享一个公共 /home 文件夹,但这可能会导致问题。

安装好两个并行系统后,您可以从每个系统内部挂载它们的文件系统,将相关文件从一个系统复制到另一个系统。您还可以比较两个版本的系统文件,等等。为了最大限度地保护您的旧安装,在新的系统中只将它的文件系统以只读方式挂载。

交替安装 Linux 的好处是,您始终会在您的计算机上安装一个可靠的备份系统。

方案 #6:病毒感染

[编辑 | 编辑源代码]

病毒可能会感染系统文件、/home 文件夹(Linux)和 MBR。除非您知道病毒的位置,否则建议您使用您知道在感染之前创建的备份来恢复系统分区、MBR 引导代码,以及可选地恢复 /home 文件夹。病毒从一个操作系统分区跳到另一个操作系统分区的情况并不常见,但并非不可能。如果有疑问,请全部恢复。

您还应该扫描用户数据分区以查找病毒。

方案 #7:新硬盘驱动器

[编辑 | 编辑源代码]

首先要解决的是分区。您应该使用 cfdisk(在 SystemRescueCD 上可用)之类的工具从头开始创建分区表。或者,如果新驱动器的大小与旧驱动器相同,则可以使用 sfdisk 从备份中重新创建分区表。如果使用 Partimage 方法进行备份,请确保您的系统分区至少与旧分区一样大,否则您将无法恢复它们(FSArchiver 没有此限制,但分区仍然需要足够大才能容纳备份中的所有数据)。此外,为已安装的系统使用相同的分区号最为方便,这样 GRUB 就可以找到它们。否则,您可能需要更新 GRUB 配置,更改 fstab 文件,以及编辑 Windows 引导管理器文件以反映新的分区号。

现在恢复系统分区,如果需要,还可以恢复 /home 文件夹。如果 /home 位于单独的分区上,您也必须恢复它。如果您的旧硬盘驱动器已损坏,那么您将需要您保存到 DVD 或其他驱动器上的备份(您确实将备份存档到了另一个驱动器,对吧?)。

恢复分区后,恢复 MBR 引导代码(仅限引导代码!不是包含旧分区表的完整 MBR)。或者,您可以 将 GRUB 安装到 MBR。(注意:如果您使用 FSArchiver 恢复包含 GRUB 根(/boot/grub/)的分区,您必须 将 GRUB 安装到 MBR,因为磁盘上的文件已移动。)

如果您更改了已安装系统的分区号,您可能需要更新 GRUB 配置,更改 fstab 文件,以及编辑 Windows 引导管理器文件以反映新的分区号。如果您更改了 Windows 的分区号,请务必参考 备份和恢复引导过程,其中详细介绍了其他 Windows 引导问题。

方案 #8:将系统移至另一个分区

[编辑 | 编辑源代码]

您可能希望将已安装的操作系统移至另一个分区、更大的分区或移动到不同驱动器上的分区。(注意:将 Windows 移至第二个驱动器或扩展分区可能会导致启动问题 - 将 Windows 保留在第一个硬盘驱动器的主要分区上。)

第一步是准备新分区,并确保它至少与旧分区一样大。(如果它更小,您将无法使用 Partimage 进行恢复。)然后,使用备份文件将数据恢复到新分区。

接下来,您需要解决引导过程。

如果新分区位于同一驱动器的主要分区上,并且您有一个通用的 MBR 来引导可启动分区,那么 更改标记为“可启动”的分区

如果您在 MBR 中有 GRUB,并且您移动了 GRUB 的根(/boot/grub/),您将需要 更改 GRUB 的根分区

如果新分区位于不同的驱动器上并包含 GRUB 的根目录,您可能需要通过从旧驱动器恢复 MBR 的引导代码或更改 GRUB 的根分区来使新驱动器可引导。您可能还需要更改 BIOS 引导设备优先级或驱动器编号,否则 BIOS 将继续引导旧驱动器的 MBR。简而言之,完成操作后,引导驱动器的 MBR 必须包含引导代码(GRUB 等),并且 GRUB 必须设置为正确的根分区才能找到其 /boot/grub/ 文件。

如果使用 GRUB,您还需要更新 GRUB 的配置以反映移动的操作系统的新的位置(对于 GRUB v1,编辑 /boot/grub/menu.lst 文件中的条目;对于 GRUB v2,运行 update-grub)。要编辑文件,您可以在 SystemRescueCD 上使用 nano 编辑器(在您挂载了文件的所在位置之后)。

由于您的新分区可能具有不同的 UUID 或设备名称,或者两个分区现在具有相同的 UUID,您可能需要更改 /etc/fstab 条目以反映新位置,以便您的 Linux 操作系统能够启动。如果需要,您可以将过时的 UUID 更改为 /dev/xxx。最重要的是,fstab 告诉 Linux 它的根文件系统(/)位于哪里。有关说明,请参阅使用 UUID

如果您更改了 Windows 的分区号,您可能需要编辑 Windows 引导管理器文件以反映新的分区号。此外,请务必查阅备份和恢复引导过程,其中详细介绍了其他 Windows 引导问题。


如何刻录包含备份文件和工具的可引导 DVD

[edit | edit source]

可以非常简单地刻录一个包含可引导 SystemRescueCD 系统以及一个或多个分区备份文件的 DVD。您可以在任何包含 growisofs 程序(很常见)的 Linux 安装中执行此操作,包括 SystemRescueCD。

假设 SystemRescueCD iso 文件位于 /user/ 中,您的备份文件位于 /user/backups/ 文件夹中。

# Where /dev/hdc is your DVD-burner - change if necessary
growisofs -Z /dev/hdc=/user/systemrescuecd-x86-1.3.5.iso
growisofs -M /dev/hdc -J -R /user/backups/

显然,DVD 上必须有足够的空间来容纳 iso 内容以及 /user/backups/ 中的备份文件,才能成功执行此操作。

如何在硬盘上安装 SystemRescueCD

[edit | edit source]

将硬盘分区设为可引导的 SystemRescueCD 系统也非常简单。这样就不需要将 CD 放入驱动器中才能执行系统维护。在分区示例中,备份分区将是理想的候选者。

唯一的条件是分区有 200MB 的可用空间,并且它使用 SystemRescueCD 支持的标准文件系统之一。您甚至可以使用具有另一个可引导系统的分区。(分区可以通过两种不同的方式启动,具体取决于选择的 GRUB 菜单条目。)

过程如下

# Mount the iso file
sudo mkdir /mnt/iso
sudo mount -o loop /user/systemrescuecd-x86-1.3.5.iso /mnt/iso

(或者,您也可以简单地将 SystemRescueCD 插入 CDROM 驱动器,以便可以直接从其中读取文件。)

接下来,在目标分区(在本例中为 /dev/sda6)上创建一个文件夹,并将相关文件复制到此文件夹 (/sysrcd) 中。请注意,一些文件位于 isolinux 子文件夹中,但它们应该全部复制到 /sysrcd 中,不带目录结构。

sudo mkdir /mnt/sda6
sudo mount /dev/sda6 /mnt/sda6
sudo mkdir /mnt/sda6/sysrcd
sudo cp /mnt/iso/sysrcd.dat /mnt/iso/sysrcd.md5 /mnt/iso/isolinux/initram.igz \
/mnt/iso/isolinux/rescuecd /mnt/iso/isolinux/rescue64 \
/mnt/iso/isolinux/altker32 /mnt/iso/isolinux/altker64 \
/mnt/sda6/sysrcd
umount /mnt/iso

硬盘分区 /dev/sda6 现在是可引导的。我们只需要在 GRUB 的菜单中添加一个条目。

如果使用 GRUB v1,编辑 /boot/grub/menu.lst,使其显示为一个引导选项...

title       SystemRescueCD-1.3.5 (sda6)
root        (hd0,5)
kernel      /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd      /sysrcd/initram.igz
savedefault
boot

如果使用 GRUB v2,创建一个名为“/etc/grub.d/51_my-sysrcd”的文件(或您的 grub.d 文件夹所在的任何位置),并将以下文本粘贴到文件中,根据需要修改“set root”行

#!/bin/sh

echo "Adding SystemRescueCD" >&2
cat << EOF
menuentry "SystemRescueCD-1.3.5 (sda6)" {
set root=(hd0,6)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}
EOF

保存该文件,然后运行

sudo chmod +x /etc/grub.d/51_my-sysrcd
sudo update-grub

有关上述过程的最新说明,以及将 SystemRescueCD 安装到可引导 USB 记忆棒的说明,请参阅

使用 SystemRescueCD 的替代方案

[edit | edit source]

在某些情况下,可能更方便不使用 SystemRescueCD,尽管我建议您随时备好 CD 拷贝。

例如,如果您在计算机上安装了两个 Linux 系统,您可以安装 Partimage 或 FSArchiver 程序,并从已安装的系统中使用它们来备份其他未挂载的分区。这样您就不需要重启才能进行一些备份。一个限制是您不能使用 Partimage 来备份已挂载的分区,因此您不能使用已启动的系统来备份已启动的系统。

此外,其他 Live Linux CD 通常也包含 Partimage 程序。如果它们能够在您的硬件上成功运行,您可以将它们用作 SystemRescueCD 的替代品。SystemRescueCD 的优势在于它启动速度非常快。其他一些 Live CD 则不太可靠或使用起来不太快。

其他免费工具包括

  • Clonezilla:基于 DRBL、Partition Image、ntfsclone 和 udpcast,它允许您创建备份并恢复

进一步阅读

[edit | edit source]
华夏公益教科书