Creare un’immagine di un disco USB… senza disco USB.

7

linux

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

Utente Linux/Unix da più di 20 anni, cerco sempre di condividere il mio know-how; occasionalmente, litigo con lo sviluppatore di Postfix e risolvo piccoli bug in GNOME. Adoro tutto ciò che può essere automatizzato e reso dinamico, l’HA e l’universo container. Autore dal 2011, provo a condividere quei piccoli tips&tricks che migliorano il lavoro e la giornata.

7 risposte a “Creare un’immagine di un disco USB… senza disco USB.”

  1. Avatar roberto
    roberto

    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.

  2. Avatar Matteo Cappadonna

    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 😀

  3. Avatar Luigi
    Luigi

    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?

  4. Avatar Matteo Cappadonna

    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

  5. Avatar Mauro
    Mauro

    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

  6. Avatar Matteo Cappadonna
    Matteo Cappadonna

    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

  7. Avatar Rinaldo
    Rinaldo

    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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *