Sto confrontando due grandi directory su due dischi esterni FireWire 800 usando
diff -r /path/to/directory1 /path/to/directory2
La dimensione della directory (e delle sue sottodirectory) su un disco FireWire è 118.2 GB per 30.000 elementi e 119.56 GB per 30.031 elementi.
Sono rimasto sorpreso dalle molte differenze riportate nell'output, come
Binary files /path/to/directory1/with/subdirectory/file_xyz and /path/to/directory2/with/subdirectory/file_xyz differ
e ha iniziato a confrontare alcuni di essi individualmente. Quando li paragono con
diff /path/to/directory1/with/subdirectory/with/subdirectory/file_xyz /path/to/directory2/with/subdirectory/with/subdirectory/file_xyz
o anche
diff /path/to/directory1/with/subdirectory/ /path/to/directory2/with/subdirectory/
diff
non riporta alcuna differenza tra questi file o directory.
Quale potrebbe essere una ragione per cui il "confronto di grandi dimensioni" riporta così tante differenze (o apparentemente fallisce), mentre il confronto tra blocchi più piccoli non lo fa?
Modifiche dal post originale:
- La versione di
diff
che sto usando è GNU diffutils 2.8.1. - Solo una congettura sfrenata qui, ma potrebbe avere qualcosa a che fare con il fatto che queste directory sono su hard disk esterni che potrebbero verificarsi una sorta di timeout?
- Ho eseguito un altro confronto e sono stato nuovamente presentato con molte differenze tra quelle directory. Ho quindi impostato il Risparmio energia della preferenza di sistema per non impostare il display in modalità di sospensione per 1 ora, poiché avevo misurato con
time diff -r /path/to/directory1 /path/to/directory2
che sono necessari tra 45 e 50 minuti per la fine del diff. I miei dischi rigidi e il Mac non vanno mai a dormire. Ho quindi smontato entrambi i dischi e li ho rimontati. Suona nuovamente il diff e voilà non trova differenze a parte un file. Ho confrontato manualmente quello che ho segnalato un file diverso e l'ho trovato identico.
Questo sembra confermare ciò che ho trovato confrontando i blocchi più piccoli in precedenza. Sembra anche confermare l'esistenza di un timeout come sospettato in precedenza, ma mi chiedo ancora che se un drive FireWire diventerebbe non disponibile o qualsiasi altra cosa, diff non dovrebbe riportare una differenza, ma piuttosto dire "file non disponibile" o "Solo in / yada / yada / directory: file_xyz".
È interessante notare che il diff prima della rimonta ha impiegato 28 minuti, dopo la rimonta ci sono voluti quasi 51 minuti.
Alla luce di ciò : Cosa posso fare per evitare che succeda qualcosa del genere?
Ovviamente si potrebbe dire di non impostare mai il display per andare a dormire o altro, ma difficilmente sembra risolvere il problema sottostante. Qualcos'altro deve succedere, non riesco proprio a capire cosa.
Per inciso, in altre precedenti occasioni, dopo un po 'di inattività su quei dischi rigidi FireWire stavo cercando di scrivere su un file e ha ottenuto questo messaggio di errore codice -50 "(badate bene che non l'ho visto durante l'operazione di diff). Potrei sempre" risolvere "il problema smontando e rimontando le unità, ma credo che ci sia una differenza completamente diversa soluzione a questo:
Lesoluzionicome quelle presentate qui difficilmente sembrano affrontare il problema di fondo.