Ogni file si ricostruisce prima
Il filtro si applica, il file si rimonta e si confronta byte per byte con l’originale: al primo byte diverso il file entra com’è.
Funzioni
Tre idee reggono il programma: il tempo come unità della compressione, lo strato incomprimibile che si smonta e si rimette identico, un archivio che si usa mentre resta compresso. Ognuna ha la sua misura.
Prima idea
I livelli da 1 a 9 degli archiviatori descrivono l’algoritmo: lo stesso livello dura un minuto su un computer e dieci su un altro, e lo spazio restituito si scopre alla fine. TSR ti chiede quanto tempo vuoi dedicare, e lo converte in spazio sulla tua macchina e sui tuoi file.
Prima di comprimere, TSR campiona i file del lotto per fasce di dimensione e per tipo, e su quei campioni misura velocità e rapporto di ogni metodo sulla macchina che sta lavorando. Poi prova i filtri sui file veri e stima i duplicati. Il tutto costa da 1 a 3 secondi.
Vince il metodo più forte che rientra nel tempo scelto. Prima di partire TSR mostra durata, spazio risparmiato e tempo di estrazione; a lavoro finito confronta la stima col risultato.
Il risultato vero è quasi sempre migliore dell’annuncio. Sui due archivi ZIP di un utente la stima era di 12 secondi per 13 reali, e di 5,3 MB risparmiati per 5,27 MB; sul backup della posta il livello Medio ha dichiarato 21 secondi per 20. Il tempo di estrazione annunciato sta fra −2 % e +16 % di quello vero.
| Livello | Tempo |
|---|---|
| Velocissimo | ×1,1 |
| Veloce | ×3 |
| Medio | ×8 |
| Lento | ×20 |
| Molto lento | ×60 |
Per gli script e i servizi ci sono anche quattro profili fissi, senza calibrazione: --fast, --balanced, --backup e --max. Con un profilo fisso lo stesso input dà lo stesso archivio su ogni macchina.
Seconda idea
PDF, documenti Office, PNG, JPEG, video e archivi gzip contengono già uno strato di compressione. Un archiviatore generico li vede come rumore e restituisce dal 96 al 99,5 % dell’originale. TSR smonta quello strato, comprime i dati veri e lo rimette al suo posto byte per byte, dopo aver dimostrato di saperlo fare.
| Famiglia | Resa misurata |
|---|---|
| JPEG | −18,2 % sulle foto standard, −11,8 % sulle progressive; uno specialista del solo JPEG arriva a circa −22 % |
| gzip, zlib | −32 % sulla massa dei gzip che si riproducono |
| ZIP, Office, JAR | −43,5 % sui documenti Office moderni e sui JAR |
| PNG | −22,9 % sui PNG classici; gli ottimizzati viaggiano com’erano |
| Dall’87–99 % al 50–79 % dell’originale, sui PDF scritti con la zlib standard | |
| Video H.264 (MP4, MOV, MKV) | 2–3,7 % su film e riprese, dove gli altri valgono zero |
| Programmi (x86, ARM64) | 26,66 % contro il 28,22 % di xz |
| Audio PCM (WAV, AIFF, CAF) | Sul PCM puro 11,73 % contro il 17,85 % di FLAC -8 |
| Contenitori scritti con varianti | −18,5 % sui contenitori che prima entravano intatti |
| Immagini grezze a 16 bit | Tomografie −3,63 %, risonanze −1,33 %; si ferma dove peggiorerebbe |
Il filtro si applica, il file si rimonta e si confronta byte per byte con l’originale: al primo byte diverso il file entra com’è.
Il file smontato e il file com’è si comprimono tutti e due, e si tiene il più piccolo, file per file. Un filtro può soltanto far scendere la dimensione dell’archivio.
Un campione di testa, quarti e coda di ogni blocco riconosce i dati già compressi o casuali prima di lavorarci: sui dati casuali il profilo massimo risparmia il 94 % del tempo.
Restano fuori, misurati: i file scritti con varianti proprie dell’algoritmo (alcuni PDF, gli stream cifrati, le immagini ottimizzate con zopfli o oxipng), i formati senza uno strato da smontare (MP3, AAC, JPEG 2000, WebP) e i dati davvero casuali o cifrati. Entrano tali e quali, e il resto del lotto guadagna comunque.
Terza idea
TSR comprime a blocchi indipendenti, uno per core. Gli stessi blocchi aprono l’archivio a metà: si decomprime soltanto ciò che si tocca.
Anteprima di testi e immagini, albero con ricerca, «Dove va lo spazio», estrazione dei soli file scelti, verifica e riparazione, senza estrarre l’archivio.
tsr serve espone l’archivio via HTTP e come volume WebDAV di sola lettura: si monta nel Finder o in Esplora risorse, e ogni applicazione apre i file normalmente.
tsr mount monta l’archivio nel filesystem: grep, ffmpeg, un editor o una build aprono i file senza sapere che sono compressi, in 189 microsecondi a file.
Un film H.264 da 2,3 GB dentro un archivio si riproduce e si scorre con 252 MiB di memoria e un salto di 1,6 secondi: in VLC e in QuickTime il fotogramma corrisponde al punto scelto a ogni salto, e il file resta compresso per tutto il tempo.
Affidabilità
Lo stesso input, con lo stesso profilo, produce lo stesso archivio su Apple Silicon, su x86-64 e su ARM64 di classe server, con l’acceleratore grafico acceso o spento. Chiunque lo verifica con un comando sulla propria macchina.
Ogni blocco porta l’impronta BLAKE3 del suo contenuto, e ogni file la sua: la verifica dice quale file è danneggiato e in quale blocco. tsr t --profonda ricostruisce anche i file smontati; tsr scrub fa la stessa verifica piano, si ferma e riprende da dove era, e si programma una volta alla settimana.
Ogni archivio scritto da qualunque versione si legge con tutte le successive, per sempre. Il formato ha una specifica verificata da un lettore scritto soltanto da essa, e 49 archivi di prova letti da tre lettori indipendenti. Un lettore che trova qualcosa che non conosce lo dice, invece di restituire byte sbagliati.
Il programma è stato interrotto di colpo 2.752 volte a istanti casuali mentre creava, estendeva e compattava archivi: zero archivi persi. Su un errore o un annullamento il disco resta com’era prima del lavoro.
Protezione
Con una password l’archivio è cifrato con XChaCha20-Poly1305, indice compreso: nomi dei file, dimensioni, date e permessi restano segreti. La chiave nasce dalla password con Argon2id. La cifratura è per blocco, quindi anteprima, streaming e volume montato funzionano anche sugli archivi cifrati; nel caso peggiore misurato costa due centesimi di secondo e 4,2 KB su mezzo gigabyte.
Una password sbagliata e un archivio manomesso danno due errori diversi.
A richiesta l’archivio porta dall’1 al 30 % di parità Reed–Solomon: un danno entro la quota, sparso o contiguo, si ripara per intero in un file nuovo, e l’originale resta com’è. La parità copre i byte fisici, quindi chi custodisce un archivio cifrato può ripararlo senza poterlo leggere.
Misura di riferimento: 34 MB col 10 % di parità, 46 frammenti rovinati su 8.732 rimessi a posto in un decimo di secondo.
Backup
Un file identico a uno già presente diventa un riferimento, anche mesi dopo, quando l’archivio si estende; un blocco identico a uno già scritto si richiama invece di riscriversi. Col profilo di backup i blocchi si tagliano dove dice il contenuto, così un’inserzione in mezzo a un file non sposta tutto il resto.
| Scenario | TSR | 7-Zip al massimo |
|---|---|---|
| Database SQLite da 408 MB, due versioni dopo dodici modifiche | 100,0 MB | 109,8 MB |
| Un registro che cresce in coda | 29,2 MB in 26,2 s | 35,3 MB in 136,8 s |
| Immagine disco modificata montandola | 247,1 MB | 427,6 MB |
| Cartella da 389,5 MB più il suo backup completo | 36,6 % (il secondo: 2.190 byte) | 74,8 % |
macOS su Apple Silicon, Windows 10 e 11 a 64 bit, Linux x86-64 e ARM64: un’applicazione grafica e una riga di comando, che leggono gli stessi archivi.
Una parte del lavoro può girare sulla GPU (Metal, Vulkan): ogni risultato si verifica sulla CPU, e l’archivio resta identico al byte. Sul profilo bilanciato va da 1,4 a 2,9 volte più veloce; tsr gpu-check lo dimostra sulla tua macchina.
Riga di comando con uscita JSON, servizio di streaming, demone con coda di lavori, libreria C, pacchetti .deb e .rpm, immagini per i contenitori.
TSR per le aziendetsr c archivio.tsr cartella/ -t lento tsr t archivio.tsr --profonda tsr serve archivio.tsr La beta 0.10.2 è gratuita fino al 31 gennaio 2027. Gli archivi che crei si aprono per sempre, anche dopo la fine della beta.