Linux

Ubuntu 16.04 虛擬機/XenServer 儲存擴展問題

  • December 11, 2020

首先,我應該說我是伺服器管理和虛擬化領域的新手。在檢查了幾個關於它的教程之後,我嘗試擴展在 XenServer 中創建的虛擬機的儲存,並從另一個 VM 獲取快照。首先,我關閉了 VM,並通過 XenCenter 將儲存從 40 GB 擴展到 80 GB。然後我啟動VM並輸入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 沒有啟動。(在此之後我恢復到快照)。

我不確定您究竟遵循了哪些步驟,但需要發生以下三件事來增加 Linux VM 的可用磁碟:

  • 增加 XenCenter 中 VM 可用的磁碟大小。
  • 增加 VM 分區表中 VM 分區的大小。
  • 增加 VM 中 ext3 文件系統的大小

以下是給定範例中涉及的步驟。

步驟 1:增加 XenCenter 中的磁碟空間

你已經做到了。

步驟 2:更改 VM 中的分區表

接下來,啟動 VM,因為您需要使用 fdisk 增加 linux / 分區的大小。實用程序 parted 也應該允許您調整分區大小,並且更智能,並且還允許您移動文件系統數據,但 parted 不允許您編輯正在執行的分區。在這種情況下,因為我們要編輯例如: /dev/xvda3 這是我們的 / 分區,它位於虛擬磁碟的末尾,所以我只需要擴展分區的大小而不是移動它。在正在執行的 VM 上使用 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:重新啟動虛擬機

現在最後一個警告是準確的,您需要再次重新啟動 VM,以便核心獲取對分區幾何結構的更改。但是,重啟不會改變 / 分區的可用磁碟空間大小:

# 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

您可以通過在正在執行的 VM 中執行 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

在開始 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

它現在應該可以工作了。

引用自:https://serverfault.com/questions/799024