Venerdì, 01 Novembre 2019 11:13

HowTo. Salvare un disco come file, usare un file come disco

In questo how to vediamo come trasformare un disco fisso in un file e come usare, poi, questo file come se fosse un disco fisso.
Le procedure sono valide per ambienti Linux e, con qualche differenza, per ambienti *nix.
Con Windows il principio è valido, ma bisogna ricorrere a programmi dedicati.
L'operazione, per gli ambienti *nix, è validi non solo per gli hard disk, ma, in generale, per ogni tipo di memoria di massa.

  1. Premessa

È possibile trasformare un hard disk in un file e usare questo come fosse un hard disk.

In questa guida procederemo trasformando un disco in file. Successivamente vedremo come usare il file ottenuto come se fosse un disco fisico.

La trasformazione inversa (cioè da file a disco) sarà accennata in appendice.

Al di la della pura teoria informatica l'operazione è utile in alcuni casi, come, ad esempio:

  • analisi che non devono alterare il media, come quelle forensi;

  • distribuire dischi tramite internet;

  • testare senza dover necessariamente avere l'hardware sotto mano;

  • virtualizzare macchine fisiche.

Procederemo, come si vede dall'indice, con una premessa teorica ed un descrizione dell'ambiente che useremo e degli obiettivi che ci poniamo.

Di seguito passeremo a vedere come si usa il file immagine dell'hard disk, precedentemente creato.

In appendice accenneremo a come formattare il file, alla manipolazione avanzata del file (es. creare partizioni) e come ri-trasformare il file in disco.

    1. Teoria

In ambiente *nix ogni cosa del computer è un file.

Un hard disk è visto dal sistema operativo come un file (i device, ad esempio, /dev/sdc). Le partizioni sono segmenti specifici del file (ad esempio dal punto 2048 al punto 4196351).

Per un pendrive vale lo stesso discorso. Eadem per una scheda SD e per qualsiasi altro tipo di memoria di massa.

Questo permette con facilità di trasformare il nostro supporto in file, usare-manipolare il file come fosse il supporto fisico e, in fine, ri-trasformare il file in un supporto fisico.

    1. Nostra situazione

In questa guida ipotizziamo di avere un disco da 10GB.

Il disco ha le seguenti caratteristiche:

  • tabella delle partizioni GPT

  • 1 partizione FAT32 da 500MB

  • 1 partizione EXT4 da 5GB

  • il resto dello spazio non è allocato.

Lavoreremo con una postazione Ubuntu 18, da riga di comando, come utente root ed il device fisico è l'sdc.

Obiettivo del nostro lavoro è:

  • trasformare il media in un file

  • montare il file in lettura e accedere-copiare le directory ed i file

In appendice, come obiettivo secondario, vedremo come allocare e formattare lo spazio non utilizzato e come ri-trasformare il file in un disco fisico.

Tutte le operazioni le faremo da riga di comando in una shell.

Nota: esistono dei tool grafici che permettono di fare (quasi) tutto. In ogni caso sono richieste conoscenze avanzate. Alcune operazioni, al momento, sono possibili solo da riga di comando.

  1. Trasformare un disco in file

Per questa operazione useremo il comando dd di serie negli ambienti *nix:

  1. loggarsi al nostro computer come utente root e aprire un terminale

NB: molti sistemi non permettono di autenticarsi direttamente come root. Se siamo in questo caso:

    1. accedere con un utente con diritti di amministrazione

    2. aprire una shell

    3. dare il seguente comando per assumere l'identità di root

sudo su -

  1. se montato, smontare il disco che trasformiamo in file

umount /dev/sdc1
umount /dev/sdc2

  1. trasformiamo il disco in file

NB: l'operazione richiede diverso tempo!

dd status=progress if=/dev/sdc of=./sdc.img

Al termine dell'operazione avremo un file binariamente uguale al disco.

Se vogliamo trasformare una pendrive, una SD, una ROM, un disco esterno, ecc... dobbiamo solo indicare il corretto device (es.: /dev/mt0).

  1. Usare il file come HDD

Procediamo ora a montare questo file come se fosse una memoria di massa fisica.

Una volta montato, a titolo di esempio, copieremo dei file.

Per montare il file possiamo usare kpartx oppure il tradizionale mount.

    1. Mount tramite kpartx

kpartx non è installato come standard. Per aggiungerlo è sufficiente il seguente comando:

apt install kpartx

kpartx mappa il file-disco come se fosse un volume logico. Pertanto troveremo il pseudo-disco non in /dev ma in /dev/mapper.

  1. Verifichiamo il file-disco

kpartx -l sdc.img
loop23p1 : 0 1024000 /dev/loop23 2048
loop23p2 : 0 10485760 /dev/loop23 1026048
loop deleted : /dev/loop23

  1. mappiamolo

kpartx -a sdc.img

  1. prepariamo il mount-point

mkdir /mnt/p1
mkdir /mnt/p2

  1. montiamo le due partizioni

mount /dev/mapper/loop22p1 /mnt/p1
mount /dev/mapper/loop22p2 /mnt/p2

Ora saltiamo al titolo 3.3 Accesso e copia file per usare il lavoro appena fatto.

    1. Mount tramite mount

Per montare entrambe le partizioni contemporaneamente procederemo creando manualmente i device loop.

  1. Verifichiamo i puntatori del file-disco

fdisk -l ./sdc.img
Disk ./sdc.img: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D3FD3FC2-AF1D-E047-90B6-E20F6FB7A05F


Dispositivo Start Fine Settori Size Tipo
./sdc.img1 2048 1026047 1024000 500M Microsoft basic data
./sdc.img2 1026048 11511807 10485760 5G Linux filesystem

  1. calcoliamo l'offset di inizio del primo disco (sdc.img1) e del secondo (sdc.img2).

