Home > Comandi Console, Linux, Pacchetti, Partizioni, Ubuntu > File system compresso con compFUSEd

File system compresso con compFUSEd

18 gennaio 2009

Sono alcuni anni che attendo la possibilità nativa per ext3 di comprimere i files, per diminuire lo spazio occupato su disco, ogni volta rimandata, forse l’avrà ext4 mentre reiser4 che già la consente non è supportato su Ubuntu,.

Insomma alla fine l’unico file system comprimibile usabile restava il solito NTFS di Microsoft, ma troppo lento per essere utilizzabile decentemente.Tra numerosi progetti più o meno abbandonati ne trovo uno chiamato compFUSEd, poi morto e ripreso col nome compFUSEd-GISMO, (probabilmente morto anch’esso come si può notare dal sito internet abbandonato e malfunzionante), lo metto alla prova e sembra utilizzabile e interessante.

Prima di iniziare preciso che si tratta di un progetto sperimentale, probabilmente cela anche difetti non notati e se ne sconsiglia l’utilizzo in ambienti con dati importanti.

Si tratta di un file system basato su FUSE (file system in user-land) e quindi consente montaggio e smontaggio anche da parte di utenti, senza moduli kernel da installare.

L’ultimo sorgente disponibile ad oggi sul sito è datato 31/12/2007, quello più aggiornato del 2008 di cui si parla tra gli argomenti del sito non sono riuscito a trovarlo. L’ho semplicemente compilato per provarlo e impacchettato (utilizzando Debian Package Maker) per chiunque volesse metterlo all’opera senza armarsi di compilatori.

E’ scaricabile da qui e si installerà sotto la directory /usr/local, ponendo il file di configurazione generale sotto /usr/local/etc/compFUSEd.conf. E’ possibile indicare all’interno di questo i file system da montare per tutti gli utenti o all’avvio del sistema oppure, nel caso di una postazione monoutente è possibile creare un file di configurazione personalizzato all’interno della propria home sotto il nome .compFUSEd (senza .conf).

Il suo funzionamento è molto semplice: i dati vengono posti normalmente in una directory montata con compFUSEd e vengono compressi in maniera trasparente e memorizzati in un’altra directory chiamata backend.

Un esempio renderà sicuramente meglio l’idea del suo funzionamento, avviamo quindi un editor di testo qualsiasi e copiamo quanto segue:

[/home/muflone/compressa/]
backend = /home/muflone/compressa.backend/
compression = /usr/local/lib/compFUSEd/cf_lzo2.so
writer = /usr/local/lib/compFUSEd/writer_smarter.so
chunk_max = 100
chunk_size = 8192
exclude = tgz gz bz2 tbz2 zip rar jpg avi mp3

Modificare il percorso della propria home, qui /home/muflone con quello corretto e salvare il file col nome .compFUSEd all’interno della propria cartella home.

Il file di configurazione definisce una directory chiamata compressa che si appoggerà su disco ad una seconda directory chiamata compressa.backend. I dati all’interno saranno compressi con l’algoritmo lzo2, ma ne esistono anche altri a disposizione sempre sotto /usr/local/lib/compFUSEd. L’ultima riga indicherà di non comprimere le estensioni indicate, poiché trattasi di formati già compressi che non produrrebbero alcun miglioramento nella compressione.

Creare quindi le due cartelle, compressa e compressa.backend con:

mkdir /home/muflone/compressa
mkdir /home/muflone/compressa.backend

Montiamo quindi il file system mediante:

cf_main /home/muflone/compressa/
Reading config file /usr/local/etc/compFUSEd.conf
done reading configuration file.
Reading config file /home/muflone/.compFUSEd
done reading configuration file.
---------------------------------------------
backend /home/muflone/compressa.backend/
compression /usr/local/lib/compFUSEd/cf_lzo2.so
chunk writer /usr/local/lib/compFUSEd/writer_smarter.so
chunk size 8192
chunk max 100
compression threshold 0
---------------------------------------------
Filesystem info file /home/muflone/compressa.backend//.cf_fs_info.bin
Can not read fs info, this is normal if it is the first time your start it.
No such file or directory
Scanning /home/muflone/compressa.backend/ please wait...done!
uncompressed data: 0 bytes
compressed data  : 0 bytes
dir levels	 : 0
number of files	 : 0
number of dirs	 : 0

La prima volta che la directory verrà montata sarà mostrato un innocente errore sull’assenza del file .cf_fs_info.bin che potrà essere tranquillamente ignorato. Si tratta dell’indice dei files compressi nel file system

Eseguendo mount è possibile verificare che la directory compressa è stata montata:

cf_main on /home/muflone/compressa type fuse.cf_main

La directory compressa è quindi liberamente utilizzabile, sia in lettura che scrittura. Copiamoci alcuni dati all’interno e osserviamo che accade con:

du --apparent-size -h compressa compressa.backend
101M	compressa
38M	compressa.backend

Il parametro –apparent-size mostrerà l’occupazione non reale su disco ma quella determinata dalle dimensioni dei files. La directory compressa conterrà oltre 100 MB di dati, mentre il backend soltanto 38 MB. Il risparmio di spazio su disco è evidente.

Al termine dell’utilizzo la directory potrà essere smontata con

fusermount -u /home/muflone/compressa

