VirtualBox: ghid complet de instalare și configurare a unui VM pe Linux

Cuprins

VirtualBox: ghid complet de instalare și configurare a unui VM pe Linux

Dacă ai ajuns pe această pagină, cel mai probabil ai întâlnit cel puțin una din situațiile clasice: tastatura nu funcționează în VM, rezoluția rămâne blocată la 800×600, clipboard-ul nu se sincronizează cu gazda sau folderele partajate nu apar nicăieri. Toate acestea au o rădăcină comună - lipsa configurării corecte, fie a VirtualBox-ului pe gazda (host), fie a Guest Additions în mașina virtuală (guest). Acest ghid acoperă tot procesul de la zero, pentru principalele distribuții Linux, și integrează informațiile din documentația oficială Oracle și ArchWiki.

1. Ce este VirtualBox și cum funcționează pe Linux

VirtualBox este un hypervisor de tip 2 (rulează deasupra sistemului de operare existent), dezvoltat de Oracle. Vine cu o interfață grafică Qt, dar și cu unelte în linie de comandă - VBoxManage, VBoxSDL și VBoxHeadless - pentru gestionarea și rularea VM-urilor fără GUI, util pe servere sau în automatizări.

Pe Linux, integrarea cu kernel-ul se face prin câteva module care trebuie încărcate pe sistemul gazdă:

  • vboxdrv - modulul principal, obligatoriu; fără el nicio mașină virtuală nu pornește
  • vboxnetflt - necesar pentru rețea în mod bridged sau host-only
  • vboxnetadp - necesar pentru crearea interfețelor de rețea virtuale în setările globale VirtualBox

Dacă aceste module nu sunt încărcate, VirtualBox Manager poate porni, dar orice VM va eșua la start cu mesajul WARNING: The vboxdrv kernel module is not loaded.

2. Instalarea VirtualBox pe gazda Linux

Ubuntu / Debian / Linux Mint / Pop!_OS

sudo apt update
sudo apt install -y virtualbox virtualbox-dkms virtualbox-ext-pack

Pe Ubuntu 22.04+ și Debian 12, versiunea din repozitorii oficiale poate fi cu câteva versiuni în urmă față de cea de pe site-ul Oracle. Dacă vrei ultima versiune stabilă:

# Adaugă repozitoriul Oracle
wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmor -o /usr/share/keyrings/oracle-virtualbox.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox.gpg] https://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt update
sudo apt install -y virtualbox-7.1

Fedora / RHEL / CentOS Stream / AlmaLinux / Rocky Linux

sudo dnf install -y kernel-devel kernel-headers gcc make perl
sudo dnf config-manager --add-repo https://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo
sudo dnf install -y VirtualBox-7.1

openSUSE / SUSE Linux Enterprise

sudo zypper install virtualbox virtualbox-host-source
sudo /sbin/rcvboxdrv setup

Arch Linux / Manjaro / EndeavourOS

Pe Arch, alegerea pachetului de module depinde de kernel-ul instalat. Instalează întotdeauna și virtualbox-host-dkms pentru a beneficia de recompilare automată la actualizări de kernel:

sudo pacman -S virtualbox virtualbox-host-modules-arch

sudo pacman -S virtualbox virtualbox-host-dkms

pamac install virtualbox $(pacman -Qsq "^linux" | grep "^linux[0-9]*[-rt]*$" | awk '{print $1"-virtualbox-host-modules"}' ORS=' ')

Este recomandat să instalezi și virtualbox-guest-iso pe gazda Arch - pune la dispoziție imaginea ISO cu Guest Additions la /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso, gata de montat în orice VM guest:

sudo pacman -S virtualbox-guest-iso

Gentoo

echo "app-emulation/virtualbox" >> /etc/portage/package.accept_keywords
emerge --ask app-emulation/virtualbox

3. Încărcarea modulelor kernel

virtualbox-host-dkms folosește systemd-modules-load.service pentru a încărca modulele automat la boot. Lista modulelor se găsește în /usr/lib/modules-load.d/virtualbox-host-dkms.conf. Dacă nu vrei reboot, încarcă modulele manual:

