跳至内容

如何备份操作系统

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

本指南详细介绍了如何备份和恢复您 PC 上安装的操作系统(Linux、Windows 等)。具体来说,它描述了如何使用免费工具备份和恢复硬盘分区和 MBR 启动代码,并讨论了备份和恢复过程以及场景。备份和恢复大约需要 10 分钟。

常见问题解答

[编辑 | 编辑源代码]

为什么要备份操作系统?

[编辑 | 编辑源代码]

用途和优势包括

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

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


哪些操作系统可以备份?

[编辑 | 编辑源代码]

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

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

第二个问题是需要备份的硬盘分区上的数据量。虽然对涉及的分区的 size 没有普遍限制,但最实际的方法是备份将操作系统和用户数据存储在单独的分区中的系统。这将使备份的大小保持在可接受范围内。这意味着,如果您的硬盘有一个包含操作系统的单个巨大分区以及用户数据(电影、音乐文件、文档等),则由于备份的大小以及在某些情况下缺乏存储备份的空间(无法存储在正在备份的分区上),备份此系统将很困难。在这种情况下,请考虑重新分区硬盘,以便将您的操作系统以及已安装的软件存储在独立于用户数据文件自己的分区上。(重新分区硬盘超出了本指南的范围,此处未作介绍。)

谁可以使用本指南?

[编辑 | 编辑源代码]

本指南主要面向维护多操作系统系统的 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 的测试版。 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。(分区上的数据被 gzip 压缩;忽略空闲空间。)

可以用来保存备份文件的目标文件系统的示例

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

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

准备目标

[编辑 | 编辑源代码]

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

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

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

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 键继续。

分区的原始内容将被 gzip 压缩并保存到备份“映像”文件 - 在大多数系统上需要 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 命令可以在系统运行时从根控制台中执行。

分区表备份

[编辑 | 编辑源代码]

虽然 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 进行自定义。大多数系统上也有一些图形备份程序可以自动备份您的 /home 文件夹。

从备份中还原

[编辑 | 编辑源代码]

还原要求

[编辑 | 编辑源代码]

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

要还原,您需要一个由 Partimage 或 FSArchiver 创建的备份文件,还需要一个目标分区。目标分区可以位于任何驱动器上,并且不需要是备份创建的相同分区。您可以将备份文件还原到任何驱动器上的任何分区,前提是

  • 如果备份文件包含操作系统,请确保备份文件是在同一台计算机上创建的。通常,尝试将一台计算机上创建的备份文件用于另一台计算机是一个糟糕的想法,除非硬件几乎完全相同。(每台计算机通常都有不同的主板、显卡、内存和其他细节。运行安装在不同机器硬件上的操作系统通常不会顺利进行!)为每台计算机的操作系统创建单独的备份文件,不要混合使用它们。
  • 目标分区不需要具有有效的文件系统。它可以是未格式化的,或者可以包含任何文件系统或数据。任何现有内容都将被覆盖。如果您要还原到全新驱动器,您只需创建分区(使用 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 创建了备份文件,则必须使用此方法来恢复它。将备份文件(s)的位置挂载后,运行 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,或者你安装了覆盖 MBR 而没有安装多操作系统引导管理器的 Windows),或者主分区表损坏时,才需要恢复 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 引导代码通常仅由以下方式修改:

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

MBR 主分区表

[编辑 | 编辑源代码]