Tutti i dati resteranno conservati compressi nella directory backend, per cui è importante non modificare nulla al suo interno nè ovviamente eliminarla. Il nome scelto compressa.backend è naturalmente modificabile a piacimento, anzi si consiglia di nascondere la directory backend anteponendo un punto (ad esempio come .compressa.backend) oppure utilizzando il file Hidden di Nautilus, per evitare errori accidentali.

Esistono vari plugin di compressione con differenti algoritmi all’interno della directory /usr/local/lib/compFUSEd:

  • cf_bzip2.so comprimerà utilizzando bzip2
  • cf_lzo.so comprimerà utilizzando lzo versione 1
  • cf_lzo2.so comprimerà utilizzando lzo versione 2
  • cf_zlib.so comprimerà utilizzando zlib
  • cf_none.so in realtà non comprime affatto i dati, è puramente dimostrativo o di test

I differenti algoritmi di compressione potranno essere utilizzati nel file di configurazione generale o personale.

Una volta compressi i dati con un algoritmo non è possibile cambiare l’algoritmo senza farsi una copia, eliminare il file system compresso e ricrearlo da capo. Per questa ragione è possibile conoscere l’algoritmo di compressione di una directory analizzando un qualsiasi file all’interno della directory backend con:

cf_inspect /home/muflone/compressa.backend/*
compressed with lzo2
Compression: 1881 to 958 (50.9%)
Compression chunk size: 8192 bytes
TOC located at 950 and contains 1 entries
Displaying TOC:
toc size 1
[930,20]

Sarà possibile notare l’algoritmo di compressione sulla prima riga, qui indicato lzo2. Per effettuare il controllo di congruenza dei dati smontare il file system compresso e utilizzare:

fs_fsinfo /home/muflone/compress.backend/
uncompressed data: 0 bytes
compressed data  : 0 bytes
dir levels	 : 0
number of files	 : 0
number of dirs	 : 0
cf_fsinfo can do a full check, proceed? If so type 'YES': YES
Scanning the entire backend directory.
This may take a long time depending on your filesystem...
/home/muflone/compressa.backend/prova.log
compFUSEd mount contains :
820 files in 0 directories
100.81 Mbytes data on disk
37.33 Mbytes compressed data

uncompressed data: 105705625 bytes
compressed data  : 39142458 bytes
dir levels	 : 0
number of files	 : 820
number of dirs	 : 0

Per ulteriori informazioni:
Home page del progetto compFUSEd GISMO
CompFUSEd GISMO new configuration
Mount compFUSEd from /etc/fstab
Save disk space – use compFUSEd to transparently compress filesystems

  1. Mikele
    15 luglio 2009 alle 21:54

    Salve,
    CompFUSEd comprime solo una determinata cartella o può anche comprimere l’intero disco?
    Compilandolo su Ubuntu ho il seguente errore:
    /usr/bin/ld: cannot find -lprofiler
    collect2: ld returned 1 exit status

    • 15 luglio 2009 alle 22:23

      essendo un fs basato su fuse non può essere usato per comprimere il sistema operativo.
      puoi comprimere un altro disco, anche tutto intero ma non il sistema, che deve prima avviarsi e caricare i moduli di fuse per consentire l’utilizzo di compFUSEd

      quanto all’errore non saprei dirti, col nuovo gcc-4.3 non compila neanche lamentando altri errori.
      prova con un gcc meno recente o in ultima ipotesi il pacchetto binario precompilato

      ciao

  2. Mikele
    16 luglio 2009 alle 7:15

    Se sullo stesso disco creassi una partizione dove spostare la /home /usr/src e /tmp sarebbe possibile con CompFUSEd comprimerla?

  3. 16 luglio 2009 alle 11:47

    la /tmp probabilmente dovresti rimontarla col nuovo percorso con -o remount

    per le altre due non credo ci siano problemi, non essendo necessarie all’avvio del sistema ma sulla home io ci rifletterei, non mi fiderei così tanto di compfused e in caso di disastro chi te li recupererà più i dati?

    ciao

  4. Mikele
    16 luglio 2009 alle 14:16

    Ti chiedo tutto questo perché sto tentando di mettere Ubuntu Netbook Remix su un Olidata JumPC con 2GB di HDD:
    http://forum.ubuntu-it.org/index.php/topic,301211.msg2224766.html
    http://ubuntuforums.org/showthread.php?t=1206559
    Prendendo spunto da questa guida:
    http://www.psychocats.net/ubuntu/minimal
    sono riuscito ad installare quello che serve rimanendo con un misero spazio libero di circa 100MB e non dire che volevo installare OpenOffice.
    Quindi cercavo soluzione in CompFUSEd.

  5. 16 luglio 2009 alle 14:24

    compfused gira su fuse quindi puoi comprimere i dati in userland, vuol dire che ha bisogno di un sistema già avviato per funzionare

    quindi è esclusa l’installazione della root e di usr/bin.

    la tmp puoi montarla in ram usando tmpfs e quindi ti liberi dall’occupazione su disco

    usr/src probabilmente non ti serve nemmeno averla in un sistema minimale, tuttavia nulla toglie che tu possa comprimerla.

    addirittura per quelle posizioni statiche potresti usare sistemi con miglior compressione quali lzma o squashfs

    ciao

  1. No trackbacks yet.
I commenti sono chiusi.
%d blogger cliccano Mi Piace per questo: