112 lines
No EOL
2.7 KiB
Markdown
112 lines
No EOL
2.7 KiB
Markdown
# Shrinking a Ganeti Instance Disk
|
|
|
|
Thanks to Phil Regnauld for the clues. In this example, we use rpki.dfw.rg.net as the instance name. Of course you will want to change that.
|
|
|
|
## Preparation
|
|
|
|
Shutdown the VM
|
|
|
|
```
|
|
gnt-instance shutdown rpki.dfw.rg.net
|
|
```
|
|
|
|
Make sure the VM is not DRBD mirrored. If it is, then
|
|
|
|
```
|
|
gnt-instance modify -t plain --no-wait-for-sync rpki.dfw.rg.net
|
|
```
|
|
|
|
|
|
## Shrink the partition(s)
|
|
|
|
Use a gparted bootable iso or a Linux live bootable iso to run
|
|
`gparted` to shrink the partitions.
|
|
|
|
|
|
## Backup the instance
|
|
|
|
Make sure the destination node has sufficient space. If not, on the
|
|
destination node, you can
|
|
|
|
```
|
|
lvextend -L +128G /dev/mapper/ganeti-var
|
|
resize2fs /dev/mapper/ganeti-var
|
|
```
|
|
|
|
Then
|
|
|
|
```
|
|
gnt-backup export -n vm3 rpki.dfw.rg.net
|
|
```
|
|
|
|
## Restore into Smaller Space
|
|
|
|
```
|
|
gnt-backup import -n vm0 --src-node=vm3 --disk 0:size=21G -t plain rpki.dfw.rg.net
|
|
```
|
|
|
|
## And you should be good to go
|
|
|
|
|
|
# SKIP THE REST OF THIS!!! The above is the hack you want
|
|
|
|
## Tell Ganeti to Chill
|
|
|
|
First we need to stop ganeti and backup the config file on the master
|
|
|
|
```
|
|
service ganeti stop
|
|
rsync /var/lib/ganeti/config.data /var/lib/ganeti/config.data.ORIG
|
|
```
|
|
|
|
## Actually Shrink the Volume(s)
|
|
|
|
Then we can lvreduce the disk on the node where the instance lives. Note that the size parameter may be either an abusolute new size or the amount to be reduced. Here we do the latter, on the instance's primary node, of course.
|
|
|
|
```
|
|
lvreduce —-size -8GB /dev/ganeti/a5ce213c-d455-4cee-a173-4c3c72d81e68.disk0_data
|
|
```
|
|
|
|
## Tell Ganeti's Config About the Change
|
|
|
|
Now is the grotty hack; we have to change the size in the ganeti config.data. Find the JSON for the file UUID of the disk. In this case, the JSON looked like
|
|
|
|
```
|
|
"params": {}, "uuid": "a70acc51-586b-4a83-9a8c-ff884ef0c5b4", "size": 45056}, {"dev_type": "plain", "logical_id": ["ganeti", "a5ce213c-d455-4cee-a173-4c3c72d81e68.disk0_meta"]
|
|
```
|
|
|
|
Note the size, 45056, which is 45056/1024 = 44G. I wanted to reduce by 8G, so 45056-(8*1024) = 36864
|
|
|
|
```
|
|
"params": {}, "uuid": "a70acc51-586b-4a83-9a8c-ff884ef0c5b4", "size": 36864}, {"dev_type": "plain", "logical_id": ["ganeti", "a5ce213c-d455-4cee-a173-4c3c72d81e68.disk0_meta"]
|
|
```
|
|
|
|
Phil prefers to de-JSON the config to make it easier to see before hacking
|
|
|
|
```
|
|
python -mjson.tool < /var/lib/ganeti/config.data > /tmp/config
|
|
```
|
|
|
|
## Restart Ganeti
|
|
|
|
Restart Ganeti and redistribute the modified configuration
|
|
|
|
```
|
|
service ganeti start
|
|
gnt-cluster redist-conf
|
|
```
|
|
|
|
## Clean Up
|
|
|
|
If the instance was of type drbd, remember to convert it back from plain.
|
|
|
|
```
|
|
gnt-instance modify -t drbd --no-wait-for-sync -n vm2 rpki.dfw.rg.net
|
|
gnt-instance start rpki.dfw.rg.net
|
|
```
|
|
|
|
And Bob's your uncle.
|
|
|
|
---
|
|
|
|
2020.10.03 |