Isso depende do sistema de arquivos. Para o ext4, você pode fazer isso com debugfs da seguinte forma:
dennis@lightning:/tmp$ dd if=/dev/zero of=ext4.img bs=1M count=100
104857600 bytes (105 MB) copied, 0.645009 s, 163 MB/s
dennis@lightning:/tmp$ mkfs.ext4 ext4.img
mke2fs 1.42.5 (29-Jul-2012)
ext4.img is not a block special device.
Proceed anyway? (y,n) y
...
Writing superblocks and filesystem accounting information: done
dennis@lightning:/tmp$ mkdir ext4
dennis@lightning:/tmp$ sudo mount ext4.img ext4
dennis@lightning:/tmp$ mkdir -p ext4/test/sub/
dennis@lightning:/tmp$ sudo umount ext4
dennis@lightning:/tmp$ debugfs -w ext4.img
debugfs 1.42.5 (29-Jul-2012)
debugfs: link test test/sub/loop
^D
dennis@lightning:/tmp$ ls ext4/test/sub/loop/sub/loop/sub/loop/sub/loop/sub/loop/
total 1
drwxrwxr-x 2 dennis dennis 1024 mrt 26 12:15 sub
Notas:
- você não pode vincular diretamente ao pai, por isso
foo/bar
não pode ser um link parafoo
, daí o diretório extra. - Você não deve executar o debugfs em sistemas de arquivos montados. Se fizer isso, você precisará desmontar / montar depois de fazer alterações.
As ferramentas como find e ls ainda não serão reproduzidas:
dennis@lightning:/tmp$ find ext4
ext4
ext4/lost+found
find: 'ext4/lost+found': Permission denied
ext4/test
ext4/test/sub
find: File system loop detected; 'ext4/test/sub/loop' is part of the same file system loop as 'ext4/test'.