Gli hardlink potrebbero essere utilizzati ai fini della deduplicazione del backup?


4

Conosco backup completi, backup incrementali e backup decrementali. Tuttavia, mi chiedevo perché nessuno (Windows Backup, TrueImage, Paragon) sembra aver implementato il seguente algoritmo di backup.

È necessario un supporto di backup che supporti i collegamenti, ad esempio NTFS. Idealmente, il supporto di backup ha lo stesso formato per supportare tutte le funzionalità come flussi di dati alternativi (ADS).

  1. Il primo backup è un backup completo. Ciò copierà tutti i file sul supporto di backup in una sottocartella di \. Chiamiamo questa cartella L (per "last"). Non esiste un formato file speciale, basta copiare i file.
  2. Con il backup successivo, verrà creata una nuova sottocartella di \, chiamiamola C (per "corrente"). I file che sono stati modificati dal backup completo verranno nuovamente copiati dal disco di origine. I file che non sono stati modificati vengono spostati da L a C e un collegamento reale è creato per puntare da L a C .
  3. Su backup ripetuti, la stessa procedura verrà applicata con C e un'altra nuova cartella.

C'è qualcosa che mi manca in questo algoritmo che non funzionerebbe?

Mentre ho notato ancora qualche problema, posso vedere i seguenti vantaggi:

  • l'ultimo backup ( C ) è sempre un backup completo. Per ripristinare il backup, è necessario solo questo backup. L'utente può eliminare qualsiasi vecchio backup senza distruggere la possibilità di recupero (che non è il caso di backup completi, incrementali e decrementali).
  • I vecchi backup agiranno come backup completi a causa dei collegamenti, ma occuperanno molto meno spazio sul disco.
  • c'è una cronologia completa delle modifiche ai file se l'utente non ha eliminato un file. Ma a differenza di SVN, è possibile eliminare le vecchie revisioni.
  • Lo spostamento di file e la creazione di collegamenti sono operazioni molto veloci. La creazione del backup dovrebbe essere di conseguenza performante.
  • È possibile eliminare in modo selettivo i file modificati nei backup precedenti (ad esempio solo quelli di grandi dimensioni), senza eliminare un backup completo


A proposito, questo è molto simile all'approccio adottato dall'algoritmo di backup di Time Machine di Apple.
Simon East,

Risposte:


2

Quello che descrivi è già in uso, con rsynce la sua --link-dest=opzione, tramite dozzine di programmi wrapper, come Dirvish , tra gli altri.


Lo darò un'occhiata. Ho appena notato che né Windows Backup né TrueImage né Paragon implementano tale funzionalità.
Thomas Weller,

Sembra che abbiamo ancora bisogno di un sistema Linux per farlo funzionare ed eseguire il backup di un computer Windows. Leggendo la guida di Windows Dirvish, sembra che l'usabilità sia un casino. Comunque, grazie per l'input, è una buona fonte di informazioni ( dirvish.org/StevesWindowsGuide/Windows_Dirvish_Guide.html )
Thomas Weller

rsnapshot.org è abbastanza buono, non sono sicuro su Windows
Tim Abell,

3

Sembra un piano praticabile. Ridurrebbe il tempo impiegato per visualizzare e utilizzare i backup. Se i backup vengono utilizzati frequentemente e è necessario visualizzare snapshot completi, sarebbe molto utile.

Vorrei cambiare la dicitura "spostato da L a C" per dire semplicemente "fortemente legato da L a C".

