3

Я знаю, что жесткие ссылки на каталоги не должны быть возможными, но у меня на NAS есть нечто странное, очень похожее на одно. Эта папка изначально пришла с машины linux и, кажется, пришла от dfm. В какой-то момент он был скопирован на USB-диск в формате NTFS, который затем был перенесен на NAS-устройство Synology.

dwj$ ls -la
drwx------  1 dwj  staff  16384 Mar  2 19:17 .linktorootdir

dwj$ ls -la .linktorootdir/
total 3460
drwx------  1 shennis  staff    16384 Mar  2 19:17 .
drwx------  1 shennis  staff    16384 Jul 25 23:29 ..
drwx------  1 shennis  staff    16384 Feb 26 20:20 .system_info
drwx------  1 shennis  staff    16384 Feb 26 20:20 bin
drwx------  1 shennis  staff    16384 Mar  2 19:15 dev
drwx------  1 shennis  staff    16384 Mar  2 19:17 etc.defaults
-rwx------  1 shennis  staff  1589952 Dec 11  2012 linuxrc
drwx------  1 shennis  staff    16384 Feb 26 20:20 sbin
drwx------  1 shennis  staff    16384 Mar  2 04:49 tmp
drwx------  1 shennis  staff    16384 Mar  2 19:17 usr
drwx------  1 shennis  staff    16384 Mar  2 19:17 volume1
drwx------  1 shennis  staff    16384 Mar  1 21:44 volumeUSB2

Выход pwd; stat .linktorootdir; крепление

DiskStation> pwd

/volume1/usbcopy/USBCopy_1303012145

DiskStation> ls -a

.                       .linktorootdir
..                      Data
.DS_Store

DiskStation> stat -f .linktorootdir/ /

  File: ".linktorootdir/"
    ID: 1a03a45c0ea41689 Namelen: 255     Type: ext2/ext3
Block size: 4096
Blocks: Total: 719905408  Free: 654479     Available: 628879
Inodes: Total: 182845440  Free: 180250664

  File: "/"
    ID: 6a3b023a9a57044b Namelen: 255     Type: ext2/ext3
Block size: 4096
Blocks: Total: 612766     Free: 503152     Available: 477552
Inodes: Total: 155648     Free: 139669

DiskStation> монтировать

/dev/root on / type ext4 (rw,relatime,barrier=0,journal_checksum,data=ordered)
/tmp on /tmp type tmpfs (0) none on /dev/pts type devpts (gid=4,mode=620) /sys on
/sys type sysfs (0) /proc/bus/usb on /proc/bus/usb type usbfs (0)
/dev/vg1000/lv on /volume1 type ext4 (usrjquota=aquota.user,grpjquota=aquota.gro up,jqfmt=vfsv0,synoacl)

Проверка inode (по рекомендации @pabouk) с помощью ls -lai / ; ls -lai /volume1/usbcopy/USBCopy_1303012145/.linktorootdir | head

      2 drwxr-xr-x   23 root     root          4096 Jul 28 19:13 .
      2 drwxr-xr-x   23 root     root          4096 Jul 28 19:13 ..
     38 drwxr-xr-x    3 root     root          4096 Apr  1 11:35 .old_patch_info

   1829 -rw-------    1 root     root          1024 Feb 26 20:21 .rnd
     32 drwxr-xr-x    3 root     root          4096 Apr  1 11:33 .syno
  15315 drwxr-xr-x    2 root     root          4096 Feb 26 20:20 .system_info
     12 drwxr-xr-x    2 root     root          4096 Apr  1 11:35 bin
     89 drwxr-xr-x   10 root     root         36864 Jul 28 19:13 dev
   1784 drwxr-xr-x   18 root     root          4096 Jul 29 09:36 etc
   3380 drwxr-xr-x   17 root     root          4096 Jul 28 19:13 etc.defaults
81143042 drwxrwxrwx    6 admin    root          4096 Jul 29 14:50 .
30671002 drwxrwxrwx    9 root     root          4096 Jul 25 23:29 ..
145895896 drwxrwxrwx    2 admin    root          4096 Feb 26 20:20 bin
145895092 drwxrwxrwx   15 admin    root          4096 Mar  2 19:17 etc.defaults
145753038 -rwxrwxrwx    1 admin    root       1589952 Dec 11  2012 linuxrc
145753040 drwxrwxrwx    2 admin    root          4096 Feb 26 20:20 sbin
145895963 drwxrwxrwx    3 admin    root          4096 Jul 29 14:50 volume1