Per fare questo dobbiamo moltiplicare la dimensione di un settore per il numero che indica il punto di inizio del disco (i dati sono evidenziati):

512 * 2048 = 1048576

512 * 1026048 = 525336576

  1. creiamo i loop device

losetup -o 1048576 /dev/loop201 sdc.img
losetup -o 525336576 /dev/loop202 sdc.img

  1. montiamo i loop device

mount /dev/loop201 /mnt/p1
mount /dev/loop202 /mnt/p2

Ora saltiamo al titolo 3.3 Accesso e copia file per usare il lavoro appena fatto.

    1. Accesso e copia file

Ipotizziamo che nel nostro file-disco siano contenuti documenti in entrambe le partizioni e li vogliamo recuperare nella directory Documenti nella nostra home. A titolo esemplificativo accederemo anche alle partizioni montate:

  1. accediamo alla prima partizione e recuperiamo il contenuto

cd /mnt/p1
cp -R * ~/Documenti/

  1. accediamo alla seconda partizione e recuperiamo il contenuto

cd /mnt/p2
cp -R * ~/Documenti/

Con la stessa tecnica possiamo usare i dischi montati per scansionarli con l'antivirus:

clamscan -i -r /mnt/

  1. Conclusione

A fronte di un po' di complessità la tecnica di conversione di una memoria di massa in file offre diverse opportunità.

L'uso di un file come disco, allo stesso modo, offre svariate possibilità soprattutto se si sta facendo studio, sperimentazione, prototipazione.

  1. Appendice

Sfruttando lo spazio lasciato lasciato non allocato nel nostro file-disco procediamo con alcune manipolazioni avanzate.

    1. Partizionamento

  1. Verifichiamo lo stato d'uso del nostro file-disco e individuiamo il punto di inizio per la uova partizione

parted sdc.img print
Modello: (file)
Disco /root/sdc.img: 10,7GB
Dimensione del settore (logica/fisica): 512B/512B
Tabella delle partizioni: gpt
Flag del disco:


Numero Inizio Fine Dimensione File system Nome Flag
1 1049kB 525MB 524MB fat16 msftdata
2 525MB 5894MB 5369MB ext4

  1. creiamo una nuova partizione di tipo ext4 che occupi tutto lo spazio disponibile. In grassetto, nello snap precedente e seguente, l'indirizzo di inizio partizione

parted sdc.img mkpart primary ext4 5894MB 100%

  1. verifichiamo lo stato d'uso attuale del nostro file-disco

parted sdc.img print
Modello: (file)
Disco /root/sdc.img: 10,7GB
Dimensione del settore (logica/fisica): 512B/512B
Tabella delle partizioni: gpt
Flag del disco:


Numero Inizio Fine Dimensione File system Nome Flag
1 1049kB 525MB 524MB fat16 msftdata
2 525MB 5894MB 5369MB ext4
3 5894MB 10,7GB 4842MB primary

A questo punto abbiamo una partizione nuova pronta per essere formattata ed usata.

    1. Formattazione

Per formattare la nostra nuova partizione dobbiamo creare il corrispondente loop device e procedere alla formattazione.

Infine monteremo la partizione per poterla usare.

  1. Iniziamo con la fase previa: creiamo il punto di montaggio e individuiamo l'offset per creare il loop device

mkdir /mnt/p3
fdisk -l ./sdc.img
Disk ./sdc.img: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D3FD3FC2-AF1D-E047-90B6-E20F6FB7A05F


Dispositivo Start Fine Settori Size Tipo
./sdc.img1 2048 1026047 1024000 500M Microsoft basic data
./sdc.img2 1026048 11511807 10485760 5G Linux filesystem
./sdc.img3 11511808 20969471 9457664 4,5G Linux filesystem

  1. creiamo il loop device

losetup -o 5894045696 /dev/loop203 sdc.img

  1. formattiamo il novo device

mkfs.ext4 -L NomeNuovo /dev/loop203

  1. a titolo accademico rivediamo l'attuale stato del nostro file-disco

parted sdc.img print
Modello: (file)
Disco /root/sdc.img: 10,7GB
Dimensione del settore (logica/fisica): 512B/512B
Tabella delle partizioni: gpt
Flag del disco:


Numero Inizio Fine Dimensione File system Nome Flag
1 1049kB 525MB 524MB fat16 msftdata
2 525MB 5894MB 5369MB ext4
3 5894MB 10,7GB 4842MB ext4 primary

  1. passiamo a montare la nostra nuova partizione

mount /dev/loop203 /mnt/p3

  1. sempre a titolo accademico creiamo un paio di directory e copiamo dei file nel nostro nuovo disco

mkdir /mnt/p3/Doc1
mkdir /mnt/p3/Doc2
cp -R ~/Documenti/* /mnt/p3/

    1. Da file ad Hard Disk

  • Premessa 1: per poter procedere l'hard disk che useremo deve essere grande come il file-disco o di più. Se è più grande lo spazio in eccesso non verrà usato e non sarà usabile a meno che non si proceda con un resize estensivo delle tabelle di allocazione.

  • Premessa 2: il principio del processo è valido per ogni tipo di memoria di massa. Pertanto possiamo procede con una SD invece di un hard disk.

  • Premessa 3: esistono diversi tool grafici per performare questa operazione. Procederemo con il comando dd da shell.

  • Premessa 4: ipotizziamo che il nostro hard disk da scrivere sia il device /dev/sdf .

Date queste premesse tutta l'operazione si condensa nel seguente comando:

dd status=progress if=./sdc.img of=/dev/sdc

 

Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezione Cookie Policy.