
Eccoci ancora qui con un altro tutorial semplice semplice ma, in alcuni casi, molto utile.
Il problema di oggi è stato il seguente: devo montare su una lama HP l’immagine di un disco USB per poter caricare dei file su un sistema “live” (quindi con lettore cd occupato) senza dover configurare la rete (e quindi, far riconfigurare la porta degli switch).
Le soluzioni sono 2:
1) Prendere una chiavetta USB, caricare i file, fare un’immagine e collegarla
2) Creare direttamente da sistema l’immagine di una chiavetta USB, caricare i file, e collegarla.
Dato che la prima soluzione prevede comunque di avere una chiavetta di dimensione “trasportabile” via rete (personalmente ho un pendrive da 16GB: per due file da 2mb l’uno, farmi un’immagine da 16GB e spostarla via rete è assurdo), la seconda è molto più malleabile in termine di dimensioni dell’immagine che si andrà a creare.
Ma, andiamo a cominciare: per prima cosa ci interessa creare un file (che altro non sarà che l’immagine della nostra chiavetta) di una dimensione particolare; nel mio caso, 10mb sono più che sufficienti.
Mano al buon, vecchio dd e dunque:
$ dd if=/dev/zero of=usbDisk.img bs=1024 count=10000 |
Quindi, partendo dal device “zero” (contenente, ovviamente, solo 0) creo un file “usbDisk.img” di dimensione 1024byte x 10000 = 1kb x 10000 = 10mb
Terminata la creazione, scatta la magia: andiamo a collegare questo file ad un device facendolo, in effetti, vedere al sistema come un dispositivo fisicamente collegato alla macchina:
$ losetup -f usbDisk.img |
Questo comando prende il file usbDisk.img e lo collega al device /dev/loop0
Ora, come ogni disco che si rispetti, andiamo a crearci sopra una partizione; armiamoci di cfdisk (molto semplice, i puristi preferiranno fdisk, ma fate voi) e creiamo una singola partizione di tipo “Linux” sul disco:
$ cfdisk /dev/loop0 |
Salviamo ed usciamo.
In realtà quello che ci serve non è la partizione, bensì il fatto che cfdisk, in fase di scrittura, determina e scrive direttamente sul device informazioni come i cilindri, ecc. che servono successivamente per creare il filesystem.
Quindi, visto che vogliamo simulare un disco usb “standard”, andiamo a metterci sopra un filesystem che sia comune, e cosa meglio del vecchio fat32 per questo?
$ mkdosfs -F 32 /dev/loop0 |
Terminata la creazione possiamo montare il disco usb come un normalissimo device:
$ mkdir -p /mnt/fintoDisco $ mount /dev/loop0 /mnt/fintoDisco |
e copiarci sopra i file interessati.
Quando abbiamo finito ricordiamoci di smontare il device:
$ umount /mnt/fintoDisco |
e, soprattutto, di sganciare il device dal file reale:
$ losetup -d /dev/loop0 |
Ora possiamo portarci in giro il file come più ci aggrada.
Buon divertimento e buon lavoro



7 Commenti
non si finisce mai di imparare
Grazie !
ps
non credo di aver capito bene ma se monto una live e ho una porta usb a disposizione posso sempre montare una chiavetta e copiarmi direttamente i file, a meno di aver bisogno di una piccola img bootable.
Prego
Per quanto riguarda la tua domanda, la tua affermazione è perfettamente corretta se ti trovi in un’ambiente “reale” (nel quale la macchina/server che stai avviando con la live sia una macchina fisica o comunque una macchina con porte usb/lettore cd).
Nel caso in cui sei in ambienti tipo Enclosure Blade i server, per quanto comunque fisici, sono leggermente differenti e non hai a disposizione reali lettori cd o porte usb al quale collegarti.
In quei casi, in genere, l’hardware contiene un processore di management che permette di leggere file via http e mapparli a livello hardware come se fossero device fisici.
Nel mio caso, quindi, la stessa live che ho bootato non è un cd fisico, ma un’immagine .iso erogata da un webserver.
Stessa cosa per il disco usb, motivo per cui mi son trovato davanti al problema risolto poi con la procedura dell’articolo.
Inoltre, questo metodo per la creazione di “finte” immagini di dischi può essere utile in mille casi.
Giusto per citarne uno, potresti crearti l’immagine, installarci sopra un’intera distribuzione (tipo debian con debootstrap, o altre a seconda della tua preferenza), dopodichè, quando sei sicuro che questa funzioni, dumpare il contenuto sul device fisico senza sprecare tempo in continue scritture su periferiche che, presumibilmente, sono più lente in scrittura/lettura, che non un file direttamente sul tuo sistema.
Questo era solo un’esempio, usando Linux l’unico limite è la tua fantasia.
Ciaooo
Bel tutorial, vorrei solo sapere una cosa.
Ho provato a utilizzare losetup per l’immagine di un intero disco e con fdisk vedo le partizioni segnate come /dev/loop0p1 e /dev/loop0p2, però non capisco come fare a montarle.
Qualcuno sa come si fa?
Ciao Luigi,
teoricamente nella dirctory /dev dovresti trovarti i vari device delle partizioni (ls -l /dev/loop0*).
In questo caso puoi creare il filesystem che preferisci sulla specifica partizione:
mkfs.ext3 /dev/loop0p0
una volta fatto questo, puoi montare la patizione dove
prefetisci:
mount /dev/loop0p0 /mnt
fammi sapere se ti è stato utile.
Ciao
Matteo
Bellissima idea quella che hai avuto, vorrei farne un’applicazione diversa per cui ti chiedo è possibile montare poi l’immagine ottenuta su un’unità virtuale su Windows Xp? in modo da simulare l’USB-PEN? e con quale programma ?
Grazie per la risposta.
Mauro
Ciao Mauro,
intanto grazie. Per quanto riguarda il mount dell’immagine su Windows XP, sinceramente, non sono molto ferrato sull’argomento (ormai sono anni che non mi avvicino ad una macchina Windows).
Comunque, una breve ricerca su google, mi ha fatto arrivare a questo software: http://www.winimage.com/download.htm
Puoi provare con questo.
Ciao
Matteo
ciao
ho questo problema:
sul mio portatile asus non recentissimo non funziona il lettore ottico. il bios non permette boot da usb e adesso devo pure sostituire l’hard disk.
vorrei montargli un hard disk con il s.o. già sopra; si trova un’immagine da copiarci sopra perchè si accenda? o c’è un modo per copiarcela? che consigli?
grz