View my profile on LinkedIn

Montare un filesystem dentro un file

I filesystem di solito sono montati dentro delle partizioni, ma quando il disco fisso di un pc e’ gia’ partizionato, e la macchina magari e’ un server locato in america, creare nuove partizioni puo’ essere problematico e montare un filesystem in un file puo’ essere una soluzione onorevole.

L’uso piu’ frequente di filesystem dentro un file e’ la creazione di un file di swap in luogo di una partizione di swap, come gia’ spiegato QUI.

Ma perche’ limitarsi ? Creare un file con dentro un filesystem puo’ avere dei vantaggi:

1) un backup facile, una volta smontato il filesystem il file che fa’ da contenitore puo’ essere compresso e backuppato agilmente senza problemi di strutture delle directory e di permessi.

2) il file “contenitore” puo’ essere criptato.

3) varie ed eventuali :-)

Andiamo ad iniziare:

Per prima cosa dobbiamo ovviamente creare un file grosso quanto serve, creiamo per esempio un file da mezzo giga posto in /part con il comando:

dd if=/dev/zero of=/part/test_filesystem bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 4.00634 seconds, 134 MB/s

Il file e’ creato:

ls -al
totale 524812
drwxr-xr-x 2 root root 4096 2007-10-16 15:10 .
drwxr-xr-x 23 root root 4096 2007-10-16 15:11 ..
-rw-r–r– 1 root root 536870912 2007-10-16 15:10 test_filesystem

Adesso il file-contenitore va’ preparato, poniamo di fare una partizione ext3

mkfs.ext3 -F /part/test_filesystem
mke2fs 1.40-WIP (14-Nov-2006)
Etichetta del filesystem=
Tipo SO: Linux
Dimensione blocco=1024 (log=0)
Dimensione frammento=1024 (log=0)
131072 inode, 524288 blocchi
26214 blocchi (5.00%) riservati per l’utente root
Primo blocco dati=1
Maximum filesystem blocks=67633152
64 gruppi di blocchi
8192 blocchi per gruppo, 8192 frammenti per gruppo
2048 inode per gruppo
Backup del superblocco salvati nei blocchi:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Scrittura delle tavole degli inode: fatto
Creazione del journal (16384 blocchi): fatto
Scrittura delle informazioni dei superblocchi e dell’accounting del filesystem: fatto

Questo filesystem verra’ automaticamente controllato ogni 34 mount, o
180 giorni, a seconda di quale venga prima. Usare tune2fs -c o -i per cambiare.

quindi adesso possiamo montare in loop il file come facciamo di solito per le immagini iso.

mount -o loop -t ext3 -v /part/test_filesystem /media/test_filesystem
mount: going to use the loop device /dev/loop0
/part/test_filesystem on /media/test_filesystem type ext3 (rw,loop=/dev/loop0)

funziona, e queste sono le prove :-)

mount | grep test
/part/test_filesystem on /media/test_filesystem type ext3 (rw,loop=/dev/loop0)

df -h
Filesystem Dimens. Usati Disp. Uso% Montato su
/dev/sda1 79G 1,3G 73G 2% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 52K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/part/test_filesystem 496M 19M 452M 4% /media/test_filesystem

11 Comments

  1. shark says:

    Lo uso da tempo per fare ad esempio dei sistemi unix virtuali, avevo scritto anche una guida su tutto cio’, ma ho visto anche gente che usava invece di un file dei dischi in ram, che sono molto piu’ “scattanti” se servono per fare dei test o se sono su server che devono stare sempre up.

  2. simo_magic says:

    molto utile come cosa…magari messo dentro ad un disco fisso esterno diventa un buon modo di criptare i dati e nasconderli ad un ubblico meno informatizzato(tantissimi curiosoni ma che non sanno un’h di “montare” e filesystem)

    ps nel primo comando manca uno slash ;)

  3. LuNa says:

    ottimo, sapevo che si poteva fare ma non ho mai cercato un tutorial. mo mi capita nell’aggregatore :D perfetto
    [OT] Ti ho aggiunto al mio planet ,accessibile dalla mia home :D [/OT]

  4. gieffe says:

    utile e interessante… ^^

  5. grazie a tutti, slash sistemato…

  6. Marco says:

    dovresti sistemare i comandi perchè nel primo con dd crei /part/contenitore mentre nel secondo gli fai creare il file system in /part/test_filesystem (non dovrebbe essere /part/contenitore?)

    anche prima del comando mount devi creare la cartella /media/test_filesystem se non c’e’

    ciao,
    Marco

  7. Hai ragione, fare le cose e scriverle contemporaneamente non e’ il mio forte :-]

  8. stirner says:

    E se invece di un file fosse un device completo? Per esempio un clone di un HD con tutte le partizioni.

    ddrescue /dev/hda hda.dd ddrescue.log
    (clonato con ddrescue che gestisce anche i settori danneggiati, ddrescue.log è il log)

    fdisk -l -u hda.dd per avere le informazioni sulle partzioni

    mount -t “filesystem” -o loop,offset=”settore_inizio_part*512 hda.dd /media/test

    dove:
    “filesystem” potrebbe essere ext2, ext3,ntfs ecc…omettendo -t il sistema potrebbe indovinarlo
    settore_inizio_part è il settore di inizio della partizione ricavato da fdisk
    512 ho supposto, come probabile, un blocco da 512 byte

  9. unwiredbrain says:

    Mooolto interessante. Grazie per la guida! :-)

    Io non sono amministratore di Rete o che, ma può sempre tornare utile…

  10. Una rete e’ composta da almeno due pc, e ormai gran parte degli utenti avanzati quando cambia pc non butta il vecchio ma lo tiene per gli smanettamenti…

    …ed ecco pronta una rete da amministrare :-)

  11. [...] Giusto qualche giorno fa, cazzeggiando per le ultime news su Zio Budda mi sono imbattuto un un interessante articolo di un blog, dove veniva spiegata una tecnica mediante la quale è possibile utilizzare sotto Linux [...]

Leave a Reply

hitstatus