Una considerazione: eliminare un file con un numero elevato di collegamenti (in riferimento all'ultimo punto elenco) significa individuare tutti quei collegamenti e rimuoverli. Quindi, recuperare lo spazio in modo selettivo in quel modo sarebbe più impegnativo, ma abbastanza facile da fare con il comando find.


1
Apporti un cambiamento significativo rispetto alla domanda del PO. Ovviamente, l'implementazione dovrebbe essere testata, ma in teoria i file identici sia su L che la cartella corrente potrebbero essere archiviati su C usando hard link a L, il che risparmierebbe il tempo di copia da L a C. Ancora, in teoria , il collegamento di file per uno o più file su L potrebbe essere eliminato, mantenendo il file originale a causa del collegamento reale esistente su C. Forse questo è discutibile, poiché l'OP sembra prendere in considerazione una soluzione esistente, ma nel caso in cui qualcuno potrebbe prendere in considerazione l'utilizzo di questo algoritmo per la propria implementazione.
GlennFromIowa,

2

Penso che sia sostanzialmente quello che tu chiami una copia di Delorean. Esiste, ad esempio, l'estensione Shell di collegamento per Windows, che implementa questo comportamento. Hanno una spiegazione abbastanza buona nella loro documentazione:

http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html#deloreancopy


Grazie per il link La copia di Delorean ha i collegamenti fissi nella direzione sbagliata. Il file esiste nella vecchia posizione e i nuovi backup puntano al vecchio file. Lo voglio viceversa: il file esiste nella nuova versione e le vecchie versioni puntano al nuovo file.
Thomas Weller

2
Il file non esiste da nessuna parte in una posizione nel filesystem. Esistono due livelli: i file effettivi sul disco e la loro rappresentazione all'interno del file system. Quest'ultimo è quello che vedi quando apri Esplora risorse per esempio. Tutte le voci di file che vedi lì sono fondamentalmente collegamenti a un file su disco.
Bweber

2
Possono esserci più collegamenti fissi a un file su disco in posizioni diverse nel filesystem. Gli hardlink hanno un contatore di riferimento. Quando viene creato un nuovo hardlink a un file, questo conteggio dei riferimenti viene aumentato di 1. Quando un hardlink viene eliminato, viene ridotto di uno. Ora la rappresentazione effettiva del file sul disco viene eliminata quando non vi sono più collegamenti fissi che la puntano, o in altre parole quando il conteggio dei riferimenti raggiunge 0.
bweber

1
Quindi il tuo modo di vedere questo non è corretto. Non esiste un hardlink e "il file reale" e il hardlink punta a quel file. Invece, tutte le rappresentazioni che vedi di un file a livello di filesystem sono hardlink che puntano allo stesso oggetto file su disco. Altrimenti un hardlink potrebbe non essere valido se "l'originale" a cui puntava veniva eliminato. Ma questo non può succedere. Perché non c'è "originale". Esiste solo un'istanza fisica sul disco e non è associata a una particolare istanza di collegamento reale. Quello a cui potresti pensare sono i collegamenti simbolici.
Bweber

2
Intendi la freccia rossa? Quella freccia non dovrebbe indicare il puntamento dei collegamenti. Indica che una copia del collegamento fisico viene creata da InitialBackupa Backup1e da lì a Backup2. Btw. forniscono anche una descrizione per gli hardlink: schinagl.priv.at/nt/hardlinkshellext/…
bweber

1

Quello che stai descrivendo è essenzialmente uno schema di backup incrementale.

Come sottolinea Dan D. , in realtà viene utilizzato da vari strumenti, in particolare su piattaforme simili a Unix in cui i collegamenti fisici sono gestiti in modo nativo da molti dei programmi che interessano.

Tuttavia, molti programmi Windows non gestiscono molto bene i collegamenti fisici. Ai tempi di FAT, gli hardlink sarebbero stati effettivamente considerati un errore in quanto non era consentito a due nomi nel file system di puntare agli stessi blocchi di dati.

Quello che descrivi è uno schema di backup incrementale perché ogni backup si basa su tutti i backup precedenti. L'unica vera differenza è come si fa riferimento a quei backup precedenti e il fatto che è più semplice eliminare un backup precedente perché i dati verranno effettivamente eliminati solo quando il conteggio dei riferimenti per il file in questione raggiunge lo zero, cosa che succederà quando non è presente più referenziati da qualsiasi backup. Naturalmente il rovescio della medaglia è che è più difficile prevedere esattamente quanto spazio verrà liberato eliminando un dato backup precedente; in casi estremi, ad eccezione dello spazio utilizzato dai metadati del file system e recuperato, potrebbe effettivamente essere zero. (Nessuna modifica tra quel backup e un backup adiacente.)

Nel caso di backup incrementali "normali", è necessario eseguire manualmente i ripristini. Nel caso di ciò che stai descrivendo, il riferimento è implicito. Tuttavia, se si dovesse eliminare tutto ciò che non è stato effettivamente copiato durante (ha un conteggio di riferimento di esattamente uno in) il backup più recente, il backup sarebbe comunque incompleto come lo sarebbe se si eseguissero più backup incrementali e quindi ha tentato di ripristinare solo l'ultimo.


Accetto la dichiarazione FAT. Ecco perché il mio focus è su NTFS o altre partizioni che supportano hard link.
Thomas Weller,

@ThomasW. Ovviamente sarebbe necessario il supporto del file system per gli hardlink per utilizzare gli hardlink per la deduplicazione dei dati. Non è questo il punto, però. Il punto è che in * nix, i collegamenti fisici sono stati parte dell'ecosistema come per sempre e vengono effettivamente utilizzati. In Windows, sono relativamente nuove (nelle versioni di Windows utilizzate dalla maggior parte delle persone) e piuttosto oscure funzionalità che IIRC non è nemmeno disponibile per gli account non amministratori per impostazione predefinita.
un CVn

Dal modo in cui viene creato il backup e ciò che deve essere copiato, si tratta di un backup incrementale. Tuttavia, il risultato alla fine è un backup completo. Se lo si chiama in questo modo, un backup decrementato è anche un backup incrementale, poiché copia anche le differenze nell'ultimo backup completo.
Thomas Weller,

Esistono collegamenti fisici a partire da Windows NT4 SP4. Windows 7 utilizza hardlink in diversi punti per la directory C:\User/ C:\Benutzere C:\Program Files/ C:\Programme. Quindi sembra che i collegamenti reali funzionino al giorno d'oggi e potrei provarlo.
Thomas Weller,

1

HardLinkShellExtension con la sua "Delorean-Copy" (vedi altra risposta ) non è l'unica soluzione "pronta per l'uso". Ci sono alternative:

  • lo strumento console ln.exe dallo stesso programmatore con la stessa funzionalità.
  • la soluzione di backup GUI HardLinkBackup che fa esattamente esattamente quello che vuoi.
  • usa ln.exeda 1. per fare una copia del vecchio backup nella nuova cartella di backup e poi usa xcopyo robocopyper copiare solo nuovi file e rimuoverne di vecchi (penso che sia --mirrorper robocopy). Provalo per assicurarti che i file modificati vengano eliminati e quindi copiati e non solo modificati (quest'ultimo cambierebbe il file anche nei backup più vecchi a causa dei collegamenti fisici).
  • utilizzando xcopyo robocopyper eseguire backup normali e quindi eseguire dfhl.exe /l /r /w /s /h "X:\Backups-parent-folder\."per collegare tutti i file identici.
  • uguale a 3. ma finddupe -hardlink X:\Backups-parent-folder\**invece di dfhl.


Disclaimer: ho usato tutti i programmi sopra menzionati tranne finddupe, ma non necessariamente allo stesso modo. E non ho alcuna connessione monetaria o investimento o qualsiasi altra connessione a nessuno dei programmi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.