除了引导代码之外,MBR 还包含驱动器的主分区表。此信息包括分区的尺寸、数量和操作系统类型,以及哪个分区被标记为“可引导”(称为驱动器的“引导”或“活动”分区)。(扩展分区表,它定义驱动器的所有逻辑分区,位于扩展分区上,而不是在 MBR 中。)MBR 的主分区表由以下方式修改:

  • 操作系统的安装程序(例如 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 的引导代码区域不是很大,所以它不能做太多事情。它主要做的事情是将控制权传递给另一个程序。以下是几种可能的引导配置:

通用引导代码

[编辑 | 编辑源代码]

在简单的单操作系统系统(如 DOS 或旧版 Windows)上,MBR 引导代码将检查 MBR 的分区表部分以查看哪个分区被标记为“可引导”(也称为“活动”)。然后它将控制权传递给此引导分区的卷引导记录 (VBR)。(VBR 存储在分区的前几个扇区中,而 MBR 存储在驱动器的第一个扇区中)。在这种情况下,VBR 包含一个引导加载程序 - 安装的操作系统用来启动并运行自己的程序。使用这种通用 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 加载程序也称为“NTLDR”(Windows NT 和 XP),或 Windows 引导管理器(Windows Vista)。安装 Windows 时,MBR 的引导代码将被覆盖。在引导时,此代码会将控制权传递给引导分区的 VBR,而 VBR 又会将控制权传递给 NT 加载程序或 Windows 引导管理器,后者将控制引导过程的其余部分。有时,引导管理器会显示一个菜单,询问用户要引导哪个已安装的 Windows 版本。请注意,这种情况至少有四个地方存储着重要的引导信息:在 MBR 引导代码中,在 MBR 分区表的引导标志中,在引导分区的 VBR 中,以及在包含 NT 加载程序或 Windows 引导管理器的分区的文件系统中。如果这些区域中的任何一个损坏或更改,都可能会影响引导过程。

Linux & Windows

[编辑 | 编辑源代码]

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

GRUB 在 VBR 中以及更多

[编辑 | 编辑源代码]

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

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

备份和还原引导过程

[编辑 | 编辑源代码]

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

如果您有一个多操作系统系统,并且在 MBR 中安装了 GRUB,那么备份和控制引导过程会更加复杂。您必须备份 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,以便它可以标记其文件的新的位置。

如何设置引导分区

[编辑 | 编辑源代码]

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

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

cfdisk

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

分区表已修改,因此请确保创建 MBR 的新备份。

如何设置 Grub 的根分区

[编辑 | 编辑源代码]

如果您在 MBR 中安装了 GRUB,那么它将使用其“根”上的文件来确定哪些分区是可引导的以及如何引导(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 的根分区并将它的引导代码安装到 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 的根分区,将它的引导代码安装到 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

[编辑 | 编辑源代码]

某些 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

系统分区建议

[编辑 | 编辑源代码]

通过对系统进行良好分区并仔细设置它,您将使维护变得更加容易。这不是关于如何设置多启动系统的指南,但对分区使用的一些讨论适用,并将参考以下关于恢复方案的部分。如果您没有从干净的硬盘驱动器开始,您可能能够更改现有分区的尺寸并创建新的分区,而不会丢失驱动器上的数据。其中一种方法是 Gparted 程序,它在许多 Live CD 上都有分发,包括 SystemRescueCD(您必须启动 x 才能看到 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。如果您喜欢新的系统,您可以将其设置为您的主要 OS(参见 恢复场景 #4)。

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

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

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

由于我们在 MBR 中安装了 GRUB,因此哪个分区被标记为“可启动”并不重要。sda2 上的 GRUB 的 /boot/grub/ 文件将决定默认的启动 OS 和选项。


恢复场景

[编辑 | 编辑源代码]

以示例说明,本节将探讨各种恢复场景。假设您已经对启动驱动器的 MBR 进行了最新的备份,并且对系统上每个包含 OS 的分区都拥有一个最新的备份镜像文件。您还可能拥有一个单独的、更新的 /home 文件夹备份(用于 Linux 系统),以及使用 sfdisk 创建的整个分区表的备份。

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

场景 #1:系统修改失败

[编辑 | 编辑源代码]

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

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

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

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

[编辑 | 编辑源代码]

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

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

[编辑 | 编辑源代码]

示例分区建议 中,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 OS

sudo update-grub

您可以检查 /boot/grub/grub.cfg 以查看是否添加了 OS。请注意,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,并会识别系统上的其他 OS。当您重新启动时,您应该可以选择启动到所有 OS。

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

如果您希望您的原始 Linux 分区仍然控制 GRUB,您可以从备份中恢复 MBR 启动代码,或者您可以 更改 GRUB 的根分区。如果使用 GRUB v1,请在您的 menu.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 系统上执行的以下命令更新菜单,它应该会自动查找并添加您安装的 OS

sudo update-grub

还要注意,当分区在安装期间被格式化时,其 UUID 可能会更改。这可能会导致您的旧 Linux 系统在启动时查找测试分区的旧 UUID 时报错。如果是这种情况,您需要编辑 /etc/fstab 文件(在旧系统上)以反映新的 UUID 或更改为 /dev/xxx 引用。有关说明,请参阅 使用 UUID

场景 #5:交替版本的 Linux

[编辑 | 编辑源代码]

Linux 的主要升级每隔几个月发布一次。使用这些升级的一种方法是将它们安装到交替的分区中。例如,您可能将 Linux 版本 6 安装到 sda2。然后将版本 7 安装到 sda5,将版本 6 保留在 sda2 上。然后,您可以在 sda2 上安装版本 8,将版本 7 保留在 sda5 上,依此类推。这使您可以试用新系统安装或升级,同时仍然可以访问“可靠的老系统”。如前所述,这两个安装可以共享一个通用的交换分区。

如果你想避免升级,并在新版本发布时直接进行全新安装,这非常容易。你只需将新版本安装到空闲分区。这也会安装 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

[编辑 | 编辑源代码]

你可以轻松地刻录一张 DVD,其中包含可启动的 SystemRescueCD 系统,以及一个或多个分区备份文件。你可以在任何包含 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

[编辑 | 编辑源代码]

将硬盘分区设置为可启动的 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 的替代方法

[编辑 | 编辑源代码]

在某些情况下,可能更方便不使用SystemRescueCD,尽管我建议保留一个CD副本。

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

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

其他免费工具包括

  • Clonezilla:基于DRBL,分区映像,ntfsclone和udpcast,它允许您创建备份和恢复

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书