Как мне удалить эту папку на моем NAS?

1 ответ1

3

Решение

Файлы и каталоги в каталоге .linktorootdir копируются из корневого каталога. Вы можете просто удалить их, например, используя rm -rf /volume1/usbcopy/USBCopy_1303012145/.linktohomedir .

Объяснение ниже.

Жесткие ссылки на каталоги

Жесткие ссылки на каталоги теоретически возможны, но по многим причинам они отключены во многих системах, включая Linux. Это также означает, что вы не сможете удалить жесткую ссылку на каталог, поскольку системный вызов unlink() этого не допустит.

демонстрация

root@x:~/testdir# ln -F dir1 dir1link
ln: failed to create hard link `dir1link' => `dir1': Operation not permitted
root@x:~/testdir# unlink dir1
unlink: cannot unlink `dir1': Is a directory

Показанное отрицание встроено в ядро Linux (fs/namei.c). Вот результаты системных вызовов:

linkat(AT_FDCWD, "dir1", AT_FDCWD, "dir1link", 0) = -1 EPERM (Operation not permitted)
unlink("dir1")                          = -1 EISDIR (Is a directory)

Распознавание двух типов ссылок

  • softlink - ls -l показывает l как первый символ поля типа / разрешения. вывод stat показывает symbolic link .
  • Жесткие ссылки - Жесткие ссылки взаимно неразличимы. И исходный файл, и вновь созданная жесткая ссылка выглядят одинаково, за исключением пути / имени файла. Жесткие ссылки не могут указывать с одной файловой системы на другую. ls -i показывает одинаковый номер инода для всех файлов, жестко связанных с одними и теми же данными (представленными инодом). Второй столбец ls -l показывает количество жестких ссылок на индекс.

user1@x:~/testdir$ ls -li
total 12
6865008 drwxrwxr-x 2 user1 user1 4096 Jul 30 00:50 dir1
6822146 lrwxrwxrwx 1 user1 user1    4 Jul 30 01:44 dir1symlink -> dir1
6822155 -rw-rw-r-- 2 user1 user1   64 Jul 30 01:44 file1
6822155 -rw-rw-r-- 2 user1 user1   64 Jul 30 01:44 file1hardlink

user1@x:~/testdir$ stat * | grep -E '((File)|(Size)|(Device)):'
  File: `dir1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 807h/2055d  Inode: 6865008     Links: 2
  File: `dir1symlink' -> `dir1'
  Size: 4           Blocks: 0          IO Block: 4096   symbolic link
Device: 807h/2055d  Inode: 6822146     Links: 1
  File: `file1'
  Size: 64          Blocks: 8          IO Block: 4096   regular file
Device: 807h/2055d  Inode: 6822155     Links: 2
  File: `file1hardlink'
  Size: 64          Blocks: 8          IO Block: 4096   regular file
Device: 807h/2055d  Inode: 6822155     Links: 2

Происхождение .linktorootdir

В каталоге .dfmdesk DFM создает несколько ссылок при первом запуске. Эти ссылки будут отображаться в виде значков на рабочем столе. Между ссылками будут две ссылки на каталоги: .linktorootdir в качестве символической ссылки на корневой каталог системы, в которой работает DFM , а также .linktohomedir . См. Документацию DFM и источник DFM .

В вашем случае каталоги / и /volume1/usbcopy/USBCopy_1303012145/.linktohomedir находятся в разных файловых системах (/dev/root и /dev/vg1000/lv), поэтому они не могут быть жесткими ссылками на один и тот же индекс. (Жесткие ссылки могут указывать только в пределах одной файловой системы.)

Мы можем догадаться, как возникла описанная вами проблема. Скорее всего, резервная копия NTFS смогла сохранить символическую ссылку, поскольку NTFS обладает такой возможностью. Позже, когда вы скопировали резервную копию с USB-накопителя, инструмент копирования не обрабатывал символические ссылки, как ожидалось. Вместо того чтобы копировать только символическую ссылку, инструмент перешел по символическим ссылкам на исходном диске и скопировал их содержимое (корневой каталог в случае .linktorootdir). Аналогичная проблема описана также на форуме Synology: USBCopy зацикливается на бесконечности при копировании жесткого диска.

Решение описано в начале.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .