首先,我应该说我是服务器管理和虚拟化领域的新手。在查看了几个相关教程后,我尝试使用从另一台虚拟机拍摄的快照扩展在 XenServer 中创建的虚拟机的存储。首先,我关闭虚拟机并通过 XenCenter 将存储从 40 GB 扩展到 80 GB。然后我启动虚拟机并输入 fdisk:
sudo fdisk /dev/xvda
然后我打印了分区表:
Device Boot Start End Sectors Size Id Type
/dev/xvda1 2048 999423 997376 487M 83 Linux
/dev/xvda2 1001470 83884031 82882562 39.5G 5 Extended
/dev/xvda5 1001472 83884031 82882560 39.5G 8e Linux LVM
我在任何教程中都没有看到类似的分区表。这就是为什么我尝试创建类似于此表的新分区表。首先,我删除 5 和 2,然后创建一个新的扩展分区 (2),并创建一个 Linux 类型分区 (5)。最后,我将 5 的类型更改为 Linux LVM。最终分区表如下所示:
Device Boot Start End Sectors Size Id Type
/dev/xvda1 2048 999423 997376 487M 83 Linux
/dev/xvda2 999424 167772159 166772736 79.5G 5 Extended
/dev/xvda5 1001472 167772159 166770688 79.5G 8e Linux LVM
检查完表后,我将表写入磁盘并重新启动虚拟机。虚拟机启动没有任何问题。我用 检查了磁盘空间sudo df -h
,以下是输出:
Filesystem Size Used Avail Use% Mounted on
udev 12G 0 12G 0% /dev
tmpfs 2.4G 8.7M 2.4G 1% /run
/dev/mapper/dbvmviduio--vg-root 35G 1.7G 32G 6% /
tmpfs 12G 0 12G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 12G 0 12G 0% /sys/fs/cgroup
/dev/xvda1 472M 101M 347M 23% /boot
tmpfs 100K 0 100K 0% /run/lxcfs/controllers
tmpfs 2.4G 0 2.4G 0% /run/user/1000
毕竟,我尝试resize2fs
按照教程中写的那样运行。一开始我不知道在 xvda2 或 xvda5 上运行 resize2fs,我尝试了两者,但都出现了这些错误。
sudo resize2fs /dev/xvda2
resize2fs 1.42.13 (17-May-2015)
resize2fs: Attempt to read block from filesystem resulted in short read while trying to open /dev/xvda2
Couldn't find valid filesystem superblock.
sudo resize2fs /dev/xvda5
resize2fs 1.42.13 (17-May-2015)
resize2fs: Device or resource busy while trying to open /dev/xvda5
Couldn't find valid filesystem superblock.
分区表有问题吗?我该如何解决这些问题?
注意:当我无法解决这些问题时,我尝试创建一个 Linux 类型的分区(没有扩展),重启后 VM 不会启动。(此后我恢复到快照)。
答案1
我不确定您具体遵循了哪些步骤,但要增加 Linux VM 可用的磁盘空间,需要做以下三件事:
- 增加 XenCenter 中 VM 可用的磁盘大小。
- 增加虚拟机分区表中虚拟机分区的大小。
- 增加虚拟机中 ext3 文件系统的大小
以下是给定示例中所涉及的步骤。
步骤 1:增加 XenCenter 中的磁盘空间
你已经完成了。
步骤 2:更改虚拟机中的分区表
接下来,启动虚拟机,因为您需要使用 fdisk 增加 linux / 分区的大小。实用程序 parted 应该允许您调整分区大小,并且更加智能,还允许您移动文件系统数据,但 parted 不允许您编辑正在运行的分区。在这种情况下,因为我们想要编辑例如:/dev/xvda3,它是我们的 / 分区,它位于虚拟磁盘的末尾,所以我只需要扩展分区的大小,而不是移动它。在正在运行的虚拟机上使用 fdisk 增加 / 分区 (/dev/xvda3):
# fdisk /dev/xvda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/xvda: 12.9 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000928ad
Device Boot Start End Blocks Id System
/dev/xvda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 26 281 2048000 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/xvda3 281 1045 6134784 83 Linux
Command (m for help): d
Partition number (1-4): 3
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (281-1566, default 281): 281
Last cylinder, +cylinders or +size{K,M,G} (281-1566, default 1566): 1566
Command (m for help): p
Disk /dev/xvda: 12.9 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000928ad
Device Boot Start End Blocks Id System
/dev/xvda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 26 281 2048000 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/xvda3 281 1566 10325071 83 Linux
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.
#
步骤 3:重新启动虚拟机
现在,上一条警告准确无误,您需要再次重启虚拟机,以便内核获取对分区几何结构的更改。但是,重启不会改变 / 分区的可用磁盘空间大小:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda3 5.8G 829M 4.7G 15% /
tmpfs 497M 0 497M 0% /dev/shm
/dev/xvda1 194M 45M 140M 25% /boot
您可以通过在正在运行的虚拟机中运行 resize2fs 来解决此问题,它将自动注意到分区几何形状和文件系统大小之间的差异,并将文件系统扩展到其最大大小:
# resize2fs /dev/xvda3
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/xvda3 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/xvda3 to 2581267 (4k) blocks.
The filesystem on /dev/xvda3 is now 2581267 blocks long.
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda3 9.7G 830M 8.4G 9% /
tmpfs 497M 0 497M 0% /dev/shm
/dev/xvda1 194M 45M 140M 25% /boot
#
特别感谢 http://www.simonhiggs.com/articles/xenserver-6.2-extending-disk-on-a-linux-vm.html
答案2
在启动 resize2fs 之前,您应该做一些额外的操作...调整分区大小后,请执行以下步骤:
调整已调整大小分区上的物理卷大小:
sudo lvm pvresize /dev/xvda3
重新扫描您的卷组:
sudo lvm vgscan
激活虚拟群组:
sudo lvm vgchange -ay
显示逻辑卷:
sudo lvdisplay
存储根卷的名称。它应该是这样的:/dev/vm-name-vg/root
将逻辑卷的大小调整为所有额外的可用空间(不要忘记用上一个命令中的真实卷名替换“/dev/vm-name-vg/root”):
sudo lvm lvresize /dev/vm-name-vg/root -l +100%FREE
然后你可以做
resize2fs /dev/xvda3
现在它应该可以工作了。
答案3
我无法让我的方法奏效,也找不到为什么我的方法不起作用,但我找到了一种解决方法,这要归功于视频。
- 我关闭了虚拟机并增加了硬盘
- 然后启动VM并运行
fdisk /dev/xvda
- 使用
n
(分区号 4,/dev/xvda4)创建新的 Linux LVM 类型,具有可用空间的主分区 - 写入
w
并保存新的分区表 - 重新启动虚拟机
- 重启后,使用以下命令创建新分区
pvcreate /dev/xvda4
- 看看
vgdisplay
我的 VG 名称是什么(即 dbvmviduio-vg) - 通过运行扩展 dbvmviduio-vg
vgextend dbvmviduio-vg /dev/xvda4
- 通过运行增加音量
lvextend -L+40G /dev/dbvmviduio-vg/root
- 最后,我运行
resize2fs /dev/dbvmviduio-vg/root
并检查了df -h