A volte si rende necessario ridimensionare, in particolare ingrandire, una partizione qcow2, cioè il tipo di partizione usato da qemu. Purtroppo non esiste un comando diretto per ingrandire la partizione, e quindi la procedura è piuttosto complessa ma fattibile. Consiglio caldamente di fare un backup del file in questione nel caso qualcosa vada storto. In questa guida mostro come ingrandire una partizione qcow2 contenente una installazione di Ubuntu Hardy. Il file qcow2 è di circa 2,5Gb ed è stato suddiviso dall'installer di Hardy in 3 partizioni:
La procedura generale, che va adattata caso per caso, è questa:
trasformare il file qcow2 in raw;
ingrandire il file raw;
spostare e ingrandire le partizioni come necessario;
ritrasformare il file raw in qcow2;
bootare nel guest OS (quello virtualizzato all'interno di qemu) e ingrandire i filesystem fino a riempire le singole partizioni.
Nel dettaglio, questa è la procedura usata per la mia partizione ext3,
ma funziona anche con reiserfs. Aumenteremo lo spazio da 2,5Gb totali a
circa 5Gb totali. Lasceremo inalterato lo spazio di swap, cioè la terza
partizione.
La nostra partizione qcow2 originale si chiama ubuntu_hardy_heron.qcow. Innanzitutto bisogna trasformarla in formato raw:
$ qemu-img convert ubuntu_hardy_heron.qcow -O raw ubuntu_hardy_heron.raw
$ ls -l ubuntu_hardy_heron.*
-rw-r--r-- 1 fritz users 2526195712 2008-01-09 14:36 ubuntu_hardy_heron.qcow
-rw-r--r-- 1 fritz users 2621440000 2008-01-09 14:40 ubuntu_hardy_heron.raw
Ora si procede a ingrandire il file raw. Esistono diversi modi, io
ho usato questo (sostituire 5G con la dimensione voluta del file raw):
$ dd if=/dev/zero of=ubuntu_hardy_heron.raw bs=1 count=1 seek=5G
1+0 registrazioni dentro
1+0 registrazioni fuori
1 byte (1 B) copiato, 5,054e-05 secondi, 19,8 kB/s
$ ls -l ubuntu_hardy_heron.*
-rw-r--r-- 1 fritz users 2526195712 2008-01-09 14:36 ubuntu_hardy_heron.qcow
-rw-r--r-- 1 fritz users 5368709121 2008-01-09 14:48 ubuntu_hardy_heron.raw
Ora si può passare alla "fase creativa", cioè lo spostamento e
ingrandimento delle partizioni. Si può provare come descritto qui a
spostare la partizione, ma in realtà questa procedura non funziona.
La cosa più semplice è cancellare la partizione di swap (qui col nome
di raw5) e il suo contenitore (raw2). Il procedimento qui mostrato
sembra copiare i dati ma la partizione non è usabile una volta bootato
il guest OS. Il fatto è che lo spazio libero è così distribuito e
quindi per ingrandire la prima partizione bisogna spostare o eliminare
la seconda e la terza.
Eseguo gparted con:
$ sudo gparted ubuntu_hardy_heron.raw
Ripeto, questa procedura non funziona. La cosa più semplice
da farsi è cancellare la partizione raw2 e raw5. Si può però prendere
spunto per qualche soluzione creativa (magari con fdisk potrebbe
funzionare), dato che l'idea è spostare lo swap alla fine del disco,
prima di tutto ingrandendo raw2, poi spostando raw5 alla fine del disco
(questo è il passo che genera l'errore) e poi riducendo raw2. Le
immagini chiariscono il procedimento.
Lo spostamento della terza partizione (quella interna, qui chiamata
.raw5) segnala errore, ovviamente (non esiste un file col nome raw5).
Torniamo alla procedura funzionante. Ora bisogna ingrandire la prima
partizione. Probabilmente si può fare anche da gparted, ma preferisco
un metodo già collaudato con un altro tool, e quindi uso il fido fdisk.
Creo prima un device di loop:
$ sudo losetup /dev/loop0 ubuntu_hardy_heron.raw
$ sudo fdisk /dev/loop0
Comando (m per richiamare la guida): p
Disco /dev/loop0: 5368 MB, 5368709120 byte
255 heads, 63 sectors/track, 652 cylinders
Units = cilindri of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b0b4
Dispositivo Boot Start End Blocks Id System
/dev/loop0p1 * 1 297 2385621 83 Linux
/dev/loop0p2 631 652 176715 5 Esteso
/dev/loop0p5 632 652 168651 82 Linux swap / Solaris
Con sprezzo del pericolo, bisogna cancellare e ricreare la partizione 1:
Comando (m per richiamare la guida): d
Numero della partizione (1-5): 1
Comando (m per richiamare la guida): n
Azione comando
l logica (5 od oltre)
p partizione primaria (1-4)
p
Numero della partizione (1-4): 1
Primo cilindro (1-652, predefinito 1):
Utilizzo del valore predefinito 1
Ultimo cilindro o +size o +sizeM o +sizeK (1-630, predefinito 630):
Utilizzo del valore predefinito 630
Comando (m per richiamare la guida): p
Disco /dev/loop0: 5368 MB, 5368709120 byte
255 heads, 63 sectors/track, 652 cylinders
Units = cilindri of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0007b0b4
Dispositivo Boot Start End Blocks Id System
/dev/loop0p1 1 630 5060443+ 83 Linux
/dev/loop0p2 631 652 176715 5 Esteso
/dev/loop0p5 632 652 168651 82 Linux swap / Solaris
Come si vede, ora il blocco finale della prima partizione è 630 (invece dell'originario 297). La partizione è stata ingrandita.
Salviamo e usciamo da fdisk (tasto w).
Siamo quasi alla fine, bisogna solo ricreare il file qcow e
ingrandire il filesystem. Purtroppo non ho trovato un metodo per
ingrandire il filesystem senza bootare nel guest OS, quindi inizio a
riconvertire da raw a qcow in un nuovo file:
Finita la conversione, avvio il guest OS tramite
qemu-launcher (avendo attenzione di usare il nuovo file
ubuntu_hardy_heron2.qcow come disco). Una volta entrato in Ubuntu, nel guest OS da terminale basta lanciare:
$ sudo resize2fs /dev/sda1
nel caso di ext3, oppure nel caso di reiserfs:
$ sudo resize_reiserfs /dev/sda1
per ingrandire online il filesystem. Come si vede, la nostra partizione
di root ha guadagnato qualche gb di spazio libero. Resta solo da
ricreare (con gparted, ad esempio) e formattare (con mkswap) la partizione di swap e aggiornare il file /etc/fstab col nuovo uuid della swap.
ciao utilizzando questo workaround su ha...
Ciaoinnanzitutto il palio di Legnano l...
Nemmeno a me piacciono le notizie false,...
Talebani sono quelli che mistificano la ...
Talebani sono quelli che mistificano la ...
Forse non ti rendi conto che talebani, v...
A me funziona senza problemi sulla mia a...
con la versione di thunderbird 2.0.0.6, ...