>

Google
 

 Benvenuto/a su www.classicistranieri.com, la Biblioteca Multimediale Libera

SCEGLI LA SEZIONE CHE PREFERISCI:

[Il blog della biblioteca] [Le nostre pubblicazioni] [Magnatune MP3 Project] [Lirica MP3] [il DVD ROM della biblioteca]

 [Letture Creative] [Musica Creativa] [GNUtemberg] [Appunti di informatica libera] [Portalinux]

[The "Punch Illustrated" Mirror] [PG-Historical Fiction Collection] [PG-Audiobook Collection] [Lethal]

[PG-Classicals of English Literature] [PG-Biblioteca Italiana] [PG-Bibliothèque Française]

[PG-Deutsche Bibliothek] [PG-Biblioteca Portuguesa] [PG-Biblioteca Española]

[PG-Illustrated Children Book Collection] [PG-CD ROM]

Se questi  contenuti ti sono stati utili, prendi in considerazione la possibilità di effettuare una libera donazione alla biblioteca, in modo che possano continuare a essere gratuiti per tutti.

OkSpot.net - Pubblicita popunder

Subscribe to RSS headline updates from:
Powered by FeedBurner

Appunti di informatica libera

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 69.   File system compressi

In alcune situazioni può essere conveniente l'utilizzo di un file system compresso. Se il file system deve continuare a essere accessibile normalmente, è necessario utilizzare strumenti appositi, assieme a delle estensioni appropriate nel kernel per consentire l'accesso ai dati contenuti.

In generale, ci si può aspettare che un file system compresso funzioni correttamente esclusivamente quando questo è stato realizzato per accedervi in sola lettura; diversamente, un file system compresso che preveda e consenta la modifica dei dati, per quanto tecnicamente fattibile, sarebbe troppo poco affidabile e sarebbero maggiori i problemi rispetto ai vantaggi del suo utilizzo.

Una caratteristica comune dei file system compressi è la dimensione dei blocchi: solitamente a blocchi più grandi corrispondono prestazioni di compressione migliori. La tabella 69.1 riepiloga i valori che solitamente si possono utilizzare.

Tabella 69.1. Dimensioni tipiche dei blocchi di un file system compresso.

512*20 512 byte
512*21 1 024 byte
512*22 2 048 byte
512*23 4 096 byte
512*24 8 192 byte
512*25 16 384 byte
512*26 32 768 byte
512*27 65 536 byte

69.1   Cloop

Con i sistemi GNU/Linux è possibile realizzare e accedere a un file system compresso denominato Cloop. (1) Il nome lascia intendere che si tratti di un file system contenuto in un file-immagine, compresso successivamente: Compressed loop.

La compressione è organizzata in blocchi, multipli di 512 byte; l'accesso a un file system Cloop avviene attraverso l'utilizzo di un modulo apposito del kernel (cloop.o), con il quale si rende disponibile poi un file di dispositivo che appare come quello di un file system normale, ma in sola lettura. Si osservi che per il momento, Cloop consente di accedere a un solo file system compresso per volta.

Cloop nasce dall'esigenza di permettere a un CD-ROM di contenere più dati della propria capacità nominale, mantenendo un accesso fluido; così, si mostra generalmente l'utilizzo di Cloop in riferimento a file system di tipo ISO 9660 (CD-ROM). Tuttavia, in generale conviene usare sempre solo questo tipo di file system, se si considera che è consentito un accesso in sola lettura e che altre caratteristiche di file system più complessi servirebbero solo ad aumentarne inutilmente la dimensione.

Per poter gestire un file system Cloop è necessario disporre degli strumenti necessari alla compressione ed eventualmente all'estrazione di un file-immagine Cloop, oltre al modulo compilato per il proprio kernel.

Per arrivare ad avere un file system compresso, la prima cosa da fare è realizzare il file-immagine di questo, cosa che di solito si fa con strumenti quali mkisofs o mkhybrid (capitolo 67), quindi si passa alla compressione usando normalmente create_compressed_fs secondo uno dei due schemi seguenti:

create_compressed_fs immagine_originale 65536 > immagine_cloop

cat immagine_originale | create_compressed_fs - 65536 > immagine_cloop

Il valore numerico che appare come secondo argomento di create_compressed_fs è la dimensione dei blocchi espressa in byte; generalmente si indica il valore massimo, pari a 65 536, per ottenere la compressione migliore. Dovrebbe essere possibile indicare valori da 512 a 65 536, secondo quanto riportato nella tabella 69.1.

L'esempio seguente mostra la creazione di un file system ISO 9660 con le estensioni Rock Ridge, a partire dal contenuto della directory /usr/, che viene compresso per generare il file usr.cloop:

mkisofs -R /usr | create_compressed_fs - 65536 > usr.cloop[Invio]

Se per qualche ragione fosse necessario ricreare il file-immagine di partenza, si può usare extract_compressed_fs:

extract_compressed_fs immagine_cloop > immagine_originale

cat immagine_cloop | extract_compressed_fs - > immagine_originale

Per accedere al file system compresso senza estrarlo è necessario il modulo cloop.o, che deve essere stato compilato espressamente per il proprio tipo di kernel. La descrizione della procedura da seguire per questo è allegata ai sorgenti di Cloop e qui non viene descritta. Una volta installato correttamente il modulo (probabilmente è necessario avviare depmod -a per ricostruire le dipendenze tra i moduli), lo si deve caricare con l'indicazione contestuale del file contenente l'immagine compressa a cui si vuole accedere:

modprobe cloop file=immagine_cloop

oppure:

insmod cloop.o file=immagine_cloop

Se si omette l'indicazione dell'argomento file=..., si ottiene una segnalazione di errore e il modulo non viene caricato. Tornando all'esempio già visto, si potrebbe trattare del file usr.cloop collocato nella directory radice del file system in uso:

modprobe cloop file=/usr.cloop[Invio]

cloop: Welcome to cloop v0.67
cloop: /usr.cloop: 12326 blocks, 65536 bytes/block,  (segue)
  largest block is 65562 bytes.

Si ricorda che si può accedere a un solo file system Cloop per volta.

Dopo aver caricato il modulo si può accedere al file system come se questo fosse nella sua dimensione normale, non compresso, facendo riferimento a un file di dispositivo speciale, che di solito è meglio creare al volo:

mknod /dev/cloop b 240 0[Invio]

Quando si ha la disponibilità del file di dispositivo /dev/cloop, si può montare il file system nel modo consueto:

mount -o ro -t tipo /dev/cloop punto_di_innesto

Tornando all'esempio già visto, se il file system è di tipo ISO 9660 e contiene quanto deve trovarsi nella directory /usr/, si può usare il comando seguente:

mount -o ro -t iso9660 /dev/cloop /usr[Invio]

69.2   Squashfs

Utilizzando un sistema con kernel Linux è disponibile anche il file system compresso Squashfs. (2) A differenza di Cloop, il file system ha caratteristiche proprie e non viene generato a partire da un altro tipo di file system. In pratica, il file system viene generato a partire dai dati da archiviare e non da un altro file system non compresso.

La creazione del file system avviene per mezzo del programma mksquashfs, che viene usato in uno dei due modi seguenti:

mksquashfs percorso file_squashfs [opzioni] [-e directory_esclusa...] 

mksquashfs percorso_1 percorso_2... file_squashfs [opzioni] [-e directory_esclusa...] 

In generale, i percorsi indicati, che possono essere file o directory intere, vengono copiati all'interno del file-immagine indicato come ultimo argomento prima delle opzioni. Tuttavia, l'utilizzo di una o dell'altra forma cambia il modo di inserire i dati relativi nel file-immagine di destinazione: se si archivia una directory soltanto, sarà il suo contenuto ad apparire nella directory radice del file system che viene generato, mentre in presenza di più percorsi (riferiti indifferentemente a file o a directory), questi vengono riprodotti nella destinazione mantenendo l'ultimo nome del percorso di origine. In generale, anche se sembra difficile da descrivere, in pratica questo funzionamento è quello intuitivo; si osservino i due esempi seguenti:

mksquashfs /usr/bin bin.sqsh

mksquashfs /usr/bin /usr/sbin xbin.sqsh

Nel primo caso si ottiene il file bin.sqsh, contenente un file system di tipo squashfs in cui, a partire dalla directory radice si trovano subito i file eseguibili contenuti nella directory di origine; invece, nel secondo caso il file system contenuto in xbin.sqsh avrà le directory /bin/ e /sbin/.

Oltre all'opzione -e che si vede indicata alla fine della riga di comando, può essere utile l'opzione -b n, con cui si richiede espressamente l'utilizzo di blocchi di una certa dimensione. Il valore predefinito di questi blocchi è 32 768 e dovrebbe essere possibile usare blocchi da 512 a 65 536 secondo la scansione della tabella 69.1.

Per poter accedere a un file system di tipo Squashfs è necessario un kernel adatto, ma per questo potrebbe essere necessario modificare il sorgente del kernel attraverso un file di differenze. Quando il kernel è in grado di leggere il file system di tipo Squashfs, basta montarlo come se fosse un file-immagine normale:

mount -o loop -o ro -t squashfs /usr.sqsh /usr

Come si può intuire, l'esempio mostra l'innesto del file system contenuto nel file-immagine /usr.sqsh a partire dalla directory /usr/.

69.3   Cramfs

Il file system compresso Cramfs, (3) per un kernel Linux, è molto simile per funzionamento a Squashfs, ma con qualche possibilità in meno; tuttavia rimane il primo a essere disponibile nel sorgente del kernel Linux senza bisogno di procurarsi file di differenze o moduli particolari. Anche in questo caso si comincia dalla creazione del file-immagine compresso, in modo simile a Squashfs, ma con il limite di una sola directory di origine:

mkcramfs -b dimensione_blocchi [altre_opzioni] directory_di_origine file_cramfs

Per montare il file-immagine si procede in modo simile a quanto già presentato con Squashfs:

mount -o loop -o ro -t cramfs file_immagine directory_di_innesto

Appunti di informatica libera 2003.06.29 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


1) Cloop   GNU GPL

2) Squashfs   GNU GPL

3) Cramfs   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome file_nbsp_system_compressi.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]