![虚拟机中的磁盘大小增加了,但 gdisk 不想使用新的空间](https://linux22.com/image/1618430/%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%AD%E7%9A%84%E7%A3%81%E7%9B%98%E5%A4%A7%E5%B0%8F%E5%A2%9E%E5%8A%A0%E4%BA%86%EF%BC%8C%E4%BD%86%20gdisk%20%E4%B8%8D%E6%83%B3%E4%BD%BF%E7%94%A8%E6%96%B0%E7%9A%84%E7%A9%BA%E9%97%B4.png)
我有一台虚拟机,其中虚拟磁盘(显示为/dev/sdb
)大小为 10G
管理员将虚拟磁盘的大小增加到 60G。
我重新启动了机器,现在发现磁盘更大了。
root@DMZMHLX3:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdb 8:16 0 60G 0 disk
└─sdb1 8:17 0 10G 0 part /app
...
现在我想添加另一个分区:
gdisk 告诉我磁盘大小为 60G,但最后一个可用扇区是与旧的 10G 磁盘映像大小相对应的扇区:
root@DMZMHLX3:~# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 125829120 sectors, 60.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): FCE659D1-3690-4C3C-93EC-79B51EE8556D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 20969471 10.0 GiB 8300
最后可用扇区应该是 125829120 这样的东西,而不是 20971486。
因此,虽然磁盘映像大小已增加并且虚拟机看到了变化,但我不知道如何使用新可用的空间。
fdisk 显示:
root@DMZMHLX3:~# fdisk -l /dev/sdb
GPT PMBR size mismatch (20971519 != 125829119) will be corrected by w(rite).
Disk /dev/sdb: 60 GiB, 64424509440 bytes, 125829120 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
Disklabel type: gpt
Disk identifier: FCE659D1-3690-4C3C-93EC-79B51EE8556D
Device Start End Sectors Size Type
/dev/sdb1 2048 20969471 20967424 10G Linux filesystem
它识别出不匹配的情况:
GPT PMBR 大小不匹配 (20971519 != 125829119) 将通过 w(rite) 进行纠正。但尝试写入时 fdisk 失败:
Command (m for help): w
GPT PMBR size mismatch (20971519 != 125829119) will be corrected by w(rite).
fdisk: failed to write disklabel: Invalid argument
root@xxx:~#
我该如何修复此问题?
最终目标是增加现有分区的大小,但即使我只需添加新分区,我也已经很高兴了
答案1
根据调整分区大小 fdisk 因参数无效而失败帖子,看来你使用分开(例如sudo parted -l
)并让它“使固定“分区表没有覆盖整个磁盘或其他问题。
一旦使用该工具解决该问题,然后只需继续执行命令sudo fdisk /dev/sdb1
,然后sudo resize2fs /dev/sdb1
在之后运行即可应用更改。
重要的: 在进行任何磁盘分区更改之前,请不要忘记进行完整的系统备份。
我设法相当简单地解决了这个问题。我安装了 parted,当我运行它时,它告诉我分区表没有覆盖整个磁盘(duh),所以它要求我修复/取消,我回答了修复。
显然,这个办法起了作用,因为我能够使用 将分区修改为完整大小
sudo fdisk /dev/vda
,但之后我需要运行sudo resize2fs /dev/vda3
才能应用更改。
此外,还有其他人的建议调整分区大小 fdisk 因参数无效而失败以答案和评论的形式发布您可能会发现有用和有益的内容。
支持资源
答案2
帖子 在 Linux 中扩展 VMware 磁盘上的分区 有这样的程序:
- 使用 parted 修复 GPT 表:
sudo parted -l
停止访问这些磁盘的所有服务并卸载该磁盘,例如:
sudo systemctl stop jenkins.service sudo systemctl stop apache2.service sudo umount /dev/sdb1
可以通过从 GParted 磁盘启动来避免此步骤,如下所述。
从 fdisk 扩展分区:
sudo fdisk /dev/sdb
由于从虚拟机内部扩大磁盘需要停止可能正在使用该磁盘的任何服务,因此可以通过使用以下命令启动虚拟机来避免这种情况 分区。
文章 使用 GParted 增加 Linux 本机分区的磁盘大小 详细描述了整个过程。
答案3
原因是 GPT 在磁盘末尾放置了分区表的备份,因此即使磁盘有“新的末尾”,备份也不会自动转到该末尾,而是将可用块限制在旧的“区域”。
您可以简单地“zap”(擦除)GPT(x
然后z
输入gdisk
),然后创建一个具有相同分区条目的新分区(通过输入相同的开始和可选的相同结束)。
如果您正在进行 UEFI 启动,那么删除保护性 MBR 也应该没问题,因为不需要保留任何启动代码。
编辑:实际上看起来您可以简单地x
然后e
在gdisk
。