Segnalo bug con l'utilizzo dell'opzione "Salva i file identici come riferimenti alla prima occorrenza" e WinRAR 6.21
Per replicare l'errore si può procedere così:
- copiare e incollare un file nella stessa cartella di origine (in modo da avere due file con contenuto identico)
- Aggiungere tali 2 file alla creazione di un archivio RAR 5 con l'opzione "Salva i file identici come riferimenti alla prima occorrenza" abilitata. (è indifferente se si abilita anche archivio solido, il bug è sempre presente)
- Il RAR risultate conterrà il primo file compresso e il secondo come riferimento al primo (dimensione 0 byte).
- Si procede ad eliminare il primo file nell'archivio (quello non di tipo riferimento)
Ci si aspetterebbe che quindi il secondo file avendo perso il contenuto a cui si riferiva si comporti come un hard link e cambiasse il suo contenuto non indicando più come tipo "riferimento" ma diventando il file stesso a cui si riferiva. Invece rimane come un file riferimento di 0 byte e ora che non è più presente l'altro, l'intero archivio è inutile e non estraibile.
Che ricordi solo una volta l'archivio si è comportato in modo diverso, correttamente come descritto per gli hard link. In tutti gli altri casi no, quindi credo sia proprio un bug essendo un comportamento non stabile e non desiderabile.
Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Moderatore: Andrea
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Probabilmente manca un passo: i due file identici devono essere in 2 cartelle separate: ad esempio uno nella cartella principale ed una in una sotto-cartella.
Ti riporto quanto c'è nella guida:
quindi al momento WinRAR non ricrea l'archivio ripristinando i contenuti dei file collegati se viene cancellato il primo: è riportato "nero su bianco" nella guida.Questo permette d ridurre la dimensione dell'archivio ma comporta alcune restrizioni all'archivio creato. Non dovete rimuovere o rinominare dall'archivio il primo file di quelli identici dopo che l'archivio stesso è stato creato, pena la mancata estrazione dei file identici seguenti in quanto il riferimento non ha più valore.
Si potrebbe chiedere all'autore di implementare questa funzione... anche se non credo gli darà un'alta priorità.
Cordialmente,
Andrea
Supporto WinRAR.it
Andrea
Supporto WinRAR.it
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Come immaginavo
![Smile :)](./images/smilies/icon_smile.gif)
Eugene ha scritto:Technically it is possible, but complicated and would involve
an additional pass through archive before deleting files.
Otherwise we wouldn't know if there are other files referring
a file we delete.
Maybe it will be done sometimes, but I can't promise it now.
Cordialmente,
Andrea
Supporto WinRAR.it
Andrea
Supporto WinRAR.it
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
In realtà basta farlo anche nella stessa cartella, se non si ha modificato il comportamento del gestore di copia file di Windows, crea un file uguale con nome differente (aggiungendo un suffisso "Copia").
Non avevo letto quel passo della guida e mi è sembrato appunto strano che in una delle prove un archivio aveva funzionato come mi aspettavo, anche cancellando il file completo (primo file di riferimento).
Per evitare quindi di cancellare un file che è usato come riferimento per altri in un archivio, vi è un modo per identificare (ad esempio con la funzione trova) se il file selezionato ha dei riferimenti?
Ho notato che il file completo ha riportato l'hash BLAKE 2 mentre i riferimenti no quindi non posso fare una ricerca per stesso hash.
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Non puoi fare la ricerca sull'hash da WinRAR, che sia Blake2 o CRC32, puoi fare qualcosa dalla modalità carattere (shell) con il comando "v" (in questo caso è meglio scegliere Blake2 in quanto il CRC32 potrebbe non essere univoco) utilizzando un minimo di programmazione, ma secondo me non ne vale la pena.Werve ha scritto: ↑20 giu 2023, 13:12Per evitare quindi di cancellare un file che è usato come riferimento per altri in un archivio, vi è un modo per identificare (ad esempio con la funzione trova) se il file selezionato ha dei riferimenti?
Ho notato che il file completo ha riportato l'hash BLAKE 2 mentre i riferimenti no quindi non posso fare una ricerca per stesso hash.
Per me devi operare una scelta all'inizio:
- se devi archiviare molti file uguali e l'archivio non lo modifichi più (es. per backup) utilizza l'opzione "Salva i file identici come riferimenti alla prima ricorrenza;
- se devi archiviare molti file di cui alcuni potrebbero essere uguali ed è facile che debba modificare l'archivio, non utilizzare l'opzione prima indicata, anche perché se archivi file dello stesso contenuto la dimensione compressa dei file dopo il primo è esigua (vedi l'esempio seguente, dove su 2.388 byte ne memorizza solo 11 compressi) grazie ai dizionari propri degli algoritmi di compressione.
Cordialmente,
Andrea
Supporto WinRAR.it
Andrea
Supporto WinRAR.it
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Capisco, purtroppo penso che dovrò procedere con l'opzione "Salva i file identici come riferimenti alla prima ricorrenza" ma ricordarmi di non cancellare i file già presenti ma solo di aggiungerne. O alla peggio estrarre il tutto e ricreare l'archivio (o convertirlo di formato).
La seconda opzione nel caso di molti file e/o di dimensione molto grande per ogni file (ad esempio diversi GB ogni file) credo sia da escludere che il contesto di un dizionario, anche in modalità archivio solido, possa comprimere in modo paragonabile a quella opzione con file di riferimento.
Un esempio di caso d'uso: archiviare diversi backup completi di microSd (200+ GB di dati in ogni backup). Con quella opzione si risparmierebbe molto spazio escludendo di aggiungere lo stesso contenuto per i file rimasti inalterati (ma comunque presenti come riferimento nel caso si volesse estrarre solo un determinato backup).
Ma ad un certo punto, continuando in questo modo si finirebbe lo spazio, quindi prima o poi si vorrebbe fare una pulizia delle vecchie versioni backup e da qui il problema che la versione più vecchia probabilmente è anche la prima archiviata, quindi usata come riferimento per le seguenti.
Ci si dovrebbe ricordare di estrarre tutte le altre versioni e ricreare l'archivio (magari una alla volta, poiché in questo scenario d'uso potrebbero accumularsi nell'archivio più dello spazio necessario senza compressione).
La seconda opzione nel caso di molti file e/o di dimensione molto grande per ogni file (ad esempio diversi GB ogni file) credo sia da escludere che il contesto di un dizionario, anche in modalità archivio solido, possa comprimere in modo paragonabile a quella opzione con file di riferimento.
Un esempio di caso d'uso: archiviare diversi backup completi di microSd (200+ GB di dati in ogni backup). Con quella opzione si risparmierebbe molto spazio escludendo di aggiungere lo stesso contenuto per i file rimasti inalterati (ma comunque presenti come riferimento nel caso si volesse estrarre solo un determinato backup).
Ma ad un certo punto, continuando in questo modo si finirebbe lo spazio, quindi prima o poi si vorrebbe fare una pulizia delle vecchie versioni backup e da qui il problema che la versione più vecchia probabilmente è anche la prima archiviata, quindi usata come riferimento per le seguenti.
Ci si dovrebbe ricordare di estrarre tutte le altre versioni e ricreare l'archivio (magari una alla volta, poiché in questo scenario d'uso potrebbero accumularsi nell'archivio più dello spazio necessario senza compressione).
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Uscendo dal mondo della Compressione, non converrebbe utilizzare dei backup incrementali e solo ogni tanto (settimane?) dei backup completi? Sicuramente occuperesti un po' di memoria in più, ma penso sia un buon compromesso tra risparmio dello spazio, recupero dati e svecchiamento backup "sicuro".Werve ha scritto: ↑20 giu 2023, 18:50 Un esempio di caso d'uso: archiviare diversi backup completi di microSd (200+ GB di dati in ogni backup). Con quella opzione si risparmierebbe molto spazio escludendo di aggiungere lo stesso contenuto per i file rimasti inalterati (ma comunque presenti come riferimento nel caso si volesse estrarre solo un determinato backup).
Tra l'altro ho proseguito con l'autore la discussione sull'implementazione o meno di una cancellazione sicura dell'originale e sono emerse complicazioni non indifferenti, anche alla luce delle molteplici e potenti funzioni di recupero dati di WinRAR.
Cordialmente,
Andrea
Supporto WinRAR.it
Andrea
Supporto WinRAR.it
Re: Bug WinRAR 6.21 con "Salva i file identici come riferimenti alla prima occorrenza"
Si, per nuove catene si può procedere così ma se si cambiano HDD, valori GUID o simili, solitamente i programmi che si occupano di effettuare backup incrementali non riconoscono più quale backup precedente abbinare per la ricerca delle differenze o forzano la creazione di un nuovo backup completo.Andrea ha scritto: ↑21 giu 2023, 19:34 Uscendo dal mondo della Compressione, non converrebbe utilizzare dei backup incrementali e solo ogni tanto (settimane?) dei backup completi? Sicuramente occuperesti un po' di memoria in più, ma penso sia un buon compromesso tra risparmio dello spazio, recupero dati e svecchiamento backup "sicuro".
Inoltre nel caso di catene backup vecchie o di file sparsi trovati non sarebbe più possibile ri archiviare tutto con altra metodologia.
Il vantaggio con un gestore di file come WinRAR sarebbe scegliere quali file (anche cartella per cartella) aggiungere all'archivio senza dover unificare i file originali in un unico percorso (passo necessario per i programmi che effettuano backup incrementali che ho provato) e si otterrebbe anche una migliore compressione.
Inoltre il caso presentato avente file identici nei percorsi originali sparsi su più drive renderebbe impossibile anche l'uso dei hard link nel filesystem NTFS, sia per una questione tecnica che logica poiché basti pensare cosa accadrebbe se in un momento non fosse presente anche uno dei drive di riferimento.
E penso che la deduplicazione sarebbe un sostanziale miglioramento per l'efficacia degli algoritmi di compressione (idealmente non solo tra file interi ma anche per parti di file, come mi sembra facciano alcuni filesystem) così da concentrarsi a comprimere solo dati effettivamente rilevanti, unici.
EDIT: Sembra che ho trovato un progetto utile per questi scenari https://github.com/fcorbelli/zpaqfranz
Con cancellazione sicura dell'originale qui intendi un discorso di dati ancora presenti (nascosti all'utente) invece di cancellati o sovrascritti e quindi recuperabili oppure il discorso per abbinare i file di tipo riferimento al contenuto anche dopo aver cancellato il primo file (avente il contenuto a cui si riferiscono)?
Per il secondo caso, ti riferisci alle "informazioni per il recupero" che si possono aggiungere ad un archivio?
In effetti anche risolvendo la questione dei file di riferimento utilizzando un confronto con gli hash BLAKE 2 archiviati e scambiando il contenuto le "informazioni per il recupero" credo sarebbero da ricalcolare, quindi nel caso peggiore ricreando l'intero archivio.
Ma ho notato che anche quando si inserisce una nuova cartella ad un RAR esistente procede alla creazione di un nuovo archivio (probabilmente per il mutamento del contesto necessario per gli algoritmi di compressione, specialmente negli archivi solidi).