sudo modprobe vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt
 
# Pe Arch, există un script dedicat:
sudo vboxreload

Dacă nu dorești încărcarea automată la boot, suprascrie configurația implicită cu un fișier gol:

sudo touch /etc/modules-load.d/virtualbox-host-dkms.conf
# sau
sudo ln -s /dev/null /etc/modules-load.d/virtualbox-host-dkms.conf

Dacă VirtualBox sau kernel-ul sunt actualizate în timp ce modulele sunt deja încărcate, trebuie să le reîncarci manual cu sudo vboxreload (Arch) sau sudo /sbin/rcvboxdrv setup (Debian/openSUSE).

4. Adăugarea utilizatorului în grupurile necesare

Un pas pe care mulți îl uită - fără el USB-ul și folderele partajate nu funcționează:

sudo usermod -aG vboxusers $USER

Modificarea grupului devine efectivă abia la următoarea autentificare. În sesiunea curentă poți folosi newgrp vboxusers pentru a o activa imediat.

5. Secure Boot și module nesemnate

Dacă distribuția ta are Secure Boot activ (situație frecventă pe laptopuri cu Ubuntu, Fedora sau openSUSE preinstalate), modulele vbox vor fi refuzate la încărcare cu eroarea Failed to insert 'vboxdrv': Required key not available.

Opțiunea 1 - dezactivează Secure Boot din UEFI/BIOS (mai simplu, recomandat pentru uz personal).

Opțiunea 2 - semnează modulele cu o cheie proprie. Dacă folosești un kernel cu CONFIG_MODULE_SIG_FORCE, rulează ca root:

find "/lib/modules/$(uname -r)/" \
  '(' -name 'vboxdrv.ko*' -o -name 'vboxnetadp.ko*' -o -name 'vboxnetflt.ko*' ')' \
  -exec /lib/modules/$(uname -r)/build/scripts/sign-file sha256 \
  /lib/modules/$(uname -r)/build/certs/signing_key.pem \
  /lib/modules/$(uname -r)/build/certs/signing_key.x509 {} ';'

Dacă fișierul signing_key.pem nu există în directorul certs, generează-l manual. Creează un fișier x509.genkey:

x509.genkey
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
 
[ req_distinguished_name ]
CN = Modules
 
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

Generează cheile și înregistrează-le cu MOK:

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 \
  -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
sudo cp signing_key.x509 signing_key.pem /lib/modules/$(uname -r)/build/certs/
sudo mokutil --import signing_key.x509

Algoritmul de hash nu trebuie să corespundă celui configurat în kernel, dar trebuie să fie compilat în kernel.

6. Extension Pack

Extension Pack adaugă suport pentru USB 2.0/3.0, RDP, disk encryption și NVMe. Pe Arch este disponibil virtualbox-ext-oracle din AUR, sau poate fi instalat manual:

# Descarcă de pe https://www.virtualbox.org/wiki/Downloads, apoi:
sudo VBoxManage extpack install --replace Oracle_VirtualBox_Extension_Pack-7.1.8.vbox-extpack
 
# Sau fără Polkit, direct ca root:
sudo vboxmanage extpack install /path/to/Oracle_VirtualBox_Extension_Pack.vbox-extpack

Alternativă open source pentru RDP: pachetul virtualbox-ext-vnc.

7. Wayland - captură tastatură

Pe sisteme cu Wayland (ex. GNOME cu GDM), există o restricție de securitate care împiedică VirtualBox să captureze tot input-ul de tastatură. Dacă vrei să trimiți shortcut-uri de window manager către guest, adaugă VirtualBox pe lista albă:

# Verifică lista actuală
gsettings get org.gnome.mutter.wayland xwayland-grab-access-rules
 
# Adaugă VirtualBox (păstrează eventualele aplicații deja în listă)
gsettings set org.gnome.mutter.wayland xwayland-grab-access-rules "['VirtualBox Machine']"

