從 fdisk 覆蓋主分區作為擴展恢復 VM
我有一個 CentOS7 虛擬機。
在
fdisk /dev/sda
刪除以調整分區大小的過程中,我們刪除了主分區,並且在重新創建期間選擇了擴展而不是主分區。更改已保存並重新啟動。所有操作如下所示,而係統啟動時,控制台上顯示以下內容。
我正在尋找一種使系統再次可啟動的方法,並更好地了解發生了什麼。
1.控制台輸出:
[ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Paths. [ OK ] Started Forward Password Requests to Plymouth Directory Watch. [ OK ] Reached Target Basic System. .... dracut-initqueueu[262] Warning: dracut-initqueueu timeout - starting timeout scripts .... Starting Dracut Emergency Shell... Warning /dev/mapper/rootvg-rootlv does not exist Warning /dev/rootvg/rootlv does not exist
2. 對 VM 執行的操作導致無法啟動:
[root@Server ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 25G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 1G 0 part │ └─swapvg-swaplv 253:1 0 1G 0 lvm [SWAP] └─sda3 8:3 0 23G 0 part └─rootvg-rootlv 253:0 0 23G 0 lvm / sr0 11:0 1 1024M 0 rom [root@Server ~]# fdisk /dev/sda Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sda: 26.8 GB, 26843545600 bytes, 52428800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000ea6ab Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 4202495 1051648 8e Linux LVM /dev/sda3 4202496 52428799 24113152 8e Linux LVM Command (m for help): d Partition number (1-3, default 3): Partition 3 is deleted Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): e Partition number (3,4, default 3): First sector (4202496-52428799, default 4202496): Using default value 4202496 Last sector, +sectors or +size{K,M,G} (4202496-52428799, default 52428799): Using default value 52428799 Partition 3 of type Extended and of size 23 GiB is set Command (m for help): t Partition number (1-3, default 3): Hex code (type L to list all codes): 8e You cannot change a partition into an extended one or vice versa. Delete it first. Type of partition 3 is unchanged: Extended Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@Server ~]# reboot
發生了什麼?
擴展分區引導記錄的佈局與主記錄不同:它是洋蔥分層的,導致分區內分區,因此數據偏移量不同。
同樣創建一個擴展分區而不在內部添加一個(不要添加它!)是沒用的:作業系統只是看到沒有任何可用的分區,因為它只是一個容器,與您使用的其他可用儲存容器(如LVM )相比非常粗糙。Linux 也會從第 5 個分區開始在 EPBR 內命名這樣的新分區(例如:),
/dev/sda5
只要 LVM 仍然被自動檢測到,這不會造成太大的麻煩。您沒有創建擴展類型分區的事實可能防止了進一步的損壞。該怎麼辦?
因為它是一個虛擬機,所以很容易,無論如何你都應該先做一個備份,包括完整的磁碟映像,以防進一步的操作造成額外的損害。
您應該恢復您的更改並以與您相同的方式再次使用主分區:刪除分區並在原地重新創建它,使用以前的偏移量和長度,希望實際上沒有發生實際的數據覆蓋(不能保證)。您擁有將主分區恢復原狀所需的所有數據。
正如fdisk工具所警告的那樣,正如您所發現的那樣,您不能輕易地從主要切換到擴展。
無法開機怎麼辦?
就像實際系統出現問題一樣:如果無法啟動,請使用應急磁碟。任何 Live CD/USB 發行版都可以,它不必是 CentOS,例如可以是 Debian Live CD 映像。
您必須獲取這樣的實時磁碟映像,並將其作為磁碟附加到 VM,並使其可啟動。然後啟動它,找到一個菜單以獲取 shell 並成為 root,找到您的磁碟:例如,它可能已被重命名為
/dev/sda
to/dev/sdb
或不取決於如何完成,然後fdisk
再次執行。如果fdisk
不可用,請找到獲取命令或等效命令的方法。小心,較新的工具版本提供擦除分區/文件系統簽名,不要讓它擦除任何東西。