Ubuntu 16.04 虚拟机/XenServer 存储扩展问题

Ubuntu 16.04 虚拟机/XenServer 存储扩展问题

首先,我应该说我是服务器管理和虚拟化领域的新手。在查看了几个相关教程后,我尝试使用从另一台虚拟机拍摄的快照扩展在 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

我无法让我的方法奏效,也找不到为什么我的方法不起作用,但我找到了一种解决方法,这要归功于视频

  1. 我关闭了虚拟机并增加了硬盘
  2. 然后启动VM并运行fdisk /dev/xvda
  3. 使用n(分区号 4,/dev/xvda4)创建新的 Linux LVM 类型,具有可用空间的主分区
  4. 写入w并保存新的分区表
  5. 重新启动虚拟机
  6. 重启后,使用以下命令创建新分区pvcreate /dev/xvda4
  7. 看看vgdisplay我的 VG 名称是什么(即 dbvmviduio-vg)
  8. 通过运行扩展 dbvmviduio-vgvgextend dbvmviduio-vg /dev/xvda4
  9. 通过运行增加音量lvextend -L+40G /dev/dbvmviduio-vg/root
  10. 最后,我运行resize2fs /dev/dbvmviduio-vg/root并检查了df -h

相关内容