meta data for this page
Virtualbox
Issues
Discard machine "starting" state
VBoxManage list vms VBoxManage discardstate aab57b2d-566b-4d63-bca1-2a8ae74cd213 VBoxManage: error: The machine '...' is already locked for a session (or being unlocked) VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee nsISupports VBoxManage: error: Context: "LockMachine(a->session, LockType_Write)" at line 1247 of file VBoxManageMisc.cpp rm /tmp/.vbox-john-ipc/lock
Edit .vbox file and remove aborted=“true”
.
Error -610 in supR3HardenedMainInitRuntime!
Windows 10 guest - RDP login freeze
Introduced in Windows 10 version 1903 Solution: deativate the WDDM-Display Driver by group policy.
Local Computer Policy -> Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Service -> Remote Desktop Session Host -> Remote Session Environment -> Use WDDM graphics display driver for Remote Desktop Connections
Tips & Tricks
Virtualization in VBox
TAG: nested virtualization VBox doesn't support nester virtualization.
Boot from USB
There is no option to boot from USB. You need to use helper bootloader. Download plop and extract ISO from zip.
optimize for Intel
VBoxManage modifyvm Windows --vtxvpid on --largepages on
Autostarting
https://askubuntu.com/questions/57220/start-vboxheadless-vm-at-startup
$ VBoxManage modifyvm <vmname> --autostart-enabled on $ VBoxManage modifyvm <vmname> --autostop-type acpishutdown
Systemd based way
Classic way
There is a script /usr/lib/virtualbox/vboxautostart-service.sh
which is called by /lib/systemd/system/vboxautostart-service.service
Script is calling binary VBoxAutostart
.
Script is sourcing following configration files:
/etc/vbox/vbox.cfg
/etc/default/virtualbox
And using following variables:
$VBOXAUTOSTART_DB
$VBOXAUTOSTART_CONFIG
systemctl enable vboxautostart-service.service
Single service per VM
- etc/systemd/system/vboxvmservice@.service
[Unit] Description=VBox Virtual Machine %i Service Requires=systemd-modules-load.service After=systemd-modules-load.service [Service] User=user <-- modify Group=vboxusers ExecStart=/usr/bin/VBoxHeadless -s %i ExecStop=/usr/bin/VBoxManage controlvm %i savestate TimeoutSec=5min TimeoutStopSec=5min [Install] WantedBy=multi-user.target
systemctl enable vboxvmservice@vm_name.service systemctl start vboxvmservice@vm_name.service
Unlock "Guru Meditation"
Find PID of VirtualBox process and kill it.
Compacting VDIs
On guest system fill all empty space with zeros:
- Windows guest:
- use “sdelete -z” (download from: SDelete). Make sure you are using sdelete version 1.6 or 2.02. Version 2 is buggy and can stuck at 100%.
- zero swap file at shutdown. Modify windows reg:
- zeroswap.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "ClearPageFileAtShutdown"=dword:00000001
- Start –> secpol.msc –> Local Policies –> Security Options
- “Shutdown: Clear virtual memory pagefile entry”
- Linux guest:
dd if=/dev/zero of=/bigfile; sync; rm -f /bigfile
Shutdown guest system and compact .vdi image:
- Windows:
c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd --compact mydisk.vdi
- Linux:
VBoxManage modifyhd --compact mydisk.vdi
Resizing VDIs
To resize disc image (size is in MB!):
- Windows Host:
c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd --resize 15000 mydisk.vdi
- Linux Host:
vboxmanage modifyhd hdd_c.vdi --resize 20000
Resizing VDIs with snapshot is tricky:
You can resize a VM which has snapshots, but you must resize the right thing.
Resizing the first snapshot (more accurately the base image) only affects that one. It doesn't magically change anything else.
So what you need to do is to identify the diff image which is associated with “Current State”, i.e. what is attached to the VM. This image needs to be resized.
To resize all snapshoots from Linux:
for x in Snapshots/*.vdi; do vboxmanage modifyhd $x --resize 20000; done
Enable SSD and trim
When TRIM is issued to vdi disc, disc size is reduced. It is very slow but it seems to be only one method to compact snapshots' VDIs.
Enabling from commandline:
VBoxManage storageattach "Debian clean" --storagectl "SATA" --port 0 --discard on --nonrotational on VBoxManage storageattach "Debian clean" --storagectl "SATA" --port 1 --discard on --nonrotational on
or manually in config file (but can be overwritten by Virtualbox manager):
- machine.vbox
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="0" device="0"> <Image uuid="{fdd4f1a4-36ff-4944-aee8-e35b5503e87c}"/> </AttachedDevice> <AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="0" device="1"> <Image uuid="{95baed2d-0aa7-437d-9bff-534af4036ce3}"/> </AttachedDevice>
NOTE: order of XML attribs are importand. Add discard=“true”
after “nonrotational=“true”''
Additionally increase SATA timeout:
echo -n 180 > /sys/block/sda/device/timeout echo -n 180 > /sys/block/sdb/device/timeout echo -n 180 > /sys/block/sdc/device/timeout
Disabling TRIM support from commandline:
VBoxManage storageattach "Windows10" --storagectl "SATA" --port 0 --discard off
NOTE: Enabling TRIM support will kill your rotational drive :). Every data delete will cause VDI image to trim to its data size (like compacting) and it is very slow!
To disable TRIM in Windows10, run administator shell (WIN+X) and:
fsutil behavior query disabledeletenotify fsutil behavior set DisableDeleteNotify 1
Mount shared folder
- /etc/fstab
sharedfolder /mnt/myfolder vboxsf noauto,uid=1000,gid=1000 0 0
change UUID of VDI
VBoxManage internalcommands sethduuid virtualdisk.vdi
convert RAW image to VDI
Convert raw disc image (like iso,bin, raw) into vdi:
# from RAW to VDI VBoxManage convertdd bootable.bin testdisc.vdi # From VDI to RAW VBoxManage convertdd bootable.vdi testdisc.bin
draft
Add your user to following groups:
- disk
- vboxuser
To access real hard drive from VirtualBox, it is needed to crate raw VMDK:
VBoxManage internalcommands createrawvmdk -filename ./raw_dev_sdc.vmdk -rawdisk /dev/sdc
It is possible to emulate SSD drives and emulate TRIM support:
VBoxManage storageattach My_Linux_VM --storagectl "SATA" --port 3 --discard on --nonrotational on --type hdd VBoxManage modifyhd raw_dev_sdc.vmdk settype writethrough
REMARK: Enabling virtual disc to be detected as SSD disc has nothing to real SSD installed in host system. With TRIM support enabled the dynamic VDI file is shrink when TRIM command is issued to controller.
Windows XP
change IDE to AHCI
First install drivers. Do not touch existing IDE controllers.Add new AHCI controller with some temporary disc.
- Start Windows.
- Download Intel ICH8 driver (INF Update Utility - it work with driver 8.9.0.1023 from Intel-Sata-Matrix-Manager-IATA89ENU.exe) and install it.
- Shutdown Windows
- Edit virtual machine and detach VDI from IDE controller and attach to SATA controller.
- Start Windows from AHCI
change HAL to multiprocessor
rundll32 syssetup,SetupInfObjectInstallAction ACPIAPIC_MP_HAL 128 %windir%\inf\hal.inf
move real machine into vbox
On Windows XP - create new hardware profile:
- Unordered List ItemStart–>Control Panel–>System
- on hardware tab choose “Hardware Profiles”
- Copy current profile to new one e.g. Hardware
- Rename current profile to e.g. VirtualBox
On Windows XP - change IDE controller to generic one:
- Device Manager–>IDE Controler–>Update Driver
- Select Standard Dual channel PCI IDE controller
NTFS compression
VDI was compacted. VDI files with +c attribute (BTRFS compression). Tests on C:\WINDOWS folder. Windows shows 2,46 GB data and 1.65GB on disc.
- VDI size with C attribute: 9.0 GB
- BTRFS subvolume data 26.96GB
- VDI size after removing C attribute: 10.0 GB
- VDI size after zeroing free space and compacting: 9.9
- BTRFS subvolume data 27,80GB
- BTRFS subvolume data 26,97 GB - after recompression with ZLIB
2nd test:
- NTFS Compressed folder 5,86 GB / 2,72 GB, VDI = 9,9 GB, BTRFS = 26.97 GB
- NTFS Decompressed folder 5,86 GB, VDI = 11 GB, BTRFS = 32,30 GB
- NTFS Decompressed folder 5,86 GB, VDI = 9.3 GB, BTRFS = 32,31 GB + VDI compacted
- NTFS Decompressed folder 5,86 GB, VDI = 9.3 GB, BTRFS = 32,26 GB + BTRFS ZLIB recompressed
- NTFS Compressed folder 2.72 GB, VDI = 9.3 GB, BTRFS = 35,49 GB + NTFS compression
- NTFS Compressed folder 2.72 GB, VDI = 9.3 GB, BTRFS = 38,68 GB + NTFS zero free space
- NTFS Compressed folder 2.72 GB, VDI = 9.3 GB, BTRFS = 32,29 GB + BTRFS ZLIB recompressed
- NTFS Compressed folder 2.72 GB, VDI = 9.3 GB, BTRFS = 27,12 GB + BTRFS ZLIB recompressed mount compress-force=zlib
- NTFS Uncompressed folder 5.86 GB, VDI = 11 GB, BTRFS = 26,47 GB + BTRFS ZLIB recompressed mount compress-force=zlib
3rd test:
- Uncompressed compacted windows, 6.0 GB, BTRFS recompressed 32,09 GB, previously copied from 2nd disc with compress-force
- Compressed compacted windows, 6.0 GB, BTRFS recompressed 32,65 GB, mount compress-force=zlib
4rd test:
- 39GB usage - Windows C drive compressed (C attribute)
- 42GB usage - Windows C drive uncompressed (no C attribute)
- 33GB usage - Windows C drive uncompressed + vdi file manually compressed by BTRFS (forced by btrfs defrag)
Conclustions
Better is to use BTRFS compression - periodically recompress .vdi file.
- (+) NTFS compression is not so bad. It is still a bit worse than BTRFS ZLIB.
- (-) BTRFS compression only works for whole data if mounted with compress-force=zlib.
- (+) VDI file on BTRFS can be compressed using BTRFS compression when machine is online.
- (-) NTFS compression is using guest CPU. Where more power is often available at host (many BTRFS threads)