|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
[C/C++] dato 1 milione di file
la domanda non sarà affatto chiara ma ho il seguente problema che mi auguro qualcono abbia già trovato una soluzione.
Su un disco sono presenti 1 mione di file di diversa natura, tali file devono essere costantemente sincronizzati su un altro disco ma sorge il problema: come mi accorgo che i files sorgente sono "sani" cioè non corrotti ? Potrebbe accadere infatti che ho i dati sul disco A corrottti, sul disco B sani ed ottengo due dischi con dati corrotti. Purtropppo non ho conoscenze riguardo a questo genere di problematiche e nemmeno per quanto concerne il checksum dei dati: quale algoritmo adottare per mettersi al riparo da tali problematiche? grazie |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
Il lavoro che vuoi fare tu comunque io, ma è solo una mia opinione e parlando di SO Linux, lo farei con uno script bash che magari utilizzi rsync. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Generi un hash per ciascuno dei file in un momento in cui sei sicuro che il file sia "corretto" (per esempio, subito dopo la generazione del file stesso???) e te lo salvi da qualche parte. Quando devi sincronizzare un certo file, rieffettui il calcolo dell'hash e lo confronti con quello che ti eri salvato (che è sicuramente giusto). Se coincidono puoi essere certo che il file non ha subito cambiamenti quindi è integro e può essere sincronizzato. Come algoritmo di hash puoi usare sha1 (anche md5 dovrebbe andare più che bene).
Non so se ho risposto alla tua domanda perchè non ho ben capito da quali situazioni esattamente ti vuoi parare...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
Io avevo capito che in caso di modifiche che portavano ad una inconsistenza di dati del file A nel disco 1, la sincronizzazione con il file A del disco 2 non avvenisse, dato che ovviamente in questo modo si avrebbero 2 file con dati non validi. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Detta in altri termini: se decidi di fare un backup dei file presenti sul tuo disco in questo esatto istante, come fai a capire se tutti sono integri ? Bisogna inventarsi qualcosa. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Quote:
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
Altre forme di controllo non credo siano realisticamente possibili. Che ne so, metti che hai un mp3. In un certo momento, puoi verificare che il file sia corretto da un punto di vista del formato (header del formato per esempio) ma chi ti dice che non è stata cambiata una nota (almeno di sentirlo ovviamente
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Potrei creare l'hash di ogni file per tutto il disco, quindi di volta in volta crearlo per i file che cambiano e cioè quelli che sono stati modificati. Così facendo, prima di sincronizzare dovrei effettuare un controllo dell'hash file per file, determinare in percentuale quanti file sono ancora validi e quanti non lo sono ed in base a questi dati decidere se e come sincronizzare, il tutto in un tempo umano. |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
Inoltre se qualcosa in quell'MP3 è stato cambiato e funziona lo stesso allora il file è valido quindi non "corrotto". L'hash è utile per questi scopi solo e soltanto se hai già un file valido. |
|
|
|
|
|
|
#14 | |||
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
Quote:
Quote:
Se volete che il controllo si limiti alla correttezza "sintattica" dei vari files allora bisogna prevedere tutti i formati che si intende backupare e trattarli uno per uno (parecchio noioso come lavoro)...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|||
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
Quando parla di "corruzione" del file non si scappa: bisogna sapere con che tipo di dati si lavora (audio, video, testo, ecc...) e per ognuno di quelli conoscerne la ricetta. Quote:
|
||
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Oct 2007
Città: in città
Messaggi: 146
|
Una sorta di fingerprint?
Ultima modifica di Matt_245 : 20-04-2013 alle 19:27. Motivo: Non ho capito bene la domanda... |
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Un file rovinato perche' dei settori sono difettosi e' una cosa diversa da un file rovinato perche' il programma che l'ha generato aveva un bug piuttosto che uno che si e' rovinato a causa di un virus. La soluzione del checksum e' uno spostare il problema, perche' prima di fare il checksum devi essere sicuro che il contenuto e' corretto. In altri termini ti aiuta a verificare che il contenuto non e' stato alterato, ma non che fosse corretto fin da subito. Io distinguerei il problema almeno su due livelli - Corruzione a livello "fisico" (i.e. settori danneggiati, file system corrotto), causata dall'hardware o dal sistema operativo - Corruzione a livello applicativo, causato dai programmi utente. Il primo si risolve con una oculata scelta del sistema operativo e del supporto di monitoraggio. Ci sono file system (ZFS ad esempio) che per ogni blocco che scrivono su discono fanno un checksum che controllano ogni volta che lo rileggono; hai la certezza che se il S.O. ti dice che il dato e' stato salvato correttamente se si corrompe se ne accorge e, se ci piazzi pure un raid sotto, te lo corregge anche al volo. Per il secondo dipende molto dal tipo di file. Se ti puoi ragionevolmente fidarti del programma che genera i file, e questi sono "write once" (cioe' non li vai a modificare una volta creati) allora l'idea del checksum torna comoda, perche' puoi legare la creazione del file con quella del checksum. Il caso generale pero' e' difficile da risolvere, sia perche' i file li vai a modificare, sia perche' spesso un file "sbagliato" non e' tecnicamente corrotto (se ci sono pixel sbagliati in una immagine, l'immagine e' ancora di per se corretta). La soluzione piu' pratica e' quella di non tenere solo la copia corrente dei dati (cosa che di solito con i backup non si fa mai), ma la maggior parte possibile di storico. Per far di meglio, bisgona sapere l'utilizzo di quel milione di file...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Lo stesso discorso lo hai anche quando effettui un backup; se i file sono conti e pochi il problema quasi non si pone, ma se i idati sono tanti e ignoti la soluzione forse non esiste. |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Se ti preoccupi della corruzione fisica del file devi pensare di tenerli all'interno di un contenitore che consenta almeno il riconoscimento di questo stato (es .rar). Ma dati tutti i sistemi che ci sono oggi, se l'hardware è realizzato con criterio non è un problema che mi porrei... Quanto ad una eventuale modifica errata di un file a causa di bug del software che li scrive, credo che niente ti possa proteggere se non un'accurata test-suite del codice. Ma hai un vero problema specifico da risolvere o stai semplicemente pensando a tutto quello che potrebbe succedere in linea teorica? |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:31.




















