Odpowiedzi:
qemu-img resize vmdisk.img +10G
aby zwiększyć rozmiar obrazu o 10 Gbstart the VM, resize the partitions and LVM structure within it normally
Jak to zrobić? Proszę wyjaśnij to.
Na lepsze lub gorsze, poniższe polecenia będą działać, nawet jeśli docelowy dysk wirtualny zostanie podłączony. Może to być przydatne w środowiskach, w których nie można odmontować dysku (takich jak partycja root), maszyna wirtualna musi pozostać włączona, a właściciel systemu jest gotów podjąć ryzyko uszkodzenia danych . Aby usunąć to ryzyko, musisz najpierw zalogować się do maszyny wirtualnej i odmontować dysk docelowy, co nie zawsze jest możliwe.
Wykonaj następujące czynności z hiperwizora KVM.
Zwiększ rozmiar samego pliku obrazu dysku (określ kwotę, którą chcesz zwiększyć):
qemu-img resize <my_vm>.img +10G
Uzyskaj nazwę urządzenia virtio za pośrednictwem powłoki libvirt ( drive-virtio-disk0
w tym przykładzie):
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]
Wyślij sygnał do sterownika virtio, aby wykrył nowy rozmiar (określ całkowitą nową pojemność):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Następnie zaloguj się do maszyny wirtualnej. Uruchomiony dmesg
powinien zgłosić, że dysk virtio wykrył zmianę pojemności. W tym momencie przejdź do zmiany rozmiaru partycji i struktury LVM w razie potrzeby.
Te pytania o awarię serwera są podobne, ale bardziej szczegółowe, zmiana rozmiaru dysku online KVM? & Centos Xen zmienia rozmiar partycji DomU i grupy woluminów . Pierwszy pyta o to, jak zwiększyć gościa KVM, gdy jest on online, natomiast drugi dotyczy XEN przy użyciu LVM. Pytam, jak to zrobić, gdy KVM jest offline.
UWAGA: Ten link był przydatny dla METODY nr 1 i pokazuje, jak osiągnąć zwiększenie przestrzeni dyskowej KVM (na podstawie ext3), HOWTO: Zmiana rozmiaru obrazu maszyny wirtualnej KVM .
Jedną z rzeczy, o których należy pamiętać w przypadku gości KVM, jest to, że partycje, których używają w środku, mogą wpływać na metodę, której można użyć do zwiększenia ich miejsca na dysku.
METODA 1: Partycje oparte są na ext2 / ext3 / ext4
Nakrętki tej metody są następujące:
# 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
Teraz, mając w ręku większy plik mykvm.img, uruchom partycję gpart i rozszerz istniejącą partycję na nowo dodane miejsce na dysku. Ten ostatni krok zasadniczo rozszerza partycję systemu operacyjnego, aby mogła ona wykorzystać dodatkową przestrzeń.
METODA 2: Partycje są oparte na LVM
Oto kroki, które z grubsza wykonałem, aby zmienić rozmiar gościa KVM, który używał LVM wewnętrznie.
uruchom fdisk wewnątrz VM i usuń i ponownie utwórz partycję 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.
%
Uruchom ponownie maszynę wirtualną
Zmień rozmiar woluminu fizycznego 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
...
Zmień rozmiar woluminu logicznego LVM
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Rozwijaj system plików
% 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.
Powyższy przykład jest moim przykładem, ale podążyłem za krokami na tej stronie
virt-manager
i używałem metod # 1 i # 2 intensywnie, zanim przeprowadziłem migrację naszych serwerów KVM do nowszej wersji KVM (CentOS 5 -> CentOS 6). Teraz również używam tej qemu-img resize
metody.
lvextend /dev/Volgroup/lvname /dev/vda2
(wszystko w jednym wierszu, gdzie / dev / vda2 będzie twoim woluminem fizycznym). Bez innych opcji użyje maksymalnego rozmiaru w tej grupie woluminów.
Zmień rozmiar i rozszerz wewnętrzne partycje w jednym kroku
Miałem hosta Ubuntu z obrazem pliku gościa qcow2 i chciałem zmienić rozmiar dysku i rozwinąć odpowiednie partycje w jednym kroku. Wymaga to skonfigurowania narzędzi systemu plików gościa libvirt, ale i tak warto je mieć.
Inspiracja tutaj: http://libguestfs.org/virt-resize.1.html
Kluczowe polecenie tutaj to: virt-resize
Przygotowanie:
* 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
Teraz wykonaj następujące czynności:
1) zamknij gościa:
2) Sprawdź bieżące rozmiary i wyświetl nazwę partycji, którą chcesz rozwinąć za pomocą narzędzia libvirt:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3) Utwórz nowy dysk wyjściowy (40G):
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4) Skopiuj stary do nowego, a następnie rozwiń odpowiednią partycję (zakładając, że twoja partycja dysku z kroku 2 to / dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5) Zmień nazwę pliku indisk na kopię zapasową, zmień nazwę przestarzałego na indisk (lub zmodyfikuj XML gościa)
6) Uruchom ponownie gościa i dokładnie przetestuj nowy plik dysku przed usunięciem oryginalnego pliku
7) Zysk!
-o preallocation=metadata
tworzy rzadki plik. Dzięki tej opcji wstępnie przydziela cały rozmiar.
-o preallocation=metadata
a jeśli nie, powinieneś pominąć truncate
krok. virt-resize
i tak powiększy plik.
Jeśli używasz LVM w maszynie wirtualnej, najprostszym sposobem na to jest dodanie nowego dysku wirtualnego do maszyny wirtualnej i rozwinięcie grupy woluminów i woluminów logicznych.
Aby sprawdzić, czy używasz LVM run sudo pvs; sudo vgs; sudo lvs
, otrzymasz coś takiego:
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
jeśli system operacyjny maszyny wirtualnej korzysta z LVM. W powyższym przykładzie maszyna wirtualna ma dysk VDisk o pojemności 30 GB, skonfigurowany przy użyciu LVM z jedną grupą woluminów o nazwie vgWWW zawierającą dwa woluminy logiczne, jeden do wymiany i jeden do wszystkiego innego.
Jeśli LV jest używany na maszynie wirtualnej:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(lub coś takiego, sudo lvextend --size +8G /dev/vgWWW/root
jeśli nie chcesz go powiększać do końca, ten przykład dodałby 8 GB do woluminu)resize2fs /dev/vgWWW/root
Uwaga: powyższe zakłada, że nazwy vg / lv są takie same jak w moim przykładzie, co jest mało prawdopodobne, zmień odpowiednio, również jeśli maszyna wirtualna miała już dysk wirtualny o nazwie vdb
nowy, będzie to coś innego ( vdc
i tak dalej)
Uwaga: resize2fs
działa tylko w systemie plików ext2, ext3 i ext4. Jeśli używasz czegoś innego, spowoduje to błąd i nic nie zrobisz.
Uwaga: ponieważ podczas zmiany rozmiaru systemu plików na żywo resize2fs
nie pojawi się monit o uruchomienie fsck
go, tak jak w przypadku odmontowanego systemu plików, po prostu pójdzie dalej. Przed kontynuowaniem może być konieczne sprawdzenie systemu plików tylko do odczytu. Nie ma żadnych problemów.
Można zmienić rozmiar online. libvirtd obsługuje to natywnie:
Znajdź nazwę urządzenia blokowego. Powinno być coś w stylu „vda”
$ virsh domblklist <libvirtd_vm_name>
Zmień rozmiar urządzenia wirtualnego:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
Oto przykład gdybym rozszerzyć vda
dysk od 50GB
celu 51GB
dla undercloud
VM.
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Teraz spójrz na szczegóły pliku obrazu .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
Teraz zmieńmy rozmiar urządzenia blokującego VDA:
[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
I potwierdź:
[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 ~]#
Następnie możesz użyć tego skryptu w maszynie wirtualnej, aby wyświetlić polecenia zmiany rozmiaru urządzeń blokowych i fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .
Istnieje możliwość zwiększenia rozmiaru dysku maszyny wirtualnej bez ponownego uruchamiania maszyny wirtualnej, jeśli używasz napędu virtio i LVM.
(Opcjonalnie) Utwórz partycję podstawową za pomocą fdisk, aby uzyskać / dev / vdb1, a następnie użyj kpartx -a / dev / vdb, aby ponownie odczytać tablicę partycji
Użyj vgextend vg_name / dev / vdb1 (lub / dev / vdb, jeśli nie utworzyłeś partycji)
Jesteś skończony.
W ten sposób możesz rozwinąć żądaną partycję:
# 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
Zobacz więcej przykładów tutaj .
Kolejny sposób to zrobić
truncate -s +2G vm1.img
wejdź w make res dysku i po tym, jak możesz zmienić rozmiar lvm.
Jeśli masz LVM na maszynie wirtualnej, jest to szalenie łatwe i szybkie.
sudo system-config-lvm
terminal) *.Znalazłem GUI dość intuicyjny, ale jeśli masz problemy, wykonaj kolejne kroki.
Uwaga! Przynajmniej GUI CentOS 6 LVM nie jest domyślnie instalowany, ale można go zainstalować za pomocą yum install system-config-lvm
.
Zmiana rozmiaru obrazu:
qemu-img resize vmdisk.img +16G
zwiększa rozmiar obrazu o 16 GB.
Jeśli twój obraz ma GPT (tabelę partycji GUID), to rozmiar dysku użyty w GPT będzie się różnić od nowego rozmiaru, musisz to naprawić za pomocą gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
lub z parted
:
parted $MY_DRIVE print Fix
Z jakiegoś powodu parted
poprawka nie działa, gdy nie jest prezentowane tty (na przykład podczas udostępniania z Vagrant), więc używam gdisk
.
Zwiększ rozmiar partycji, aby wypełnić całą dostępną przestrzeń:
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
Ta x a 2 <Enter>
część jest opcjonalna i potrzebna, jeśli używasz starszego systemu BIOS.
MY_PARTITION_GUID=...
a c $MY_PARTITION_GUID
części są również opcjonalne i potrzebne tylko, jeśli używasz UUID partycji w /etc/fstab
lub gdzie indziej.
Uruchom ponownie lub ponownie przeczytaj partycje za pomocą partx -u $MY_DRIVE
lub partprobe
.
Rozszerzyć partycji, na przykład ext2
, ext3
lub ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Możesz użyć Solus VM z zamontowanym gparted. Po użyciu z gparted możesz łatwo uruchomić system i dostosować przestrzeń. Upewnij się, że masz ustawiony prawidłowy priorytet rozruchu. Jako odniesienie zapoznaj się z poniższym adresem URL, który może się przydać. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html