This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
computing:virtmanagerhell [2021/10/29 02:33] – oemb1905 | computing:virtmanagerhell [2023/01/15 17:47] (current) – oemb1905 | ||
---|---|---|---|
Line 7: | Line 7: | ||
------------------------------------------- | ------------------------------------------- | ||
- | Start defualt | + | To make a VM from the command line, do the following. Note that this recipe assumes you have already created your virtual switch, br0. It also presumes you have already created your virtual disk, and if you have not, simply run '' |
- | | + | |
- | Remove bridge | + | sudo virt-install --name=new.img \ |
- | | + | |
- | | + | |
+ | --vcpu=1 \ | ||
+ | --ram=2048 \ | ||
+ | --disk path=/ | ||
+ | --graphics spice \ | ||
+ | --location=/ | ||
+ | --network bridge:br0 | ||
- | List all | + | To clone an existing image, do the following: |
- | sudo virsh net-list --all | + | |
+ | virt-clone \ | ||
+ | --original=clean \ | ||
+ | --name=sequoia \ | ||
+ | --file=/ | ||
+ | If you have a legacy image that needs to be larger, then install a few tools and the proceed to expand the virtual hard disk as follows: | ||
- | Simple bridge mode for virt-manager | + | apt install qemu-img kpartx |
+ | qemu-img resize debian10.img +50G | ||
+ | |||
+ | After expanding the virtual hard disk, open gparted in X passthrough / command line and expand the existing partition into as much of the the new space as you prefer. And to rename a VM (domain), do the following: | ||
+ | |||
+ | virsh shutdown < | ||
+ | virsh domrename < | ||
+ | |||
+ | To delete a domain, virt-manager uses the undefine | ||
- | sudo nano /etc/network/interfaces | + | |
+ | |||
+ | If you need to force stop a machine, virt-manager uses the destroy command, as follows: | ||
+ | |||
+ | virsh destroy guest1 | ||
+ | |||
+ | I prefer the raw format (.img) but if I change my mind later, perhaps because I want snapshots, then I can easily shutdown the machine and convert the image as follows. If I change my mind, I can also go in reverse back to raw. | ||
+ | |||
+ | qemu-img convert -p -f raw -O qcow2 guest1.img guest1.qcow2 | ||
+ | qemu-img convert -p -f qcow2 -O raw guest1.qcow2 guest1.raw | ||
+ | |||
+ | If you do end up using this, then you will need to edit the virtual machine' | ||
+ | |||
+ | virsh edit guest1 | ||
+ | <driver name=' | ||
+ | <source file='/ | ||
+ | |||
+ | Another essential tool is the ability to create snapshots and, when necessary, revert to them. Here are the commands to create snapshot1 and then later revert to that specific snapshot. | ||
+ | |||
+ | virsh snapshot-create-as guest1 snapshot1 --description "first snapshot 11-13-22" | ||
+ | virsh snapshot-revert guest1 snapshot1 | ||
+ | |||
+ | If you don't care about naming the snapshot or customizing the description, | ||
+ | |||
+ | virsh snapshot-create guest1 | ||
+ | |||
+ | To create an external snapshot, append the following arguments: | ||
+ | |||
+ | virsh snapshot-create-as guest1 snapshot1 --description "first snapshot 11-13-22" | ||
+ | |||
+ | If you want to revert to the latest snapshot, then execute this: | ||
+ | |||
+ | virsh snapshot-revert guest1 --current | ||
+ | |||
+ | If you need to delete a particular snapshot, or delete all children of a snapshot, execute: | ||
+ | |||
+ | virsh snapshot-delete guest1 snapshot1 | ||
+ | virsh snapshot-delete guest1 --current --children-only | ||
+ | |||
+ | |||
+ | To list all snapshots for a particular guestOS, execute this: | ||
+ | |||
+ | virsh snapshot-list guest1 | ||
+ | |||
+ | To get information about the snapshot, these commands help: | ||
+ | |||
+ | virsh snapshot-info guest1 snapshot | ||
+ | virsh snapshot-dumpxml guest1 snapshot1 | ||
+ | |||
+ | If you need to make a live backup, do the following (Note: make sure that '' | ||
+ | |||
+ | |||
+ | virsh domfsfreeze guest1.qcow2 | ||
+ | qemu-img create -f qcow2 -b guest1.qcow2 snapshot.qcow2 | ||
+ | virsh domfsthaw guest1.qcow2 | ||
+ | |||
+ | |||
+ | At times you may need to resize or gather information about a particular virtual disk. If they are in the qcow2 format, gather information as follows: | ||
+ | |||
+ | qemu-img info disk.qcow2 | ||
+ | |||
+ | To regain space that is being used needlessly, you can sparsify the qcow2 disk. Note that you must install virt-sparsify separately with '' | ||
+ | |||
+ | virt-sparsify --in-place disk.qcow2 | ||
+ | |||
+ | Most importantly, | ||
+ | |||
+ | cp -ar --sparse=always disk.qcow2 disk.bk.qcow2 | ||
+ | qemu-img resize disk.qcow2 1000G | ||
+ | qemu-img resize disk.qcow2 +10G | ||
+ | |||
+ | Okay, so another big issue with qcow2 images is them growing over time from writes/ | ||
+ | |||
+ | sudo systemctl enable fstrim.timer | ||
+ | sudo systemctl start fstrim.timer | ||
+ | |||
+ | You can also manually run fstrim and then power down the qcow2 image and convert it. You may optionally use compression to save more space, but it takes very long. | ||
+ | |||
+ | fstrim -v / | ||
+ | qemu-img convert -O qcow2 guest.qcow2 guest-trimmed.qcow2 | ||
+ | qemu-img convert -O qcow2 -c guest.qcow2 guest-trimmed.qcow2 | ||
+ | |||
+ | To test trimming functionality, | ||
+ | |||
+ | dd if=/ | ||
+ | |||
+ | To create a backup volume inside a guest you create the volume, attach it, and then shell into the guest and format, mount, and create an fstab entry. First, on the hostOS: | ||
+ | |||
+ | cd / | ||
+ | qemu-img create -f qcow2 vm1-backup.qcow2 32G | ||
+ | virsh attach-disk guestOS.qcow2 \ | ||
+ | --source / | ||
+ | --target vdb \ | ||
+ | --persistent | ||
+ | |||
+ | Then, on the guestOS: | ||
+ | |||
+ | mkdir / | ||
+ | mkfs.ext4 /dev/vdb | ||
+ | mount -t auto /dev/vdb / | ||
+ | | ||
+ | /dev/vdb /mnt/backup ext4 defaults, 0 0 | ||
- | auto br1 | + | The rest from here on out is my attempt at resizing |
- | iface br1 inet dhcp | + | |
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | Resize | + | |
| | ||
sudo apt install libguestfs-tools | sudo apt install libguestfs-tools | ||
Line 59: | Line 171: | ||
mv / | mv / | ||
- | Reboot the machine once this is completed. | + | Made yet another attempt to do by command line in 2022. Install packages required for resizing virtual hard disks and for listing partitions inside virtual hard disks. |
+ | |||
+ | apt install qemu-img kpartx | ||
+ | |||
+ | Add 50G of size to the emulated physical hard disk. This is not to be confused with adding space to, or extending, the partition inside it. | ||
- | | + | |
- | ssh -X user@xx.xx.xx.xx | + | |
- | virt-manager | + | |
| | ||
- | When the virt-manager window opens, select the virtual machine | + | Mount the image file in the present directory, and show all of its mappings. |
- | | + | |
| | ||
- | Need the machine | + | Now, it is time to extend |
- | | + | |
- | | + | |
+ | You will get output like this: | ||
- | Need to turn it off? | + | Model: Unknown (unknown) |
+ | Disk / | ||
+ | Sector size (logical/ | ||
+ | Partition Table: loop | ||
+ | Disk Flags: | ||
+ | Number | ||
+ | | ||
+ | |||
+ | Remove the appropriate mapping. In my case, I am extending the boot volume of a virtual machine, so it was entry 1. | ||
- | | + | |
| | ||
- | Create bridge interface and bind to host ethernet within libvirt / virsh: | + | Extend the partition from the start of the mapping you removed |
- | | + | |
- | sudo ip link set enp7s0f0 master vmbr0 | + | |
- | sudo ip a a 8.18.76.163/32 dev vmbr0 brd 8.18.76.255 | + | |
- | sudo route add default gw 8.18.76.1 | + | |
| | ||
- | + | Verify the new mapping. | |
- | --- //[[netcmnd@jonathanhaack.com|oemb1905]] | + | |
+ | parted /dev/loopXX print | ||
+ | |||
+ | Run fsck before resizing the file system. You here appending " | ||
+ | |||
+ | e2fsck -f / | ||
+ | |||
+ | Extend the file system inside the partition to the entirety of the partition table. | ||
+ | |||
+ | resize2fs / | ||
+ | |||
+ | Unmount the image | ||
+ | |||
+ | kpartx -d debian10.img | ||
+ | |||
+ | --- //[[jonathan@haacksnetworking.org|oemb1905]] |