Dacă VirtualBox nu pornește deloc pe Wayland și dai de un Segmentation fault, forțează X11:

QT_QPA_PLATFORM=xcb VirtualBox

Sau adaugă în fișierul .desktop al aplicației: Exec=env QT_QPA_PLATFORM=xcb VirtualBox.

8. Crearea unei mașini virtuale

Prin interfața grafică

  1. Deschide VirtualBox și apasă New
  2. Introdu un nume, selectează tipul (Linux, Windows etc.) și versiunea
  3. Alocă RAM - recomandat minimum 2 GB pentru orice distribuție cu desktop grafic; 4 GB dacă poți
  4. Creează un disc virtual: VDI, alocat dinamic, minimum 20 GB (preferabil 40+ GB)
  5. Ajustează setările înainte de pornire:
    • System → Processor: acordă 2+ nuclee
    • Display → Video Memory: setează la 128 MB și activează VMSVGA sau VBoxSVGA (nu VBoxVGA dacă vrei rezoluție dinamică)
    • Display → 3D Acceleration: activează dacă distribuția suportă (necesită Guest Additions instalate ulterior)
    • Storage: atașează ISO-ul distribuției ca unitate optică virtuală
    • Network: NAT este suficient pentru acces la internet din VM; pentru acces la VM din rețeaua locală folosește Bridged

Notă Btrfs: dacă stochezi discurile virtuale pe un filesystem Btrfs, dezactivează copy-on-write pentru directorul respectiv înainte de a crea vreun image:

chattr +C ~/VirtualBox\ VMs/

Prin linia de comandă (VBoxManage)

# Creează VM
VBoxManage createvm --name "Kali-2025" --ostype Debian_64 --register
 
# Configurează hardware
VBoxManage modifyvm "Kali-2025" --memory 4096 --cpus 2 --vram 128
VBoxManage modifyvm "Kali-2025" --graphicscontroller vmsvga
VBoxManage modifyvm "Kali-2025" --nic1 nat
 
# Creează și atașează discul
VBoxManage createmedium disk --filename ~/VirtualBox\ VMs/Kali-2025/Kali-2025.vdi --size 40960
VBoxManage storagectl "Kali-2025" --name "SATA" --add sata
VBoxManage storageattach "Kali-2025" --storagectl "SATA" --port 0 --device 0 --type hdd --medium ~/VirtualBox\ VMs/Kali-2025/Kali-2025.vdi
 
# Atașează ISO
VBoxManage storagectl "Kali-2025" --name "IDE" --add ide
VBoxManage storageattach "Kali-2025" --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium /path/to/kali-linux.iso

9. Formate de discuri virtuale suportate

Format Descriere Note
VDI format nativ VirtualBox recomandat pentru uz general
VMDK format VMware suportă splitare în fișiere de 2 GB
VHD format Microsoft (Hyper-V, Virtual PC) poate fi montat nativ în Windows 7+
VHDX versiune extinsă VHD (Hyper-V 3.0) suport read-only în VirtualBox
QCOW format QEMU versiunea 1 suport complet
QCOW2 format QEMU curent nu este suportat de VirtualBox
QED format QEMU Enhanced Disk (vechi) suport pentru compatibilitate
OVF Open Virtualization Format import/export între hypervisoare, cu limitări
RAW disc fără container acces direct la disc fizic sau fișier simplu

Conversia între formate

# VDI → VMDK
VBoxManage clonehd source.vdi destination.vmdk --format VMDK
 
# VMDK → VDI
VBoxManage clonehd source.vmdk destination.vdi --format VDI
 
# QCOW2 → VDI (necesită qemu-img)
qemu-img convert -O vdi source.qcow2 destination.vdi
 
# VDI → QCOW2
qemu-img convert -O qcow2 source.vdi destination.qcow2
# -p afișează progresul; -o compat=0.10 sau compat=1.1 specifică revizia QCOW2

Redimensionarea unui disc virtual VDI

# Redimensionează direct (numai pentru VDI, valoarea în MiB)
VBoxManage modifymedium disk your_virtual_disk.vdi --resize 51200
# 51200 MiB = 50 GiB

