# VirtualBox

**VirtualBox** és un programari de virtualització de codi obert desenvolupat per Sun Microsystems, actualment propietat d'Oracle, que permet executar sistemes operatius complets dins d'un sistema amfitrió, com si fossin programes normals.

![VirtualBox logo](https://proferamon.com/tic/imatges/virtualbox/virtualbox01.png)

## 1. Què és la virtualització?

La virtualització consisteix a crear una **màquina virtual** (VM): un ordinador simulat per programari que té el seu propi processador, memòria, disc dur i targeta de xarxa, però que en realitat s'executa sobre el maquinari físic de l'ordinador real.

![Arquitectura de virtualització](https://proferamon.com/tic/imatges/virtualbox/virtualbox02.png)

## 2. Característiques principals

### 2.1 Plataformes suportades

VirtualBox funciona com a **amfitrió** en:

- Windows (10, 11, Server)
- Linux (Ubuntu, Debian, Fedora, RHEL...)
- macOS (Intel; suport Apple Silicon limitat)
- Solaris

I permet executar com a **convidat** pràcticament qualsevol sistema: Linux, Windows, BSD, Solaris, DOS...

### 2.2 Guest Additions

Les **Guest Additions** són un conjunt de controladors i utilitats que s'instal·len dins la màquina virtual per millorar-ne el rendiment i la integració:

- Ratolí integrat sense captura
- Porta-retalls compartit
- Carpetes compartides entre amfitrió i convidat
- Resolució de pantalla dinàmica
- Acceleració de vídeo 2D/3D

**Instal·lació de Guest Additions en Ubuntu Desktop 26.04**

Actualitza la llista de paquets

```bash
sudo apt update
```

Instal·la dependències

```bash
sudo apt install bzip2 tar build-essential
```

Mou-te a la carpeta de l'instal·lador. Canvia:

- `USUARI` pel teu nom d'usuari
- `7.2.2` per la teva versió de VirtualBox

```bash
cd /run/media/USUARI/VBox_GAs_7.2.2
```

Instal·la

```bash
sudo ./VBoxLinuxAdditions.run
```

### 2.3 Modes de xarxa

| Mode | Descripció |
|----|-------|
| **NAT** | La VM accedeix a Internet via l'amfitrió. Senzill, però la VM no és accessible des de fora. |
| **Xarxa pont** | La VM té IP pròpia a la xarxa física. Es comporta com un equip real. |
| **Xarxa interna** | Les VM es comuniquen entre elles, sense accés exterior. |
| **Adaptador de només amfitrió** | Comunicació entre VM i amfitrió, sense accés a la xarxa exterior. |
| **NAT Network** | Com NAT, però les VM es veuen entre elles. |

### 2.4 Emmagatzematge

Els discos de les VM s'emmagatzemen com a fitxers al disc de l'amfitrió, en formats:

- **VDI** — format natiu de VirtualBox
- **VMDK** — compatible amb VMware
- **VHD** — compatible amb Hyper-V

Els discos poden ser **d'expansió dinàmica** (ocupen només l'espai real usat) o de **mida fixa** (reserven tot l'espai des del principi).

### 2.5 Snapshots

Els **snapshots** (instantànies) permeten desar l'estat complet d'una VM en un moment donat i tornar-hi si cal. Molt útil per:

- Provar canvis arriscats al sistema
- Crear punts de restauració abans d'instal·lar programari
- Ensenyament i pràctiques de laboratori

## 3. Ordres de gestió per línia d'ordres

VirtualBox inclou `VBoxManage`, una eina de línia d'ordres potent:

```bash
# Llistar VMs disponibles
VBoxManage list vms

# Crear una VM nova
VBoxManage createvm --name "debian12" --ostype Debian_64 --register

# Arrencar una VM
VBoxManage startvm "debian12"

# Apagar una VM
VBoxManage controlvm "debian12" poweroff

# Crear un snapshot
VBoxManage snapshot "debian12" take "abans-actualitzacio"
```

## 4. VirtualBox i [Vagrant](https://proferamon.com/tic/vagrant.html)

VirtualBox és el **proveïdor per defecte de Vagrant**. Quan s'executa `vagrant up` sense configuració especial, Vagrant crea i gestiona automàticament màquines VirtualBox:

```ruby
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
    vb.name = "servidor-web"
  end
end
```

## 5. VirtualBox vs. altres hipervisors

| | VirtualBox | VMware Workstation | Hyper-V | KVM/QEMU |
|---|---|---|---|---|
| **Llicència** | Gratuït (GPL) | Comercial | Inclòs a Windows | Gratuït (GPL) |
| **Rendiment** | Bo | Excel·lent | Excel·lent | Excel·lent |
| **Facilitat d'ús** | Alta | Alta | Mitjana | Baixa |
| **Integració Vagrant** | Nativa | Sí (connector) | Sí (connector) | Sí (connector) |
| **Apple Silicon** | Limitat | Sí | No | Sí (via UTM) |

## 6. Instal·lació

```bash
# Debian / Ubuntu
sudo apt install virtualbox-7.2

# Fedora / RHEL (via dipòsit Oracle)
sudo dnf install VirtualBox-7.2
```

> [!NOTE]
> A sistemes amb **Secure Boot** activat, pot ser necessari signar els mòduls del kernel de VirtualBox manualment o desactivar Secure Boot per poder carregar els mòduls `vboxdrv`.

> [!TIP]
> Per afegir l'usuari al grup `vboxusers` i poder gestionar USB des de les VM:
> ```bash
> sudo usermod -aG vboxusers $USER
> ```
> Cal tancar la sessió i tornar a entrar perquè tingui efecte.

## 7. Problemes habituals

Quan instal·les VirtualBox (o KVM/QEMU), el sistema ha de compilar mòduls del kernel (`vboxdrv`, `vboxnetflt`...). Si no tens les capçaleres del nucli instal·lades, la compilació falla i els mòduls no es carreguen.

```bash
# Debian / Ubuntu
sudo apt install linux-headers-$(uname -r)

# Fedora
sudo dnf install kernel-devel kernel-headers

# Arch
sudo pacman -S linux-headers
```

El `$(uname -r)` assegura que instal·les les capçaleres de la versió exacta del kernel que estàs executant ara mateix, cosa important si tens diversos kernels instal·lats.

### 7.1 KVM (*Kernel-based Virtual Machine*)

KVM és un hipervisor integrat directament al kernel Linux des de la versió 2.6.20. Aprofita les extensions de virtualització del processador (**Intel VT-x** o **AMD-V**) per executar màquines virtuals amb rendiment gairebé natiu.

A diferència de VirtualBox, KVM no és un programa extern — és un **mòdul del kernel** (`kvm.ko` + `kvm_intel.ko` o `kvm_amd.ko`).

#### Per què xoquen amb VirtualBox?

El problema és que **tots dos volen accés exclusiu a les extensions de virtualització del processador**.

```ini
CPU
 └── Extensions VT-x / AMD-V
      ├── KVM  ──── les reserva per al kernel
      └── VirtualBox ── les vol usar pel seu compte
               CONFLICTE!
```

Quan KVM té els mòduls carregats, VirtualBox no pot accedir a VT-x/AMD-V i:

- Les VM arrenquen molt lentes (mode programari sense acceleració)
- O directament fallen amb errors com `VERR_VMX_NO_VMX` o `VERR_VMX_MSR_VMXON_DISABLED`

#### Solució

**Opció 1 — Descarregar els mòduls KVM temporalment:**

```bash
sudo modprobe -r kvm_intel   # o kvm_amd segons el processador
sudo modprobe -r kvm
```

**Opció 2 — Impedir que KVM carregui a l'arrencada** (si uses VirtualBox habitualment):

```bash
echo "blacklist kvm_intel" | sudo tee /etc/modprobe.d/blacklist-kvm.conf
echo "blacklist kvm"       | sudo tee -a /etc/modprobe.d/blacklist-kvm.conf
sudo update-initramfs -u   # Debian/Ubuntu
```

**Opció 3 — Usar només un dels dos** i gestionar l'altre amb Vagrant o libvirt segons el cas.

A partir de VirtualBox 7.0 hi ha millores en la coexistència, però en general continua sent recomanable no tenir els dos actius simultàniament.


#### Versions d'aquest document

+ HTML - [virtualbox.html](https://proferamon.com/tic/virtualbox.html)
+ PDF - [virtualbox.pdf](https://proferamon.com/tic/docs/virtualbox.pdf)
+ ODT - [virtualbox.odt](https://proferamon.com/tic/odt/virtualbox.odt)
+ MD - [virtualbox.md](https://proferamon.com/tic/md/virtualbox.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)

