Ubuntu 16.04 虛擬機/XenServer 儲存擴展問題
首先,我應該說我是伺服器管理和虛擬化領域的新手。在檢查了幾個關於它的教程之後,我嘗試擴展在 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
它現在應該可以工作了。