Pentru VMDK sau abordare alternativă - clonează pe un disc nou:

VBoxManage createmedium disk --filename new.vdi --size 51200
VBoxManage clonemedium disk old.vdi new.vdi --existing
VBoxManage storageattach "NumeleVM" --storagectl "SATA" --port 0 --medium none
VBoxManage storageattach "NumeleVM" --storagectl "SATA" --port 0 --medium new.vdi --type hdd

Pornește VM-ul cu un live ISO de GParted și extinde partiția la noua dimensiune.

Compactarea discurilor VDI

Dacă un disc VDI a crescut prea mult, recuperi spațiul nefolosit în doi pași. Mai întâi, în interiorul VM-ului, umple spațiul liber cu zerouri:

cat /dev/zero > /tmp/fillfile || rm /tmp/fillfile

Apoi, după oprirea VM-ului, compactează pe host:

VBoxManage modifyhd your_disk.vdi --compact

Dacă VM-ul are snapshot-uri, rulează comanda pe fiecare fișier .vdi în parte. Compactarea nu funcționează pe discuri criptate.

10. Instalarea Guest Additions în mașina virtuală

Acesta este pasul pe care cei mai mulți îl sar și de unde vin 90% din problemele raportate: tastatură care nu merge, rezoluție blocată, clipboard nefuncțional, foldere partajate invizibile.

Guest Additions compilează module kernel în interiorul VM-ului guest, deci ai nevoie de unelte de compilare și header-ele kernel-ului care rulează în guest.

Pasul 1 - Instalează dependențele în VM

sudo apt update
sudo apt install -y build-essential dkms linux-headers-$(uname -r)

sudo dnf install -y gcc make perl kernel-devel kernel-headers dkms

sudo pacman -S base-devel linux-headers dkms

sudo zypper install -y gcc make kernel-devel dkms

Pasul 2 - Montează ISO-ul Guest Additions

Din meniul VM-ului: Devices → Insert Guest Additions CD Image

Dacă nu se montează automat:

sudo mkdir -p /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom

Dacă ai instalat virtualbox-guest-iso pe gazda Arch, ISO-ul se află la /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso și poate fi montat direct din setările VM-ului ca unitate optică.

Pasul 3 - Rulează instalatorul

cd /mnt/cdrom
sudo sh ./VBoxLinuxAdditions.run

Urmărește output-ul - dacă apar erori de compilare, înseamnă că lipsesc header-ele kernel sau pachetele de build. Instalarea reușită arată:

Building the VirtualBox Guest Additions kernel modules ...done.
Doing non-kernel setup of the Guest Additions ...done.

Pasul 4 - Repornește VM-ul

sudo reboot

Verificare

lsmod | grep vbox
# Ar trebui să apară: vboxguest, vboxsf, vboxvideo
 
# Verificare versiune module vs. versiune instalată:
# Pe host:  modinfo vboxdrv | grep '^version:'
# Pe guest: caută în logurile VM "Guest Additions information report"

11. Rezoluție dinamică și clipboard

După instalarea Guest Additions și repornire:

  • Rezoluția se ajustează automat la dimensiunea ferestrei VirtualBox - dacă nu, verifică că în setările VM ai selectat VMSVGA sau VBoxSVGA la Graphics Controller, nu VBoxVGA
  • Clipboard bidirecțional: Devices → Shared Clipboard → Bidirectional
  • Drag & Drop: Devices → Drag and Drop → Bidirectional

Rezoluție personalizată pentru consola virtuală

Dacă rezoluția consolei virtuale (TTY, framebuffer) rămâne mică chiar după instalarea Guest Additions, adaugă rezoluții personalizate. Pe host:

VBoxManage setextradata "NumeleVM" "CustomVideoMode1" "1920x1080x24"

Poți defini până la 16 rezoluții (CustomVideoMode1 până la CustomVideoMode16). Rezoluții recomandate: 1280×720, 1920×1080, 2560×1440, 3840×2160.

