Câu trả lời:
qemu-img resize vmdisk.img +10G
để tăng kích thước hình ảnh thêm 10Gbstart the VM, resize the partitions and LVM structure within it normally
Làm thế nào để làm nó? Hãy giải thích nó.
Dù tốt hay xấu, các lệnh bên dưới sẽ chạy ngay cả khi đĩa ảo đích được gắn. Điều này có thể hữu ích trong các môi trường mà đĩa không thể bị ngắt (như phân vùng gốc), VM phải ở lại và chủ sở hữu hệ thống sẵn sàng chấp nhận rủi ro hỏng dữ liệu . Để loại bỏ rủi ro đó, bạn sẽ cần phải đăng nhập vào VM và ngắt kết nối đĩa đích trước, điều không phải lúc nào cũng có thể.
Thực hiện như sau từ bộ ảo hóa KVM.
Tăng kích thước của tệp hình ảnh đĩa (chỉ định số lượng cần tăng):
qemu-img resize <my_vm>.img +10G
Lấy tên của thiết bị virtio, thông qua trình bao libvirt ( drive-virtio-disk0
trong ví dụ này):
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]
Báo hiệu trình điều khiển virtio để phát hiện kích thước mới (chỉ định tổng công suất mới):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Sau đó đăng nhập vào VM. Chạy dmesg
nên báo cáo rằng đĩa virtio phát hiện thay đổi công suất. Tại thời điểm này, hãy tiếp tục và thay đổi kích thước phân vùng và cấu trúc LVM của bạn nếu cần.
Những câu hỏi serverfault tương tự nhưng cụ thể hơn, thay đổi kích thước đĩa trực tuyến KVM? & Centos Xen thay đổi kích thước nhóm phân vùng và khối lượng DomU . Người thứ nhất đặt câu hỏi về cách tăng khách KVM khi trực tuyến, trong khi người thứ hai là XEN cụ thể bằng LVM. Tôi đang hỏi làm thế nào để thực hiện điều này trong khi KVM đang ngoại tuyến.
LƯU Ý: Liên kết này hữu ích cho METHOD # 1 và cho biết cách thực hiện tăng dung lượng đĩa của KVM (dựa trên ext3), HOWTO: Thay đổi kích thước hình ảnh máy ảo KVM .
Một điều cần lưu ý với khách KVM là các phân vùng họ đang sử dụng bên trong có thể ảnh hưởng đến phương pháp nào bạn có thể sử dụng để tăng dung lượng đĩa của họ.
PHƯƠNG PHÁP # 1: Phân vùng dựa trên ext2 / ext3 / ext4
Các loại hạt của phương pháp này như sau:
# 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
Bây giờ với tệp mykvm.img lớn hơn trong tay, hãy khởi động gparted và mở rộng phân vùng hiện có vào không gian đĩa mới được thêm vào. Bước cuối cùng này về cơ bản mở rộng phân vùng HĐH để nó có thể sử dụng thêm dung lượng.
PHƯƠNG PHÁP # 2: Phân vùng dựa trên LVM
Dưới đây là các bước mà tôi gần như đã làm theo để thay đổi kích thước một khách KVM đã sử dụng LVM trong nội bộ.
chạy fdisk bên trong VM và xóa và tạo lại phân vùng 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.
%
Khởi động lại VM
Thay đổi kích thước âm lượng vật lý 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
...
Thay đổi kích thước Khối lượng logic LVM
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Phát triển hệ thống tệp
% 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.
Trên đây là ví dụ của tôi, nhưng tôi đã làm theo các bước trên trang web này
virt-manager
và đã sử dụng rộng rãi phương pháp # 1 & # 2 trước khi tôi di chuyển các máy chủ KVM của chúng tôi sang phiên bản mới hơn của KVM (CentOS 5 -> CentOS 6). Bây giờ tôi sử dụng qemu-img resize
phương pháp là tốt.
lvextend /dev/Volgroup/lvname /dev/vda2
(tất cả trên một dòng, trong đó / dev / vda2 sẽ là âm lượng vật lý của bạn). Không có bất kỳ tùy chọn nào khác, nó sẽ sử dụng kích thước tối đa trong nhóm âm lượng đó.
Thay đổi kích thước và mở rộng phân vùng nội bộ trong một bước
Tôi đã có một máy chủ Ubuntu với hình ảnh tệp khách qcow2 và muốn thay đổi kích thước đĩa và mở rộng tất cả các phân vùng thích hợp trong một bước. Nó yêu cầu bạn thiết lập các tiện ích hệ thống tập tin khách libvirt, nhưng dù sao chúng cũng hữu ích.
Cảm hứng từ đây: http://libguestfs.org/virt-resize.1.html
Lệnh chính ở đây là: virt-resize
Sự chuẩn bị:
* 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
Bây giờ làm như sau:
1) tắt máy khách:
2) Kiểm tra kích thước hiện tại và xem tên phân vùng bạn muốn mở rộng bằng tiện ích libvirt:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3) Tạo đĩa đầu ra mới (40G):
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4) Sao chép cái cũ sang cái mới trong khi mở rộng phân vùng thích hợp (giả sử phân vùng đĩa của bạn từ bước 2 là / dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5) Đổi tên tệp indisk thành bản sao lưu, đổi tên outdisk thành indisk (hoặc sửa đổi XML khách)
6) Khởi động lại máy khách và kiểm tra tệp đĩa mới một cách cẩn thận trước khi xóa tệp gốc
7) Lợi nhuận!
-o preallocation=metadata
tạo một tệp thưa thớt. Với tùy chọn đó, nó phân bổ trước toàn bộ kích thước.
-o preallocation=metadata
và nếu không, bạn cũng nên bỏ qua truncate
bước này. virt-resize
sẽ phát triển các tập tin như thế nào thích hợp.
Nếu bạn đang sử dụng LVM trong VM, cách đơn giản nhất để thực hiện điều này là thêm một đĩa ảo mới vào VM và mở rộng nhóm âm lượng và khối lượng logic vào đó.
Để kiểm tra xem bạn có đang sử dụng LVM chạy không sudo pvs; sudo vgs; sudo lvs
, bạn sẽ nhận được một cái gì đó như thế này:
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
nếu HĐH của VM đang sử dụng LVM. Trong ví dụ trên, VM có vdisk 30Gbyte, được cấu hình bằng LVM với một nhóm âm lượng gọi là vgWWW chứa hai khối logic, một cho trao đổi và một cho mọi thứ khác.
Nếu LV được sử dụng trong VM:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(hoặc đại loại như sudo lvextend --size +8G /dev/vgWWW/root
nếu bạn không muốn phát triển toàn bộ, ví dụ này sẽ thêm 8Gb vào âm lượng)resize2fs /dev/vgWWW/root
Lưu ý: ở trên giả sử tên vg / lv giống như ví dụ của tôi không có khả năng, thay đổi khi thích hợp, nếu VM đã có một ổ đĩa ảo được gọi là tên vdb
mới sẽ là một cái gì đó khác vdc
, v.v.
Lưu ý: resize2fs
sẽ chỉ hoạt động trên hệ thống tập tin ext2, ext3 và ext4. Nếu bạn đang sử dụng một cái gì đó khác, nó sẽ lỗi và không làm gì cả.
Lưu ý: vì bạn đang thay đổi kích thước một hệ thống tệp trực tiếp resize2fs
sẽ không nhắc bạn chạy fsck
trước vì nó sẽ cho một hệ thống tệp chưa được đếm, nó sẽ tiếp tục. Bạn có thể muốn chạy kiểm tra hệ thống tập tin chỉ đọc, không có vấn đề gì trước khi tiếp tục.
Có thể thay đổi kích thước trực tuyến. libvirtd hỗ trợ điều này nguyên bản:
Tìm tên thiết bị khối. Nên là một cái gì đó như "vda"
$ virsh domblklist <libvirtd_vm_name>
Thay đổi kích thước thiết bị ảo:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
Dưới đây là một ví dụ đã được tôi mở rộng vda
đĩa từ 50GB
để 51GB
cho undercloud
VM.
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Bây giờ hãy xem chi tiết của tập tin hình ảnh .qcow2:
[root@gss-rhos-4 ~]# 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
Bây giờ hãy thay đổi kích thước thiết bị khối vda:
[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
Và xác nhận:
[root@gss-rhos-4 ~]# 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@gss-rhos-4 ~]#
Sau đó, bạn có thể sử dụng tập lệnh này bên trong VM để hiển thị các lệnh để thay đổi kích thước các thiết bị khối và fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .
Có khả năng tăng kích thước ổ đĩa VM của bạn mà không cần khởi động lại VM nếu bạn đang sử dụng ổ virtio và LVM.
(Tùy chọn) Tạo phân vùng chính bằng fdisk để lấy / dev / vdb1, sau đó sử dụng kpartx -a / dev / vdb để đọc lại bảng phân vùng
Sử dụng vgextend vg_name / dev / vdb1 (hoặc / dev / vdb nếu bạn không tạo phân vùng)
Bạn đã hoàn tất.
Bằng cách này bạn có thể mở rộng phân vùng bạn muốn:
# 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
Xem thêm ví dụ ở đây .
Một cách khác để làm điều đó
truncate -s +2G vm1.img
thực hiện quét lại đĩa và sau khi bạn có thể thay đổi kích thước lvm của mình.
Nếu bạn có LVM trong máy ảo thì điều này thật dễ dàng và nhanh chóng.
sudo system-config-lvm
vào thiết bị đầu cuối) *.Tôi thấy GUI khá trực quan, nhưng hãy làm theo các bước tiếp theo nếu bạn gặp vấn đề.
Ghi chú! Ít nhất trên GUI LVM của CentOS 6 không được cài đặt theo mặc định, nhưng bạn có thể cài đặt nó với yum install system-config-lvm
.
Thay đổi kích thước hình ảnh:
qemu-img resize vmdisk.img +16G
tăng kích thước hình ảnh lên 16 GB.
Nếu hình ảnh của bạn có GPT (Bảng phân vùng GUID) thì kích thước ổ đĩa được sử dụng trong GPT sẽ khác với kích thước mới, bạn cần sửa nó bằng gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
hoặc với parted
:
parted $MY_DRIVE print Fix
Vì một số lý do, parted
sửa lỗi không hoạt động khi không có tty nào được trình bày (ví dụ như khi cung cấp với Vagrant) vì vậy tôi sử dụng gdisk
.
Tăng kích thước phân vùng để lấp đầy tất cả không gian có sẵn:
MY_PARTITION_GUID=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
i
EOF
)
MY_PARTITION_FIRST_SECTOR=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
i
EOF
)
gdisk $MY_DRIVE <<EOF
d
n
$MY_PARTITION_FIRST_SECTOR
x
a
2
c
$MY_PARTITION_GUID
w
Y
EOF
Phần x a 2 <Enter>
này là tùy chọn và cần thiết nếu bạn đang sử dụng BIOS kế thừa.
MY_PARTITION_GUID=...
và c $MY_PARTITION_GUID
các phần cũng là tùy chọn và chỉ cần thiết nếu bạn sử dụng UUID phân vùng trong /etc/fstab
hoặc ở một nơi khác.
Khởi động lại hoặc đọc lại phân vùng với partx -u $MY_DRIVE
hoặc partprobe
.
Mở rộng phân vùng, ví dụ cho ext2
, ext3
hoặc ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Bạn có thể sử dụng solus vm với gparted gắn kết. Sau khi được sử dụng với gparted, bạn có thể dễ dàng khởi động hệ thống và điều chỉnh không gian. Hãy chắc chắn rằng bạn có bộ ưu tiên khởi động chính xác. Để tham khảo, vui lòng tham khảo các url dưới đây có thể có ích. https://greencloudvps.com/ledgeledridease/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrad-VPS.html