跳至內容

如何備份作業系統

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,它允許您建立備份和恢復

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書