私は知っています ハードリンク ディレクトリへの接続は不可能であるはずですが、NASに非常によく似た何かがあります。このフォルダは元々 Linuxマシンであり、 dfm から来たようです。ある時点で、NTFS形式のUSBドライブにバックアップされ、SynologyNASに転送されました。
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)
ls -lai / ; ls -lai /volume1/usbcopy/USBCopy_1303012145/.linktorootdir | head
を使用したiノードのチェック(@paboukによる推奨による)
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でこのフォルダを削除するにはどうすればよいですか?
_.linktorootdir
_ディレクトリ内のファイルとディレクトリは、ルートディレクトリからコピーされます。たとえば、_rm -rf /volume1/usbcopy/USBCopy_1303012145/.linktohomedir
_を使用して簡単に削除できます。
説明は以下の通りです。
ハードリンク ディレクトリへの接続は理論的には可能ですが、 複数の理由 Linuxを含む多くのシステムでは無効になっています。これは、 unlink()
syscallで許可されないため、ディレクトリへのハードリンクを削除できないことも意味します。
デモンストレーション
_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)
_
2種類のリンクを認識する
ls -l
_は、タイプ/許可フィールドの最初の文字としてl
を示します。 stat
の出力は_symbolic link
_を示しています。ls -i
_は、同じデータにハードリンクされたすべてのファイルの同じiノード番号を示します(iノードで表されます)。 _ls -l
_の2番目の列は、iノードへのハードリンクの数を示しています。_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 [〜#〜]で、最初の起動時にいくつかのリンクを作成します。これらのリンクは、デスクトップにアイコンとして表示されます。リンク間には、ディレクトリへの2つのリンクがあります。_.linktorootdir
_ as symlink システムのルートディレクトリ[〜#〜] dfm [〜#〜 ]が実行されており、_.linktohomedir
_も実行されています。 DFMドキュメント および DFMソース を参照してください。
あなたの場合、ディレクトリ_/
_と_/volume1/usbcopy/USBCopy_1303012145/.linktohomedir
_は異なるファイルシステム(_/dev/root
_と_/dev/vg1000/lv
_)にあるため、同じiノードへのハードリンクにすることはできません。 (ハードリンクは、単一のファイルシステムのスコープ内を指すことができます。)
あなたが説明した問題がどのように発生したかを推測できます。 NTFSにはこの機能があるため、おそらくNTFSへのバックアップでシンボリックリンクを保持できたはずです。後でUSBドライブからバックアップをコピーしたときに、コピーツールがシンボリックリンクを期待どおりに処理しませんでした。ツールは、シンボリックリンク自体だけをコピーするのではなく、ソースドライブ上のシンボリックリンクをたどり、それらのコンテンツ(_.linktorootdir
_の場合はルートディレクトリ)をコピーしました。同様の問題は、Synologyフォーラムでも説明されています: SBCopyはHDDのコピー中に無限ループで発生しました 。
解決策は最初に説明されています。