Newsgroup: it.comp.os.linux.sys
Titolo: Hardlink

Domanda banale ma vorrei conferma prima di fare danni
 
Se hardlinko due file in due directory, posso rimuovere ciascuna di esse mantenendo comunque intatti i file linkati, vero? 
 
Esempio :
 
dir1/file1 => dir2/file2 
 
Un bel rm -rf dir2 rimuove tutto, la "copia" del file2 sarà comunque accessibile da dir1/file1, giusto? 
 
Sto cercando di aggiungere deduplicazione a rsnapshot hardlinkando tutte le directory dei backup incrementali ma non vorrei che al termine delle rotazioni, quando rsnapshot rimuove l'ultima directory poi mi ritrovassi con backup inconsistenti.


L'hard link e' un ulteriore reference ad un file,il numero dei link 
aumenta di uno (al contrario dei symbolic links).
Eliminando uno si elimina un reference,solo quello.
Il kernel elimina effettivamente il file quando il reference count va a 
zero.
L'apertura di un file incrementa di uno il reference count cosi uno 
psedo codice del genere fa si che funzioni:
 
 
fd=open file
unlink file
read fd
close fd
 
 
Tanto per fare capire un po come funziona uno unix.
 

Se hardlinko due file in due directory, posso rimuovere ciascuna di esse mantenendo comunque intatti i file linkati, vero? 
 
Nella directory non ci sono i file :-)
 
Nella directory ci sono le referenze. Il file Dio solo sa dov'è.
 
Quando un file non è referenziato da nessuna parte, l'IOSS dichiara il suo spazio riciclabile (oppure
si perde il riferimento e lo scopri al fsck successivo).
 
Se fai "rm nomefile", cancelli solo la referenza.
 
Eventualmente puoi usare
 
	find DIR -type f -links +1
 
per trovare tutti i file con almeno un link *da qualche parte* (inclusa DIR e le sue sottodirectory!)
ed eventualmente cancellare solo quelli. Oppure
 
	find DIR -type f -links 1
 
per trovare i file che sarebbero "cancellati veramente" da un rm -rf.
 
Leonardo
-- 
 
A terrible beauty is born.
                                     - W. B. Yeats, Easter 1916

forse e' ovvio....
 
devono essere sulla stessa partizione

 psedo codice del genere fa si che funzioni:
 
Ottimo, questo conferma ciò che già sapevo.
Quindi, se tanto mi da tanto, posso tranquillamente hardlinkare tutti i doppioni che mi ritrovo tra due o più snapshot di rsnapshot, creando, di fatto, una deduplica.


 
naturalmente
 


 
Tutto vero.
Ma concettualmente si puo vedere una directory come una cartellina che 
contiene documenti (files)
Non per altro in alcuni OS la directory e' chiamata cartella.


 close fd
 
...E che sparisce dopo ancora


> Tanto per fare capire un po come funziona uno unix.
 
Ho sempre trovato questo una cosa affascinante dei sistemi unix rispetto 
ad un win.
Un altra cosa e' un tail -f file mentre file e' aperto in scrittura da 
un altro processo e si leggono le scritture in real time su file.
Un altro esempio:
mentre il sistema copia un video da remoto (ad esempio dal mio server) 
posso tranquillamente vedermi il film con vlc senza aspettare la fine 
della copia.
Impossibile in win fare una cosa del genere.
Tutto questo non ha niente a che vedere con il ref counting ed e'un po 
OT,ma comunque ho voluto fare questa piccola disquisizione.
 

 directory dei backup incrementali
 
La deduplica di rsnapshot funziona proprio come vuoi fare te, ovvero per mezzo
di hard link dei file nelle directory corrette. È stato proprio vedendo come fa
rsnapshot che ho implementato la stessa strategia sul mio sistema di backup :)
 
Enrico