Gli User Block Devices di UML

Condividi:

Gli user block device di User Mode Linux rappresentano i dispositivi a blocchi collegati alla macchina virtuale, vengono montati tramite i parametri della stringa di avvio oppure essere montati “a caldo” da uml_mconsole.

Possiamo montare quanti block device vogliamo, monimandoli con una lettera seguita dalla stringa ubd: ubda, ubdb ecc e possiamo agganciarci qualunque file sull’ host, quindi sia normali file che dispositivi presenti in /dev come cdrom, /dev/mem, dischi fisici ecc nonchè dispositivi con partizioni di swap

In questo articolo avvieremo una virtual machine con un filesystem formato da una root presente su un dispositivo su cui vengono montate una /tmp, una /var, una /srv presenti su dispositivi diversi ed una partizione di swap

Preparazione dei file

Il procedimento è molto simile a quello descritto in questo articolo che seguiremo per quanto riguarda la fase di fine tuning in chroot, qui però abbiamo bisogno di 4 file che simulino i 4 dispositivi ubda, ubdb, ubdc ed ubdd.

  • ubda conterrà la root e disporrà di 320M
  • ubdb contterrà le partizioni /tmp e /var e disporrà di 320M che divideremo in 64 e 256
  • ubdc conterrà la partizione /srv di 256M
  • ubdd conterrà la partizione di swap, da 256M
# dd if=/dev/zero of=ubda bs=1M count=320
# dd if=/dev/zero of=ubdb bs=1M count=320
# dd if=/dev/zero of=ubdc bs=1M count=256
# dd if=/dev/zero of=ubdd bs=1M count=256

Montiamo i file su loop device e creiamo le partizioni con fdisk o parted. Con il device associato a ubdd dobbiamo impostare il tipo di partizione a swap. Dovremo ottenere questo risultato:

# fdisk -l /dev/loop0
/dev/loop0p1         63 614399  614337  300M 83 Linux

# fdisk -l /dev/loop1
/dev/loop1p1       2048 133119  131072   64M 83 Linux
/dev/loop1p2     133120 655359  522240  255M 83 Linux

# fdisk -l /dev/loop2
/dev/loop2p1       2048 524287  522240  255M 83 Linux

# fdisk -l /dev/loop3
/dev/loop3p1       2048 524287  522240  255M 82 Linux swap / Solaris
Partizionamento

Formattiamo le partizioni

# mkfs.ext3 /dev/loop0p1
# mkfs.ext3 /dev/loop1p1
# mkfs.ext3 /dev/loop1p2
# mkfs.ext3 /dev/loop2p1
# mkswap /dev/loop3p1

Ora montiamo le prime 3 nel filesystem vuoto. La partizione /srv non viene popolata da debootstrap quindi non serve montarla

# mkdir root-fs
# mount /dev/loop0p1 root-fs
# mkdir root-fs/tmp
# mkdir root-fs/var
# mkdir root-fs/srv
# mount /dev/loop1p1 root-fs/tmp
# mount /dev/loop1p2 root-fs/var
Installazione debian

Popoliamo il root-fs con una distro debian stable

# debootstrap stable root-fs/ http://ftp.it.debian.org/debian/
Post installazione

Dopo aver eseguito il fine tuning inseriamo le informazioni in fstab

cat > root-fs/etc/fstab <<!
/dev/ubda1 /    ext3 defaults 0 1 
/dev/ubdb1 /tmp ext3 defaults 0 1 
/dev/ubdb2 /var ext3 defaults 0 1 
/dev/ubdc1 /srv ext3 defaults 0 1 
/dev/ubdd1 none swap sw       0 0
!

Terminate le operazioni, smontiamo le partizioni ed i loop device ed avviamo la vm

# exit
# umount root-fs/tmp/
# umount root-fs/var/
# umount root-fs/
# losetup -D
Avvio

Passiamo al boot loader di uml la lista di user block devices e specifichiamo quale partizione contiene la root

# linux ubda=ubda ubdb=ubdb ubdc=ubdc ubdd=ubdd umid=uml-debian root=/dev/ubda1 mem=128M con0=fd:0,fd:1 con=pts
Login

Una volta effettuato login, vediamo le partizioni correttamente montate

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       283M  209M   59M  79% /
devtmpfs         58M     0   58M   0% /dev
tmpfs            58M     0   58M   0% /dev/shm
tmpfs            58M  2.1M   55M   4% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            58M     0   58M   0% /sys/fs/cgroup
/dev/ubdb2      243M  141M   90M  61% /var
/dev/ubdb1       58M  1.3M   54M   3% /tmp
/dev/ubdc1      243M  2.1M  229M   1% /srv

Anche la partizione di swap

# swapon
NAME       TYPE      SIZE USED PRIO
/dev/ubdd1 partition 255M   0B   -1