slm*_*slm 115 virtualization disk-space-utilization kvm-virtualization
我在 CentOS KVM 主机上设置了一个 Ubuntu 来宾,最初有 6GB 的磁盘空间。如何从命令行增加 Ubuntu 来宾的磁盘空间?
编辑 #1:我正在使用磁盘映像文件 (qemu)。
dya*_*sny 141
qemu-img resize vmdisk.img +10G以将图像大小增加 10Gbbil*_*lyw 36
无论好坏,即使目标虚拟磁盘已挂载,以下命令也会运行。这在无法卸载磁盘(例如根分区)、VM 必须保持运行且系统所有者愿意承担数据损坏风险的环境中非常有用。要消除这种风险,您需要先登录 VM 并卸载目标磁盘,这并不总是可行的。
从 KVM 管理程序执行以下操作。
增加磁盘映像文件本身的大小(指定要增加的数量):
qemu-img resize <my_vm>.img +10G
Run Code Online (Sandbox Code Playgroud)通过 libvirt shell(drive-virtio-disk0在本例中)获取 virtio 设备的名称:
virsh qemu-monitor-command <my_vm> info block --hmp
drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
Run Code Online (Sandbox Code Playgroud)通知 virtio 驱动程序检测新大小(指定总新容量):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Run Code Online (Sandbox Code Playgroud)然后登录虚拟机。运行dmesg应该报告 virtio 磁盘检测到容量变化。此时,继续并根据需要调整分区和 LVM 结构的大小。
slm*_*slm 22
这些serverfault问题类似但更具体,KVM在线磁盘调整大小?& Centos Xen 调整 DomU 分区和卷组的大小。第一个问题是如何在在线时增加 KVM 来宾,而第二个是使用 LVM 的 XEN 特定问题。我问的是如何在 KVM 离线时完成此操作。
注意:此链接对方法 #1 很有用,并展示了如何增加 KVM 的磁盘空间(基于 ext3),HOWTO:调整 KVM 虚拟机映像的大小。
使用 KVM 来宾需要注意的一件事是,它们在内部使用的分区会影响您可以使用哪种方法来增加其磁盘空间。
方法 #1:分区基于 ext2/ext3/ext4
这种方法的要点如下:
# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak
# 3. create a new image
qemu-img create -f raw addon.raw 30G
# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img
Run Code Online (Sandbox Code Playgroud)
现在有了更大的 mykvm.img 文件,启动gparted并将现有分区扩展到新添加的磁盘空间。最后一步基本上扩展了操作系统分区,以便它可以利用额外的空间。
方法#2:分区基于LVM
以下是我大致遵循的步骤来调整内部使用 LVM 的 KVM 来宾的大小。
在 VM 内运行 fdisk 并删除并重新创建 LVM 分区
% fdisk /dev/vda
...
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 3263 26105625 8e Linux LVM
Command (m for help): d
Partition number (1-4): 2
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (14-5874, default 14): 14
Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874):
Using default value 5874
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 5874 47078482+ 83 Linux
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 5874 47078482+ 8e Linux LVM
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.
Syncing disks.
%
Run Code Online (Sandbox Code Playgroud)重启虚拟机
调整 LVM 物理卷的大小
% pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name VolGroup00
PV Size 24.90 GB / not usable 21.59 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 796
Free PE 0
...
% pvresize /dev/vda2
% pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name VolGroup00
PV Size 44.90 GB / not usable 22.89 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 1436
Free PE 640
...
Run Code Online (Sandbox Code Playgroud)调整 LVM 逻辑卷的大小
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Run Code Online (Sandbox Code Playgroud)扩展文件系统
% resize2fs /dev/VolGroup00/LogVol00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
Run Code Online (Sandbox Code Playgroud)以上是我的例子,但我是按照这个网站上的步骤操作的
hda*_*ave 18
一步调整和扩展内部分区
我有一台带有 qcow2 来宾文件映像的 Ubuntu 主机,我想一步调整磁盘大小并扩展适当的分区。它要求您设置 libvirt 来宾文件系统实用程序,但无论如何这些实用程序都很有用。
灵感来自这里:http : //libguestfs.org/virt-resize.1.html
这里的关键命令是: virt-resize
准备:
* Install libvirt file system utilities package
* sudo apt-get install libguestfs-tools
* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
* sudo libguestfs-test-tool
* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
* sudo update-guestfs-appliance
* Run the test again and verify it works
* sudo libguestfs-test-tool
Run Code Online (Sandbox Code Playgroud)
现在执行以下操作:
1)关闭来宾:
2) 检查当前大小并使用 libvirt 实用程序查看要扩展的分区名称:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3)新建(40G)输出盘:
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
Run Code Online (Sandbox Code Playgroud)
4) 将旧的复制到新的,同时扩展适当的分区(假设步骤 2 中的磁盘分区是 /dev/sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
Run Code Online (Sandbox Code Playgroud)
5)将indisk文件重命名为备份,将outdisk重命名为indisk(或修改guest XML)
6) 重新启动guest,仔细测试新磁盘文件,然后删除原文件
7)利润!
可以在不停止 VM 的情况下进行在线调整大小。libvirtd 本身支持这一点:
找到块设备名称。应该是类似“vda”的东西
$ virsh domblklist <libvirtd_vm_name>
Run Code Online (Sandbox Code Playgroud)
调整虚拟设备的大小:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
Run Code Online (Sandbox Code Playgroud)
这里是被我展开一个例子vda,从磁盘50GB到51GB了undercloud虚拟机。
[root@localhost ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Run Code Online (Sandbox Code Playgroud)
现在看看 .qcow2 图像文件的详细信息:
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
Run Code Online (Sandbox Code Playgroud)
现在让我们调整 vda 块设备的大小:
[root@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
Run Code Online (Sandbox Code Playgroud)
并确认:
[root@localhost ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)
然后,您可以在 VM 中使用此脚本来显示调整块设备和 fs 大小的命令:https : //github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh。这是一个示例输出:
mvutcovi@ubuntu1904:~$ wget -q https://raw.githubusercontent.com/mircea-vutcovici/scripts/master/vol_resize.sh
mvutcovi@ubuntu1904:~$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 15414216 7928904 6682600 55% /
mvutcovi@ubuntu1904:~$ sudo bash vol_resize.sh --block-device /dev/vda1
sfdisk -d /dev/vda > dev_vda-partition-table-$(date +%F_%H%M%S).txt # Backup MS-DOS partition table for /dev/vda block device.
parted -s /dev/vda resizepart 1 # Resize MS-DOS partition /dev/vda1
# Update kernel with new partition table from disk
partx -u /dev/vda
partprobe /dev/vda
blockdev --rereadpt /dev/vda
kpartx -u /dev/vda
resize2fs /dev/vda1 # Resize ext3 or ext4 filesystem
mvutcovi@ubuntu1904:~$
Run Code Online (Sandbox Code Playgroud)
如果您在 VM 中使用 LVM,最简单的方法是向 VM 添加一个新的虚拟磁盘,并将卷组和逻辑卷扩展到该磁盘上。
要检查您是否正在使用 LVM run sudo pvs; sudo vgs; sudo lvs,您将得到如下信息:
PV VG Fmt Attr PSize PFree
/dev/vda1 vgWWW lvm2 a- 30.00g 0
VG #PV #LV #SN Attr VSize VFree
vgWWW 1 2 0 wz--n- 30.00g 0
LV VG Attr LSize
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao 1.19g
Run Code Online (Sandbox Code Playgroud)
如果 VM 的操作系统正在使用 LVM。在上面的示例中,VM 有一个 30GB 的虚拟磁盘,使用 LVM 配置,其中一个名为 vgWWW 的卷组包含两个逻辑卷,一个用于交换,另一个用于其他所有内容。
如果 LV 正在 VM 中使用:
sudo pvcreate /dev/vdbsudo vgextend vgWWW /dev/vdbsudo lvextend --extents +100%FREE /dev/vgWWW/root(或类似的,sudo lvextend --size +8G /dev/vgWWW/root如果您不想一直增长它,此示例将向卷添加 8Gb)resize2fs /dev/vgWWW/root注意:上面假设 vg/lv 名称与我的示例相同,这不太可能,请酌情更改,如果 VM 已经有一个名为vdb新的虚拟驱动器,则会是其他内容(vdc等等)
注意: resize2fs仅适用于 ext2、ext3 和 ext4 文件系统。如果您正在使用其他东西,它会出错并且什么也不做。
注意:当您调整实时文件系统的大小resize2fs时,不会fsck像卸载文件系统那样提示您先运行,它会继续运行。在继续之前,您可能希望运行只读文件系统检查是否有问题。
qemu-img resize vmdisk.img +10G以将图像大小增加 10Gb所有功劳都归功于 Josphat Mutai。请注意,下面提到的大小、磁盘编号和名称与问题不同,您的也会不同。
\n乌班图 / 德班
\n$ sudo apt -y install cloud-guest-utils gdisk\nRun Code Online (Sandbox Code Playgroud)\nCentOS/RHEL/Fedora
\n$ sudo yum -y install cloud-utils-growpart gdisk\nRun Code Online (Sandbox Code Playgroud)\n检查是否使用 LVM(LVM 的指示符类似/dev/mapper/xyz):
cat /etc/fstab\nRun Code Online (Sandbox Code Playgroud)\n对于“非 lvm”、设备vda、rootfs 位于分区1:
$ sudo growpart /dev/vda 1\n# Uncomment and run one of these (ext or xfs)\n#sudo resize2fs /dev/vda1\n#sudo xfs_growfs /\nRun Code Online (Sandbox Code Playgroud)\n对于“lvm”、设备vda、分区2、物理卷vda2、逻辑卷组rhel-root:
$ sudo growpart /dev/vda 2\n$ sudo pvresize /dev/vda2\n$ sudo lvextend -r -l +100%FREE /dev/mapper/rhel-root\nRun Code Online (Sandbox Code Playgroud)\n对于每个的较长版本,请参见下文!
\n\n\n\n
使用
\n\nlsblk(在本例中1为“”vda1)查找分区号Run Code Online (Sandbox Code Playgroud)\n\n\n $ lsblk\n NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\n sr0 11:0 1 1024M 0 rom
\n vda 253:0 0 10G 0 disk\n \xe2\x94\x94\xe2\x94\x80vda1 253:1 0 10G 0 part /\n使用以下命令增长 \'vda\' 的分区 \'1\'
\n\ngrowpart\n $ sudo Growthpart /dev/vda 1\n 已更改:分区=1 开始=2048 旧:大小=20969472 结束=20971520 新:大小=62912479,结束=62914527\n\n\n要扩展文件系统,首先使用以下命令检查是否为 ext2/3/4 或 XFS
\n\ndf:\n $ df -hT | df -hT | grep /dev/vda\n /dev/vda1 ext4 30G 1.2G 7G 5% /\n\n对于 ext4 文件系统,请使用
\n\nresize2fs:\n $ sudo resize2fs /dev/vda1\n resize2fs 1.42.9 (2013 年 12 月 28 日)\n /dev/vda1 处的文件系统安装在 / 上;需要在线调整大小\n old_desc_blocks = 2,new_desc_blocks = 4\n /dev/vda1 上的文件系统现在的长度为 7864059 块。\n\n\n对于 XFS,它可以在使用“xfs_growfs”挂载时增长:
\n\n $ sudo xfs_growfs /\n\n
\n\n\n
查找分区号:
\n\n $ lsblk\n 名称主要:最小 RM 大小 RO 类型安装点\n sr0 11:0 1 1024M 0 rom\n
\n vda 252:0 0 40G 0 磁盘\n \xe2\x94\x9c\xe2\x94\x80vda1 252 :1 0 1G 0 部分 /boot\n \xe2\x94\x94\xe2\x94\x80vda2 252:2 0 29G 0 部分\n \xe2\x94\x9c\xe2\x94\x80rhel-root 253:0 0 26.9 G 0 lvm /\n \xe2\x94\x94\xe2\x94\x80rhel-swap 253:1 0 2.1G 0 lvm [交换]\n使用以下命令增长“vda”的分区“2”
\ngrowpart:\n $ sudo Growthpart /dev/vda 2\n 更改:partition=2 start=2099200 旧:size=18872320 end=20971520 新:size=60815327,end=62914527\n\n使用以下命令调整物理卷大小
\npvresize:\n $ sudo pvresize /dev/vda2\n 物理卷“/dev/vda2”已更改\n 1 个物理卷调整大小或更新/0 个物理卷未调整大小\n\n\n使用以下命令查找卷组的名称
\ndf(您的卷组可能与下面的不同)并使用扩展卷组调整根文件系统使用的逻辑卷的大小lvextend:\n $ df -hT | df -hT | grep mapper\n /dev/mapper/rhel-root xfs 27G 1.9G 26G 8% /\n \\n
n $ sudo lvextend -r -l +100%FREE /dev/mapper/rhel-root\n 逻辑卷 rhel 的大小/root 从 <26.93 GiB (6893 个范围) 更改为 <36.93 GiB (9453 个范围)。\n 逻辑卷 rhel/root 已成功调整大小。\n如果您在上一步中没有使用\xe2\x80\x99
\n\n-r选项,文件系统仍将显示旧大小。要使文件系统报告实际大小(包括扩展大小),请执行以下操作。对于 ext4 文件系统,请使用
\nresize2fs:\n $ sudo resize2fs /dev/卷组名称/root\n\n对于 xfs 文件系统使用
\nxfs_growfs:\n $ sudo xfs_growfs /\n 元数据=/dev/mapper/rhel-root isize=512 agcount=4,agsize=1764608 blks\n = sectsz=512 attr=2,projid32bit=1\n = crc=1 finobt=1,稀疏=1,rmapbt=0\n = reflink=1\n 数据 = bsize=4096 块=7058432,imaxpct=25\n = sunit=0 swidth=0 blks\n 命名=版本 2 bsize=4096 ascii-ci=0,ftype=1\n log =内部日志 bsize=4096 块=3446,版本=2\n = sectsz=512 sunit=0 blks,lazy-count=1\n realtime =无 extsz=4096 块=0, rtextents=0\n 数据块从 7058432 更改为 9679872\n\n
小智 5
这样你就可以扩展你想要的分区:
# see what partitions you have?
virt-filesystems --long -h --all -a olddisk
truncate -r olddisk newdisk
truncate -s +5G newdisk
# Note "/dev/sda2" is a partition inside the "olddisk" file.
virt-resize --expand /dev/sda2 olddisk newdisk
Run Code Online (Sandbox Code Playgroud)
请参阅此处的更多示例。
| 归档时间: |
|
| 查看次数: |
257067 次 |
| 最近记录: |