Newsgroup: it.comp.os.linux.sys
Titolo: Hardlink fra directory!

sul man e anche su info di ln viene riportata l`opzione:
       -d, -F, --directory
              hard link directories (super-user only)
ho tentato di usarla su un filesystem ext2 ma ho avuto in risposta
sempre questo errore:
ln: cannot create hard link `2' to `/bin': Operation not permitted
perche` non funziona?

 perche` non funziona?
super-user = root :)
-- 
*====================================*
|   ***** Jean-pierre  Brunod *****  |
--------------------------------------
joppino(nospam)@
inwind.it
 UIN:76128717
--------------------------------------
|  MSN Games network alias: joppino  |
-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^


Grazie per la risposta, ma gia` l`avevo scoperto che super-user = root.
Dalla tua risposta intuisco che a te l`opzione -d di ln funziona,
potresti
dirmi la versione del kernel che usi, la versione di ln, e il tipo di
filesystem su cui puoi fare gli hardlink tra directory (nel caso ext2 mi
potresti dire anche l`output del comado:
# tune2fs -l  /dev/hd_dove_hai_il_filesystem
tune2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          f54c280d-c562-4103-8280-b6a5fb3b4b7f
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
....
).
Ciao
 Gianluca

Gianluca wrote:

Anche se potrebbe sembrare da matti, mi rispondo da solo (forse potrebbe
essere utile ad altri):
Su file system ext2 (linux-2.4.0-test9) non e` consentito la creazione
di hardlink a directory, come
e` dimostrato di seguito:
dal file "fs/ext2/namei.c"
------------------------------------------
static int ext2_link (struct dentry * old_dentry,
                struct inode * dir, struct dentry *dentry)
{
        struct inode *inode = old_dentry->d_inode;
        int err;
      if (S_ISDIR(inode->i_mode))
                return -EPERM;
        if (inode->i_nlink >= EXT2_LINK_MAX)
                return -EMLINK;
-----------------------------------------
Basta commentare le righe:
/*      if (S_ISDIR(inode->i_mode))
                return -EPERM;                       */
e "ln -d" finalmente funziona:
# ln -d d qq
# ln -d d link
# ls -l -i
total 32
  32449 drwxr-xr-x    2 root     root         4096 Nov  1 18:32 1
  64897 drwxr-xr-x    4 root     root         4096 Nov 14 12:11 d
  64897 drwxr-xr-x    4 root     root         4096 Nov 14 12:11 link
     11 drwxr-xr-x    2 root     root        16384 Nov  1 18:31
lost+found
  64897 drwxr-xr-x    4 root     root         4096 Nov 14 12:11 qq
chiaramente non e` prevedibile quello che succede, pero` e2fsck
reaggisce abbastanza bene:
e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'qq' in / (2) is a link to directory /d (64897).
Clear<y>? no
Entry 'link' in / (2) is a link to directory /d (64897).
Clear<y>? no
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dosd/backup.ext2: 14/243360 files (0.0% non-contiguous), 7655/486400
blocks
Qualcuno ha idea del perche` hanno inibito gli hardlink->directory su
ext2?
P.S.: ma sul manuale di ln ci voleva tanto a scrivere che ext2 non
supporta hardlink a directory?