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
1 2 3 4 |
# 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:
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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
1 2 3 4 5 |
# 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
1 2 3 4 5 6 7 |
# 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
1 |
# debootstrap stable root-fs/ http://ftp.it.debian.org/debian/ |
Post installazione
Dopo aver eseguito il fine tuning inseriamo le informazioni in fstab
1 2 3 4 5 6 7 |
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
1 2 3 4 5 |
# 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
1 |
# 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
1 2 3 4 5 6 7 8 9 10 11 |
# 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
1 2 3 |
# swapon NAME TYPE SIZE USED PRIO /dev/ubdd1 partition 255M 0B -1 |