linux user group brescia

immagine del castello

Archivio della mailing list

Hard Links

Luca Giuzzi giuzzi a dmf.bs.unicatt.it
Dom 30 Gen 2000 01:16:51 UTC
Sei sicuro che gli hard links fra directory siano proprio essenziali?
 Non sono una `bella cosa'(tm), e, se passi attraverso le astrazioni
 del filesystem non dovrebbero essere troppo importanti.
L'unico caso in cui la cosa potrebbe essere utile e' quello in cui hai
 degli utenti (o dei programmi) che lavorano in un environment chrooted
 e non vuoi copiare tutti i files ogni volta. 

Comunque,
una soluzione al tuo problema c'e':
 se i files si trovano su una partizione ext2 puoi usare il debugfs
 per creare gli hard links fra directories.

`aprire' il filesystem con 
   open -w /dev/partizione
e poi dare i comandi (abbastanza logici)

   cd directory_radice (relativa la partizione, non assoluta)
   ln directory_originale directory_destinazione
   quit

Questo fa quanto da te richiesto.

Una nota pero':
 kids, do not try this at home!  :)))
 SunOS4 stesso aveva problemi nella rimozione delle direcory linkate
  staticamente: se si vuole elimirare una dir legata ad altre da un hard
  link, si devono eliminare tutte assieme [non e' come nel caso dei files
  in cui ci si ritrova ad avere una copia dei contenuti da qualche altra
  parte!] salvo spiacevoli conseguenze.

Un esempio:
 1. creo una dir `aa' e vi faccio puntare un hard link `bb'
 la procedura elencata sopra.
 2. cancello la dir `aa'
 3. scrivere in `bb' non e' cosa salutare... inoltre quando cerco
    di rimuovera ottengo i seguenti warning:
      [la partizione era /dev/hda3]

EXT2-fs warning (device ide0(3,3)): empty_dir: bad directory (dir #8450) - no data block
EXT2-fs warning (device ide0(3,3)): ext2_rmdir: empty directory has nlink!=2 (0)
 
  in quanto il blocco dati e' stato cancellato con il primo comando rmdir...
 [il caso di SunOS4 era simile]

Il modo piu' pulito per lavorare con la rimozione di directory linkate
 staticamente in questo modo sarebbe usare il comando `unlink' da debugfs
 (o l'appropriata chiamata di sistema), senza rimuovere i blocchi di
 controllo (puntati dall'inode) sino a che non si procede ad eliminare
 l'ultima di esse. 

Una parola su debugfs, infine: e' un programma piuttosto flessibile e 
 consente di lavorare a livello abbastanza basso su un filesystem ext2,
 ma consente anche di creare danni non da poco...

Non dite che non vi ho avvertito! :))

Ciao,
 lg



Maggiori informazioni sulla lista Lug