Leopard: lo spostamento dei file non è sicuro?


Da qualche giorno circola in rete una notizia secondo cui il Finder di Leopard sarebbe affetto da un bug, a causa del quale sarebbe possibile la perdita di dati in caso di interruzione dello spostamento di file tra 2 directory.

Se fosse vero, sarebbe una svista clamorosa da parte di Cupertino: ma non affrettiamoci a sparare sentenze e vediamo di analizzare la situazione.

Quando un cartella viene spostata dalla directory d’origine a una nuova destinazione, il Finder esegue uno script unix (che sappiamo essere alla base di OS X) molto simile a questo:


move(source, destination) {
returnVal = copy(source, destination);

if (returnVal == TRUE) { // copy success
delete(source);

else { // copy fail
message("Move failed")

Vediamo che in realtà l’operazione di spostamento è costituita da due fasi distinte, ovvero la copiatura e, se questa è confermata, la cancellazione del file di origine.
A causa della loro peculiare architettura, i sistemi *NIX eseguono questo script in maniera distinta per ogni file e directory che si vogliono spostare.
Se, dunque, si comanda di spostare una cartella “test” con all’interno un file “prova.txt” dalla posizione /~utente/ alla posizione /Volumes/HD2/~utente/documenti/ ecco la sequenza di operazioni che il sistema effettuerà:

  • creazione della directory /Volumes/HD2/~utente/documenti/test
  • conferma della creazione
  • copia del file /~utente/test/prova.txt in /Volumes/HD2/~utente/documenti/test/
  • conferma della copia
  • cancellazione di /~utente/test/prova.txt
  • cancellazione di /~utente/test/
  • Possiamo apprezzare il fatto che il sistema invii la conferma per ogni file presente nella cartella e poi per la cartella stessa. Se ci si trova di fronte a più directory l’una contenuta nell’altra, l’operazione verrà eseguita secondo la gerarchia.

    Se passiamo ad analizzare il funzionamento di un sistema DOS, ci troviamo di fronte ad un modo di agire molto diverso.
    Lo spostamento della directory “test” (che contiene prova1.txt e prova2.txt) da C:/ a D:/documenti è costituito dalle seguenti operazioni:

  • creazione della directory D:/documenti/test/
  • copia del file prova1.txt in D:/documenti/test/
  • copia del file prova2.txt in D:/documenti/test/
  • conferma della copia dei file
  • cancellazione della directory c:/test/ e del suo contenuto
  • Tra i due metodi non se ne può individuare uno migliore, sono semplicemente diversi a causa, come abbiamo già detto, della differente architettura dei due sistemi.

    In caso di interruzione durante lo spostamento delle directory, i due sistemi si comporteranno in maniera egualmente differente.

    Su *NIX (e dunque OS X), si avranno una parte dei file nella nuova destinazione ed una parte in quella vecchia.
    Su DOS (e dunque Windows) si avrà la cartella di origine ed il suo contenuto intatti, mentre nella destinazione i file non saranno mantenuti mancando la conferma della copia totale del contenuto.

    In entrambi i casi, quindi, non si ha alcuna perdita di dati.

    Problemi possono però sopraggiungere quando lo spostamento è ibrido, per esempio volendo spostare una directory ed il suo contenuto da un disco Mac ad un server SAMBA su una macchina Windows.
    In questo caso, mentre OS X cancellerà i file di origine via via che riceverà la conferma della copia, il server SAMBA manterrà definitivamente il contenuto solo quando riceverà la conferma che tutto sarà stato copiato. E’ ben chiaro che, se si dovesse interrompere la connessione, ci si ritroverà con meno dati di quanti se ne aveva in origine.

    Alla luce di quanto detto finora è facile evincere il fatto di non trovarsi di fronte ad un bug di OS X (o di UNIX), ma ad un problema di comunicazione tra 2 piattaforme diverse.
    Un problema che, tra l’altro, non giunge con Leopard, ma esiste praticamente da sempre.

    In ogni caso, pur non potendo attribuire la responsabilità ad Apple, è comunque opportuno compiere due operazioni:

  • segnalare questo comportamento ad Apple (ma si può dire la stessa cosa di Microsoft) che, pur trattandosi di un caso limite, può risolverlo con relativa facilità
  • avere la precauzione, quando si opera su server remoti, di utilizzare la funzione “copia” in luogo dello spostamento.
  • [Grazie delle segnalazioni]

    Ti consigliamo anche

    Link copiato negli appunti