martedì 22 ottobre 2013

Rompere i file quando rompono le palle

Immaginate un ragazzo schivo, introverso e utente linux.
È riuscito a trovare una ragazza che lo tratti come una persona quasi normale, l'ha convinta ad installare una distribuzione del pinguino e vuole definitivamente conquistarla, guardando assieme a lei una commedia romantica che esprima tutto ciò che lui, da solo, non sa esprimere.
Arriva finalmente il grande giorno e solo negli ultimi minuti il ragazzo realizza che non può trasportare l'intero suo PC multicore a casa della ragazza. Il ragazzo balza alla scrivania, collega un disco esterno al PC ed inizia il trasferimento del file, il quale prosegue spedito, fin in prossimità dei 4 gigabyte... al raggiungimento dei quali... Tragedia!!! 
Messaggio d'errore, trasferimento non completato, operazione abortita.
RMS consacrato, Linus, padre di tutti, sempre tu sia lodato, perchè mi avete abbandonato? Perchè Bill serpeggia tra le mie speranze in questa giornata? Perchè Steve banchetta alla mia mensa, con il mio cuore, in questo momento? Probabilmente è questo che passa per la testa del ragazzo...
Il ragazzo ritenta l'operazione con un altro disco... L'esito, lo stesso.
Poi un altro.
Poi un altro ancora.
Sempre senza gioia. Il ragazzo non sapeva che i file system FAT non supportano file di dimensioni superiori ai 4 gigabyte... ed i suoi dischi erano tutti formattati in FAT.

"Non ti sei nemmeno degnato di passare. Non parlarmi mai più. Nerd."

--------------------------------

Bene, ricomponetevi, raccogliete e cestinate i cleenex bombi di lacrime e ragionate un attimo con me? Questa terribile tragedia si sarebbe potuta evitare?
Al di là del fatto che un utente Linux inconsapevole di questo limite del file system FAT merita la solitudine, la risposta è : sarebbe stato sufficiente per il ragazzo sapere che un file, così come si può creare, si può rompere e ricomporre...


Potrebbe capitare anche a voi di dover trasferire file di dimensioni superiori a 4 gigabyte su file system FAT e rendervi conto che il semplice trasferimento, come siete abituati a farlo, non è possibile, poichè come detto sopra il fs FAT non supporta file di dimensioni superiori a 4GB.
Potreste altresì avere con voi due memorie formattate in EXT4, fs che viceversa supporta file di grandi dimensioni... ma le vostre due memorie potrebbero essere di soli 4GB di capienza, mentre il file da trasferire occupa 6 gigabyte.
Come vedete, i casi potrebbero essere molteplici... come fare?
Si tratta di una operazione molto semplice.

È sufficiente ricorrere al comando split che ci permette di suddividere un file in tante porzioni quante ne vogliamo, di dimensione desiderata.
Sfruttiamo un esempio, per semplificare. Poniamo di volere spezzare la nostra commedia romantica in modo da poterla trasferire su di un disco formattato in FAT:
split -b2000m commediaromantica.avi commediaromantica.avi
split: questo comando suddivide il file in parti di dimensione desiderata. Split è solitamente preinstallato nelle distribuzioni Linux, se sulla vostra non lo è, sicuramente lo troverete nei repos.

-b2000m: questo argomento serve a determinare la dimensione delle singole parti nelle quali il file verrà spezzato. Nell'esempio, 2 gigabyte ciascuna. Volessimo parti da 500 megabyte ciascuna, sarebbe sufficiente inserire -b500m.

commediaromantica.avi: il nome del file da spezzettare.

commediaromantica.avi: il nome da dare alle singole parti, il quale può essere qualsiasi, ma, come nell'esempio, io preferisco lasciare lo stesso nome dell'originale, poichè il potente split offre il vantaggio di aggiungere automaticamente delle lettere identificative alle varie parti.
Dunque, una volta lanciato il comando, ci ritroveremo, ad esempio, 3 file chiamati commediaromantica.aviaa, commediaromantica.aviab, commediaromantica.aviac.

AVVERTENZA: se lavorate con file di grosse dimensioni, tenete presente che il file originale non viene eliminato, quindi su disco andrete a "raddoppiare" lo spazio occupato dal file, poichè oltre ai 6GB del file ci saranno i 6GB occupati dalle 3 parti da 2GB ciascuna. Occhio allo spazio libero!

Questo per quanto riguarda lo sfracellare i file.
E per ricomporli? Niente di più semplice.

Una volta trasferite, dove desiderate, le singole parti (ad esempio su disco FAT e poi nuovamente su altro disco EXT4) sarà sufficiente "riassemblarle" con il comando:
cat commediaromantica.avi* > commediaromantica.avi
Nell'esempio, cat andrà a ricomporre le tre parti commediaromantica.aviaa, commediaromantica.aviab, commediaromantica.aviac nell'unico e leggibile file commediaromantica.avi.

Attenzione: ovviamente, vale la stessa avvertenza di cui sopra, per quanto riguarda l'attenzione allo spazio libero.

Questo è tutto, come vedete si tratta di due comandi in croce per un'operazione di pochi attimi... ah, chissà come sarebbe cambiata la vita del ragazzo se avesse letto magliettabianca...