Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux MBR 引導記錄備份與恢復實戰:dd 命令、GRUB 修復與雙系統引導修復

編輯:Linux 教學

MBR 結構與備份原理

# MBR 佔用磁盤前 512 字節
# 結構:
# 0-439 字節: 引導載入器代碼 (GRUB Stage1 / Windows Bootloader)
# 440-443 字節: 磁盤簽名 (4 字節)
# 444-445 字節: 保留 (通常 0x0000)
# 446-509 字節: 分區表 (4 個主分區條目,每項 16 字節)
# 510-511 字節: 結束標誌 0x55AA

# 完整備份 (含分區表)
dd if=/dev/sda of=/root/mbr_backup_$(date +%F).bin bs=512 count=1

# 僅備份引導代碼 (不含分區表,跨磁盤恢復較安全)
dd if=/dev/sda of=/root/boot_code.bin bs=446 count=1

# 僅備份分區表
sfdisk -d /dev/sda > /root/partition_table.bak
# 或
dd if=/dev/sda of=/root/part_table.bin bs=1 skip=446 count=64

恢復操作與風險控制

場景一:GRUB 損壞,分區表完好

# 從備份恢復引導代碼
dd if=/root/boot_code.bin of=/dev/sda bs=446 count=1
# 或重新安裝 GRUB (推薦,自動適配當前分區)
grub-install /dev/sda

場景二:分區表損壞,需完整恢復

# 危險操作!確認備份與目標磁盤幾何結構一致
dd if=/root/mbr_backup_20240101.bin of=/dev/sda bs=512 count=1
# 立即驗證
fdisk -l /dev/sda

場景三:誤刪分區,需從備份恢復分區表

# 使用 sfdisk 恢復
sfdisk /dev/sda < /root/partition_table.bak
# 或 testdisk 交互式恢復 (更安全)
testdisk /dev/sda

GRUB 重新安裝標準流程

方法一:系統內重裝 (較安全)

# 確認根分區位置
lsblk -f
# 重裝 GRUB 到磁盤
grub-install /dev/sda
# 更新配置
update-grub
# 或
grub-mkconfig -o /boot/grub/grub.cfg

方法二:LiveCD/救援模式 Chroot 重裝

# 1. 掛載根分區
mount /dev/sda2 /mnt
# 2. 掛載關鍵虛擬文件系統
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
# 3. 進入 chroot
chroot /mnt
# 4. 重裝 GRUB
grub-install /dev/sda
update-grub
# 5. 退出並重啟
exit
reboot

Windows + Linux 雙系統引導修復

問題:Windows 重裝覆蓋 MBR,導致無法進入 Linux

# 方案一:Linux LiveCD 重裝 GRUB (推薦)
# 按上述 Chroot 流程操作,GRUB 會自動檢測 Windows 並添加菜單項

# 方案二:Windows 下使用 EasyBCD 添加 GRUB 引導
# 1. Linux 下備份 GRUB Stage1 (512 字節)
dd if=/dev/sda2 of=/boot/grub.lnx bs=512 count=1  # 假設 /boot 在 sda2
# 2. 複製 grub.lnx 到 Windows C:\
# 3. Windows 下 EasyBCD -> 添加條目 -> Linux/BSD -> GRUB 2 -> 路徑 C:\grub.lnx
# 4. 重啟由 Windows Boot Manager 選單啟動 GRUB 再進 Linux

問題:GRUB 更新後 Windows 項消失

# 1. 掛載 Windows 系統分區 (通常是 sda1)
mkdir -p /mnt/win
mount /dev/sda1 /mnt/win
# 2. 運行 os-prober 掃描
os-prober
# 3. 更新 GRUB
update-grub
# 輸出應包含: Found Windows 10 on /dev/sda1

UEFI 系統特殊說明

  • UEFI 無 MBR 概念,引導載入器為 EFI 系統分區 (ESP) 中的 .efi 文件
  • 備份關鍵:cp -a /boot/efi /root/efi_backup/ (整個 ESP 分區)
  • 修復:grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
  • Windows UEFI 修復:安裝介質修復模式 -> bcdboot C:\Windows /s S: /f UEFI (S: 為 ESP 盤符)

自動化備份腳本 (計劃任務)

# /usr/local/bin/backup_mbr.sh
#!/bin/bash
BACKUP_DIR="/backup/mbr"
mkdir -p "$BACKUP_DIR"
DATE=$(date +%F_%H%M)
DISK="/dev/sda"

# 完整 MBR
dd if="$DISK" of="$BACKUP_DIR/mbr_${DATE}.bin" bs=512 count=1
# 分區表文本
sfdisk -d "$DISK" > "$BACKUP_DIR/part_${DATE}.txt"
# 僅引導代碼
dd if="$DISK" of="$BACKUP_DIR/bootcode_${DATE}.bin" bs=446 count=1

# 保留最近 30 份
find "$BACKUP_DIR" -name "mbr_*.bin" -mtime +30 -delete
find "$BACKUP_DIR" -name "part_*.txt" -mtime +30 -delete

# 設置權限並加入 crontab
chmod +x /usr/local/bin/backup_mbr.sh
echo "0 3 * * * root /usr/local/bin/backup_mbr.sh" >> /etc/crontab

核心工具對比表

工具功能適用場景風險等級
dd底層塊級備份/恢復MBR 完整備份、引導代碼提取高 (覆寫不可逆)
sfdisk分區表文本化備份/恢復分區表修復、跨磁盤複製分區佈局中
grub-installGRUB 引導器安裝GRUB 損壞修復、新磁盤安裝引導低
testdisk交互式分區恢復誤刪分區、分區表損壞掃描恢復低
boot-repair圖形化自動修復新手、複雜雙系統 UEFI/Legacy 混合低
Copyright © Windows教程網 All Rights Reserved