Apoi, în VM, adaugă parametrul kernel la boot:

video=1920x1080

Nu folosi parametrul vga= sau setările de rezoluție din GRUB (GRUB_GFXPAYLOAD_LINUX) - acestea sunt suprascrise de KMS. Parametrul video= este cel corect.

12. Foldere partajate

Configurare din interfața grafică

Settings → Shared Folders → click pe iconița + → selectează directorul de pe host, dă-i un nume (ex. host-share) și bifează Auto-mount.

Accesarea folderului în VM

# Folderul apare automat în /media/sf_<nume>
ls /media/sf_host-share
 
# Dacă primești "Permission denied", adaugă-te în grupul vboxsf
sudo usermod -aG vboxsf $USER
# Deconectează-te și reconectează-te

Montare manuală și permanentă

sudo mount -t vboxsf host-share /mnt/shared

Pentru montare permanentă, adaugă în /etc/fstab:

host-share  /mnt/shared  vboxsf  defaults,uid=1000,gid=1000  0  0

Notă Windows guest: dacă un fișier .exe care necesită drepturi de administrator refuză să ruleze de pe un folder partajat, copiază-l pe discul virtual sau folosește calea UNC \\vboxsvr\host-share.

13. Rețea - moduri disponibile

Mod VM → Internet Host → VM VM → VM
NAT ✗ (fără port forwarding)
Bridged
Host-only ✓ (aceeași rețea)
Internal ✓ (aceeași rețea internă)
NAT Network ✗ (fără port forwarding)

NAT este implicit și suficient pentru navigare din VM. Bridged este ideal dacă vrei ca VM-ul să apară ca un device separat în rețeaua locală. Host-only este util pentru laburi de rețea sau acces SSH din host în VM fără internet.

Port forwarding în modul NAT (acces SSH din host)

VBoxManage modifyvm "NumeleVM" --natpf1 "ssh,tcp,,2222,,22"
ssh -p 2222 user@127.0.0.1

SSHFS ca alternativă la folderele partajate

sshfs -p 2222 user@localhost:$HOME ~/shared_folder

Restricții subnet pentru rețeaua Host-only

Dacă primești erori E_ACCESSDENIED la modificarea adaptorului de rețea virtual, VirtualBox limitează subrețelele permise. Creează /etc/vbox/networks.conf:

* 10.0.0.0/8 192.168.0.0/16
* 2001:db8:1234::/48

Spațiile și asteriscul sunt importante. Reîncarcă driverele după modificare:

sudo modprobe -r vboxnetadp vboxnetflt
sudo modprobe vboxnetadp vboxnetflt

14. Autostart VM cu systemd

Dacă vrei ca un VM să pornească automat la boot-ul sistemului gazdă, creează un serviciu systemd:

