我知道硬链接目录不应该是可能的,但我的 NAS 上有一些奇怪的东西,看起来很像目录。这个文件夹最初来自一台 Linux 机器,似乎来自动态性能模型。在某个时间点,它被备份到 NTFS 格式的 USB 驱动器上,然后传输到 Synology NAS。
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; mount 的输出
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
解决方案
目录中的文件和目录.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)
识别两种类型的链接
- 软链接-
ls -l
显示l
为类型/权限字段的第一个字符。stat
输出显示symbolic link
。 - 硬链接- 硬链接相互之间无法区分。原始文件和新创建的硬链接除了路径/文件名之外看起来完全相同。硬链接不能从一个文件系统指向另一个文件系统。
ls -i
显示所有硬链接到相同数据(由 inode 表示)的文件的 inode 编号相同。第二列ls -l
显示指向 inode 的硬链接数。
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
目录中可制造性制造首次启动时会创建一些链接。这些链接将在桌面上显示为图标。链接之间将有两个目录链接:.linktorootdir
作为符号链接到系统根目录可制造性制造正在运行.linktohomedir
。请参阅DFM 文档和DFM源。
在您的情况下,目录/
和/volume1/usbcopy/USBCopy_1303012145/.linktohomedir
位于不同的文件系统(/dev/root
和/dev/vg1000/lv
),因此它们不能是指向同一 inode 的硬链接。(硬链接只能指向单个文件系统的范围。)
我们可以猜测您所描述的问题是如何出现的。很可能备份到 NTFS 能够保留符号链接,因为 NTFS 具有此功能。稍后当您从 USB 驱动器复制备份时,复制工具没有按预期处理符号链接。该工具不是只复制符号链接本身,而是跟踪源驱动器上的符号链接并复制它们的内容(在这种情况下是根目录.linktorootdir
)。Synology 论坛中也描述了类似的问题:USBCopy 在复制 HDD 时陷入无限循环。
解决方案在开头描述。