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

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.

Tags: , , ,