在物理機而非虛擬機上誤執行 fdisk 刪除關鍵分區 /dev/sda6(151GB、存 114GB 數據)並重建為 30GB RAID 分區,導致分區表錯亂、數據「消失」。冷靜分析未格式化 /dev/md0、數據實際未覆寫,利用 fdisk 精確重建原始分區起止扇區 + partprobe 刷新 + 重啟,成功喚醒完整數據。血淚級運維實錄,教你分區表災難自救。
fdisk /dev/sda → p 看分區 → 刪除 /dev/sda6 (151GB, 數據分區) → 新建 /dev/sda6 30GB、類型改 RAID (fd)。w 寫入分區表 → partprobe 刷新失效 → mdadm 建 RAID 失敗。init 6 重啟 → 物理機重啟(驚覺錯誤)。df -h 顯示 /dev/sda6 大小未變(仍為 151GB),但數據不可讀。/dev/md0 執行 mkfs 格式化,文件系統超級塊、inode 表、數據區塊完整保留。df -h 仍顯示原大小,證明分區表元數據中起始/結束扇區尚未被覆寫(或僅部分覆寫)。fdisk -l /dev/sda 查看當前錯誤表,結合記憶/歷史截圖/備份文件推算原始值。fdisk /dev/sda
d # 刪除錯誤的 sda6
n # 新建分區
p # 主分區
6 # 分區號
[原始起始扇區] # 關鍵:必須與原分區完全一致
[原始結束扇區] # 關鍵:必須與原分區完全一致
t # 修改類型
6 # 分區號
83 # Linux 標準類型
w # 寫入分區表
partprobe 或 kpartx -a /dev/sda。mount /dev/sda6 /mnt。若報錯「wrong fs type / bad superblock」,不要 執行 fsck 或 mkfs,進入下一步。reboot。內核重新讀取分區表、文件系統驅動重新掛載,往往能解決內核緩存的元數據不一致問題。ls -la /mnt、md5sum 關鍵文件、tar -tzf 壓縮包測試。內核在記憶體中緩存了舊的分區表結構與文件系統超級塊資訊。partprobe 僅通知內核重讀分區表,但文件系統驅動可能仍持有舊的超級塊緩存(特別是掛載點目錄項已建立但不可讀的情況)。完全重啟強制內核拋棄所有緩存,基於新分區表從頭掃描超級塊、重建 inode 緩存,從而正確識別原有文件系統結構。
PS1='\[\e[31m\]\h:\w# \[\e[0m\]' 紅色標識物理機。sfdisk -d /dev/sda > sda.partition.backup 導出分區表備份。wipefs -a 而非 fdisk 清除簽名:更安全、可逆。結語:分區表災難看似毀滅性,實則多為元數據錯位而非數據實質銷毀。冷靜、不寫入、精確重建、重啟內核 是核心生存法則。這次 114GB 數據完美歸位,是對「備份分區表」與「不輕易 fsck」鐵律的最佳驗證。願每位運維者永遠用不上這份指南,但必須熟記於心。