2011-12-01 13 views
7

Ho esaminato un certo numero di documenti. che hanno molte discrepanze su hardlink o softlink che occupano spazio nel file system. Qualcuno può chiarirlo?I collegamenti fisici o i collegamenti software occupano spazio nel filesystem?

Per hardlinks ho scoperto questo:

ho avuto un file c1 nella mia home directory che ho un collegamento fisico con d1 nella stessa c1 directory.both e B1 hanno 11 byte size.Now quando sto facendo un "ls -lrt "i byte totali per tutti i file elencati (esclusi i file nascosti di d) sono 64 byte. ora quando rimuovo l'hardlink d1 e di nuovo faccio un ls -lrt mi dà 60 bytes.does che non significa che gli hardlinks occupano spazio nel disco rigido, ma molti docs.accertano questo fatto, perché?

Avrei potuto verificare nello stesso modo la creazione di un collegamento software per il file e quindi eliminarlo, ma poiché il mio collegamento software ha solo 2 byte di dimensione, non penso che l'eliminazione avrebbe alcun effetto significativo sulla dimensione totale arrotondata elencata in l'output di ls -lrt.

Quindi che cos'è questo?

risposta

6

Sì. Entrambi occupano spazio in quanto entrambi hanno ancora voci di directory.

Una voce hardlink (in realtà, una "voce normale" che [spesso] condivide un inode) occupa spazio, così come una voce di collegamento simbolico che deve memorizzare il percorso del collegamento (il testo stesso) in qualche modo. Lo spazio effettivo richiesto è leggermente diverso a causa delle regole di allocazione/layout determinate dall'esatta implementazione del filesystem (ad esempio dimensioni di albero/blocco e modalità di memorizzazione del collegamento simbolico).

Tuttavia, la quantità di spazio è minima e può essere [quasi sempre] considerata irrilevante in relazione ai dati nei file stessi.

+2

per estendere l'ultima frase: ... a meno che non si tratti di un sistema con molti file di piccole dimensioni e si esauriscono gli inode disponibili. Su alcuni file system questo è uno scenario realistico e l'ho incontrato, anche se non in combinazione con link simbolici o hard. – 0xC0000022L

10

Certo che occupano (un po 'di) Spazio:

  • file collegati rigidi hanno più voci di directory. Ogni voce occupa spazio nella directory stessa, ma da quel momento in poi condivide le stesse strutture: l'inode e l'area dati sono condivisi. Ma non sono sicuro di come questo sia spiegato; forse le voci della directory occupano sempre un multiplo di una certa dimensione o così.

  • I collegamenti simbolici occupano anche lo spazio per la voce della directory, oltre a un inode che contiene informazioni sulle proprietà del collegamento e sul target del collegamento stesso.

Con quelle piccole dimensioni (11 byte di dati nel file) l'overhead conta più dei dati reali. Con i file più grandi, tuttavia, questo piccolo sovraccarico di pochi byte è trascurabile.

1

Per essere breve e semplice, un hardlink è un riferimento all'inode all'interno del filesystem. Alcune utility leggeranno questo in modo errato. Non occuperà spazio su disco.

+3

Da quando inode * non * occupano spazio? ... gli inode – 0xC0000022L

+3

occupano spazio, io sono 100% d'accordo, ma un riferimento a detto inode è molto trascurabile in termini di spazio complessivo del disco. Spero che questo chiarisca la mia risposta. –

+0

Questo è semplicemente sbagliato. Il collegamento è un'informazione che deve essere archiviata "da qualche parte". A seconda del file system, questo viene gestito in modo leggermente diverso ma è necessario archiviarlo. –

6

ls è sbagliato!

Conta file hard collegati più volte. ls -l sommerà solo i numeri di blocco di ogni voce, indipendentemente dal numero di collegamenti fissi.

(Usa ls -1si per mostrare il numero di inode di ogni file così come l'utilizzo di blocco)

Prova du -Ssb . invece. Questo ti darà l'uso corretto del disco in byte. A meno che non si usi lo switch -l, che riprodurrà il comportamento di ls.

Problemi correlati