/etc/systemd/system/vboxvmservice@.service
[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service
 
[Service]
User=username
Group=vboxusers
ExecStart=/usr/bin/VBoxManage startvm %i --type headless
ExecStop=/usr/bin/VBoxManage controlvm %i savestate
RemainAfterExit=yes
 
[Install]
WantedBy=multi-user.target

Înlocuiește username cu un utilizator din grupul vboxusers - același utilizator care a creat VM-ul (altfel VM-ul nu va fi vizibil). --type poate fi gui, headless sau separate; savestate poate fi înlocuit cu acpipowerbutton pentru oprire normală. Dacă ai mai multe VM-uri și nu se opresc corect, adaugă KillMode=none și TimeoutStopSec=40 în secțiunea [Service].

sudo systemctl enable vboxvmservice@NumeleVM
sudo systemctl start vboxvmservice@NumeleVM

15. Front-end-uri disponibile

Comandă Descriere
VirtualBox interfața grafică completă
VBoxSDL fereastră simplă fără overlay-uri, util pentru testare rapidă
VBoxHeadless fără GUI, pentru servere; cu extensia VRDP poți accesa remote display-ul
vboxwebsrv server web pentru gestionare remote cu RemoteBox (GUI) sau phpVirtualBox (WebUI)

16. Snapshots

Snapshot-urile îți permit să salvezi starea VM-ului la un moment dat și să revii oricând.

VBoxManage snapshot "NumeleVM" take "Inainte-de-experimente"
VBoxManage snapshot "NumeleVM" restore "Inainte-de-experimente"
VBoxManage snapshot "NumeleVM" list

Fiecare snapshot generează un fișier .vdi separat - comanda modifyhd --compact trebuie rulată pe fiecare dintre ele individual.

17. Probleme frecvente și soluții

Tastatura sau mouse-ul sunt blocate în VM

Apasă tasta Host Key (implicit Right Ctrl) pentru a elibera input-ul. Dacă câmpul de username/parolă nu primește input: click pe fereastra VM, apasă Right Ctrl + Delete, apoi click pe câmpul de text. Soluția permanentă este instalarea Guest Additions.

Modulul vboxdrv nu se încarcă

sudo modprobe vboxdrv
dmesg | grep vbox  # pentru detalii despre eroare
 
# Pe Arch, după update de kernel sau VirtualBox:
sudo vboxreload
 
# Pe Debian/Ubuntu/openSUSE:
sudo /sbin/rcvboxdrv setup

Nu există opțiuni de 64 de biți la crearea VM-ului

Virtualizarea hardware (VT-x / AMD-V) nu este activată în BIOS/UEFI. Intră în setările firmware-ului și activează opțiunea (de obicei în secțiunea CPU sau Security). Pe Windows host, poate fi necesar să dezactivezi Hyper-V.

Rezoluția rămâne blocată

  • Verifică Graphics Controller: trebuie VMSVGA sau VBoxSVGA (nu VBoxVGA)
  • Video Memory trebuie să fie minimum 64 MB, recomandat 128 MB
  • Verifică că modulul vboxvideo este încărcat în guest: lsmod | grep vboxvideo

Guest Additions nu compilează

# Asigură-te că header-ele corespund exact kernel-ului care rulează
uname -r
# Instalează pachetul de headers exact pentru această versiune

Folderele partajate dau Permission denied

sudo usermod -aG vboxsf $USER
# Deconectează-te complet și reconectează-te

VirtualBox nu poate crea interfața host-only

lsmod | grep vbox
sudo modprobe vboxnetadp vboxnetflt
# Sau din GUI: File → Host Network Manager → Create

Microfonul analog nu funcționează

Instalează PulseAudio pe host sau configurează VirtualBox să folosească backend-ul PulseAudio (pe care PipeWire îl interceptează prin pipewire-pulse):

VBoxManage modifyvm "NumeleVM" --audio-driver pulse --audio-controller hda

Dispozitiv USB provoacă crash în guest

Încearcă să schimbi controllerul USB din USB 2 (EHCI) în USB 3 (xHCI) sau invers, din Settings → USB.

Eroare NS_ERROR_FAILURE la pornirea VM-ului

Apare de obicei când Extension Pack nu este actualizat și devine incompatibil cu noua versiune VirtualBox, sau dacă ai creat un disc în format QCOW2 (nesuportat). Verifică că Extension Pack și VirtualBox sunt la aceeași versiune.

VirtualBox nu pornește după update de kernel (Arch)

sudo vboxreload
dkms status  # verifică că DKMS a recompilat modulele

Freezeuri aleatorii cu GPU Intel

Reducerea numărului de procesoare virtuale poate ajuta, deoarece mai multe nuclee alocate pot scădea performanța de randare pe Intel GPU. Încearcă cu 1-2 nuclee.

Split lock detection (Windows 10 cu chipset Intel Tiger Lake)

Adaugă la parametrii kernel ai gazdei:

split_lock_detect=off

Conflict cu Android Studio / KVM

KVM și modulele VirtualBox nu pot rula simultan. Dacă Android Studio emulator a folosit KVM și acum VirtualBox nu pornește:

sudo vboxreload
# Dacă modulele sunt în uz, identifică procesul și termină-l:
lsof /dev/kvm

Resurse suplimentare