Quali attributi di file sono memorizzati nelle voci della directory e quali negli inode?


1

Voglio fare qualche deduplicazione di vecchi file, sostituendo i duplicati con hardlink.

Per ridurre al minimo la perdita di metadati, voglio impostare gli attributi della voce della directory di ogni nuovo hardlink sugli attributi del duplicato che sostituisce, ma non modificare alcun attributo dell'inode dell'inode che ottiene i nuovi collegamenti.

Quali proprietà devo impostare e non impostare?

Idealmente, mi piacerebbe vedere una tabella che mostra cosa c'è in quanti più filesystem possibile. Sono particolarmente interessato a ext3, ext4, HFS +, XFS e Btrfs.

Risposte:


1

Quello che stai chiedendo non è possibile in nessun file system che conosco, a causa di come sono implementati, come descritto qui. E non capisco perché dovresti preoccuparti dei metadati, per cominciare?

Innanzitutto, gli unici dati nella voce della directory sono il nome file e il numero dell'inode.

In secondo luogo, viene creato un collegamento reale quando si creano due o più nomi di file con lo stesso numero di inode.

L'inode memorizza tutto il resto, cose come atime e mtime e altri metadati, inclusi "puntatori" ai blocchi di dati del file.

Se hai due file il cui contenuto è lo stesso, ma gli inode sono diversi, la maggior parte dei metadati negli inode sarà diversa, ad esempio l'atime menzionato e mtime saranno diversi, così come tutti i puntatori del blocco dati.

Per utilizzare un collegamento reale per ridurre l'utilizzo dell'archiviazione, è necessario eliminare uno o l'altro dei file duplicati, che "chiuderanno" anche l'inode, perdendo tutti i metadati. Quindi si crea un collegamento al file esistente rimanente, utilizzando il nome e il percorso della directory del file appena eliminato.

Il "nuovo" collegamento al file ora avrà tutte le stesse informazioni sull'inode di quello a cui ti sei appena collegato. Le uniche differenze saranno la posizione nella gerarchia di directory e il nome utilizzato, che sono memorizzati nella voce di directory, non l'inode.

Tutto questo viene gestito attraverso le chiamate di sistema utilizzate per creare file, collegamenti e directory e non è direttamente modificabile da alcun utente o software, incluso 'root'. Potresti leggerlo e archiviare i dati in un file separato, ma la facile associazione di una gerarchia di directory andrà persa.


Se ti capisco bene, la tua risposta equivale a "solo i nomi sono memorizzati nelle voci della directory, tutte le altre proprietà sono memorizzate negli inode". È questo che vuoi dire? Ciò corrisponde ai risultati del mio semplice test empirico su ext3 e HFS +; sai quali altri filesystem funzionano in questo modo? (Non sono tutti i filesystem, in particolare, non NTFS.) Sai se includono xattrs e / o ACL? Puoi collegarti alla documentazione?
ShadSterling

Come ho detto nel post, la voce della directory ha anche il numero di inode, quindi il sistema può trovare i dati del file e altri metadati.
Bob,

Sì, tutto il resto è nell'inode (vedi la pagina man stat (2) su qualsiasi sistema Linux o UNIX). Non so nulla sul funzionamento di NTFS o altri filesystem M $, la tua domanda, come ho capito, riguardava i file system Linux / UNIX. Per quanto ne so, tutti i filesystem nativi Linux e UNIX funzionano in questo modo. Si noti che il supporto NTFS in Linux potrebbe essere limitato, a seconda della propria distribuzione.
Bob,

Potresti spiegare cosa c'è nei metadati che devi conservare?
Bob,
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.