如何備份作業系統
這是一個逐步指南,用於備份和恢復安裝在您的 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 的副本。該 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 方法最適合 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 方法適用於大多數檔案系統(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 備份檔案的實用程式,建議使用 mbrback。
MBR 備份是一個非常小的檔案(512 位元組)。在本例中,我們假設 /dev/sda 是系統中的第一個硬碟(啟動驅動器)。根據您的實際情況替換正確的啟動驅動器。
# Back up entire MBR: dd if=/dev/sda of=/mnt/target/sda-MBR-backup bs=512 count=1
請注意,您在裝置名稱後面不包含分割槽號,只寫 “sda”。
注意: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),只需將它們放在一起 - 恢復時需要所有這些檔案。
在 Linux 系統上,/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 資料夾,以便每天建立備份。為此,請在控制檯中輸入(或複製/貼上)以下命令:(將您的所需備份位置替換為“/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 建立了備份檔案,你必須使用此方法恢復它。
警告:此分割槽上當前儲存的所有資料將被覆蓋! |
以示例為例,要從備份檔案 /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
首先,使用上箭頭和下箭頭鍵,突出顯示目標分割槽(使用你的備份檔案恢復的分割槽)。
警告:此分割槽上當前儲存的所有資料將被覆蓋! |
按 Tab 鍵將游標移動到 "要建立/使用的映像檔案" 欄位。輸入你的備份檔案位置和名稱。在本示例中
/mnt/back/backup-sda5.000
(如果你有多個備份檔案,只需輸入第一個檔案的名稱,包括副檔名 .000)
重要:按兩次 Tab 鍵向下移動到 "從映像檔案恢復分割槽" 並按空格鍵選擇它。 |
然後按 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,或者你安裝了 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 資料夾被複制或壓縮,請啟動你的作業系統或 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 登入到桌面。
瞭解計算機啟動的基本原理非常重要,這樣您就知道在維護系統時需要備份什麼以及需要恢復什麼。
當您開啟計算機時,BIOS 程式設計(儲存在主機板上的記憶體晶片中)開始執行。除了其他功能外,此 BIOS 程式還會確定哪個驅動器或裝置將首先啟動。可以透過在啟動時進入 BIOS(又稱設定)來更改“啟動裝置優先順序”。典型的啟動裝置優先順序為軟盤、CDROM、硬碟 1。在大多數情況下,BIOS 可以被告知系統上的哪個裝置應被視為驅動器 1。這使您可以控制啟動系統的裝置。
然後,BIOS 會查詢啟動裝置的主引導記錄 (MBR)。MBR 不位於裝置的任何分割槽上。相反,它是裝置的第一個 512 位元組扇區,位於第一個分割槽之前。
MBR 包含
- 一個“引導程式碼”區域
- 主分割槽表
- 一個 32 位“磁碟簽名”
在啟動啟動裝置(例如硬碟)時,BIOS 會執行 MBR 中包含的程式程式碼(此程式稱為 MBR 的“引導程式碼”。重新分割槽硬碟、格式化分割槽或從備份還原分割槽不會改變或還原 MBR 引導程式碼。
MBR 引導程式碼通常僅由以下內容修改
- OS 的安裝程式(例如 Linux 或 Windows 安裝光碟)
- OS 的修復工具(例如 Windows fixmbr)
- 安裝引導管理器(例如 GRUB)
- 本指南中使用的直接磁碟寫入(dd)
- 感染 MBR 的病毒
- 磁碟擦除工具(例如 DBAN)
除了引導程式碼外,MBR 還包含驅動器的主分割槽表。此資訊包括分割槽的大小、編號和 OS 型別,以及哪個分割槽被標記為“可啟動”(稱為驅動器的“引導”或“活動”分割槽)。(定義驅動器任何邏輯分割槽的擴充套件分割槽表位於擴充套件分割槽上,而不是 MBR 中。)MBR 的主分割槽表由以下內容修改
- OS 的安裝程式(例如 Linux 或 Windows 安裝光碟)
- 分割槽軟體(例如 cfdisk、sfdisk、Gparted)
- 本指南中使用的直接磁碟寫入(dd)
格式化分割槽或更改分割槽上的資料不會更改分割槽表。您必須調整大小、刪除或建立分割槽、更改其型別或更改可啟動分割槽才能影響 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 系統上,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 系統(如 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 分割槽。這種設定與僅 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 鍵。
如何設定 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。
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 GRUB、Ubuntu GRUB2 指南 或 GRUB2 可用的許多其他指南。
使用 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。
如果您想測試新版本的 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 獲取說明。
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 的好處是,您始終會在您的計算機上安裝一個可靠的備份系統。
病毒可能會感染系統檔案、/home 資料夾(Linux)和 MBR。除非您知道病毒的位置,否則建議您使用您知道在感染之前建立的備份來恢復系統分割槽、MBR 引導程式碼,以及可選地恢復 /home 資料夾。病毒從一個作業系統分割槽跳到另一個作業系統分割槽的情況並不常見,但並非不可能。如果有疑問,請全部恢復。
您還應該掃描使用者資料分割槽以查詢病毒。
首先要解決的是分割槽。您應該使用 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 引導問題。
您可能希望將已安裝的作業系統移至另一個分割槽、更大的分割槽或移動到不同驅動器上的分割槽。(注意:將 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 記憶棒的說明,請參閱
- http://www.sysresccd.org/Sysresccd-manual-en_Easy_install_SystemRescueCd_on_harddisk
- http://www.sysresccd.org/Howto_install-usb-stick
- http://www.sysresccd.org/Sysresccd-manual-en_How_to_install_SystemRescueCd_on_an_USB-stick
- http://www.sysresccd.org/forums/viewtopic.php?t=1828
使用 SystemRescueCD 的替代方案
[edit | edit source]在某些情況下,可能更方便不使用 SystemRescueCD,儘管我建議您隨時備好 CD 複製。
例如,如果您在計算機上安裝了兩個 Linux 系統,您可以安裝 Partimage 或 FSArchiver 程式,並從已安裝的系統中使用它們來備份其他未掛載的分割槽。這樣您就不需要重啟才能進行一些備份。一個限制是您不能使用 Partimage 來備份已掛載的分割槽,因此您不能使用已啟動的系統來備份已啟動的系統。
此外,其他 Live Linux CD 通常也包含 Partimage 程式。如果它們能夠在您的硬體上成功執行,您可以將它們用作 SystemRescueCD 的替代品。SystemRescueCD 的優勢在於它啟動速度非常快。其他一些 Live CD 則不太可靠或使用起來不太快。
其他免費工具包括
- Clonezilla:基於 DRBL、Partition Image、ntfsclone 和 udpcast,它允許您建立備份並恢復
- PC Inspector Clonemaxx:一種在如何備份任何硬碟中描述的簡單方法
進一步閱讀
[edit | edit source]- 討論:Ubuntu 論壇
- 討論:Kubuntu 論壇