从 fdisk 恢复虚拟机覆盖主分区作为扩展

从 fdisk 恢复虚拟机覆盖主分区作为扩展

我有一个 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. 对虚拟机执行的操作导致虚拟机无法启动:

[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

答案1

发生了什么?

的布局扩展分区引导记录与主分区不同:它是洋葱分层的,导致分区内有分区,从而产生不同的数据偏移量。

另外,创建一个扩展分区而不在内部添加一个(不要添加它!)是没有用的:操作系统只是看到没有任何可用的分区,因为它只是一个容器,与其他可用的存储容器(例如逻辑卷管理器你正在使用。 Linux 还会从第 5 个分区开始在 EPBR 内命名此类新分区(例如:/dev/sda5),只要 LVM 仍然被自动检测到,就不会造成太大麻烦。您随后没有创建扩展类型分区的事实可能会阻止进一步的损坏。

该怎么办?

由于它是虚拟机并且很容易,因此您应该首先进行备份,包括完整的磁盘映像,以防进一步的操作导致额外的损坏。

您应该恢复更改并再次使用主分区,就像您所做的那样:删除分区并使用以前的偏移量和长度就地重新创建它,希望实际上没有发生实际数据覆盖(这不能保证)。您拥有按原样恢复此主分区所需的所有数据。

您无法轻松地从主要切换到扩展,因为磁盘驱动器工具发出警告并正如您所发现的那样。

无法启动怎么办?

就像处理出现问题的真实系统一样:如果无法启动,请使用救援磁盘。任何 Live CD/USB 发行版都可以,不一定是 CentOS,也可以是 Debian Live CD 映像。

您必须获取此类实时磁盘映像,并将其作为磁盘附加到虚拟机,并使其可启动。然后启动它,找到一个菜单来获取 shell 并成为 root,找到你的磁盘:例如,它可能已被重命名为/dev/sda/dev/sdb不重命名,具体取决于这是如何完成的,然后fdisk再次运行。如果fdisk不可用,请找到一种获取该命令或等效命令的方法。请小心,较新的工具版本提供擦除分区/文件系统签名,但不允许它擦除任何内容。

相关内容