Cifs를 통해 DFS 공유를 마운트할 때 DFS-Link가 실패함

Cifs를 통해 DFS 공유를 마운트할 때 DFS-Link가 실패함

cifs를 통해 DFS 공유를 마운트하려고 합니다. 공유는 다음과 같이 생성됩니다.

\\mydomain.local\FilesDFS 주식입니다.
아래와 같이 이 공유를 성공적으로 마운트할 수 있습니다.

# mount -t cifs //mydomain.local/Files ~/fileserver -o username=myuser,domain=mydomain.local,password=hunter2

그런 다음 예상대로 ~/fileserver의 디렉터리를 반복할 수 있습니다.

# ls ~/fileserver
folder1 folder2

그러나 폴더1에 CD를 넣으려고 하면 다음 오류가 발생합니다.

# cd folder1
cd: folder1: No such file or directory

오류가 발생하기까지 1~2초 정도 걸립니다.
이는 폴더1이 다른 파일 서버에 대한 DFS 링크이기 때문이라고 생각합니다. \\fileserver2.mydomain.local\Fileshare$\somedirectory\folder1

이제 다음과 같이 dmesg를 확인했습니다.

# dmesg
CIFS: Attempting to mount //fileserver2.mydomain.local/Fileshare/somedirectory/folder1
No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
FS-Cache: Duplicate cookie detected
FS-Cache: O-cookie c=0000000088cf85cb [p=00000000a52bce0c fl=222 nc=0 na=1]
FS-Cache: O-cookie d=00000000ff7a58d3 n=000000005109413d
FS-Cache: O-key=[5] '46696c6573'
FS-Cache: N-cookie c=00000000c39f9d7a [p=00000000a52bce0c fl=2 nc=0 na=1]
FS-Cache: N-cookie d=00000000ff7a58d3 n=00000000930f66cf
FS-Cache: N-key=[5] '46696c6573'
No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
FS-Cache: Duplicate cookie detected
FS-Cache: O-cookie c=0000000088cf85cb [p=00000000a52bce0c fl=222 nc=0 na=1]
FS-Cache: O-cookie d=00000000ff7a58d3 n=000000005109413d
FS-Cache: O-key=[5] '46696c6573'
FS-Cache: N-cookie c=000000007c6a3385 [p=00000000a52bce0c fl=2 nc=0 na=1]
FS-Cache: N-cookie d=00000000ff7a58d3 n=00000000f006535b
FS-Cache: N-key=[5] '46696c6573'
No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
CIFS VFS: \\fileserver2.mydomain.local cannot query dirs between root and final path, enabling CIFS_MOUNT_USE_PREFIX_PATH
CIFS VFS: Autodisabling the use of server inode numbers on new server.
CIFS VFS: The server doesn't seem to support them properly or the files might be on different servers (DFS).
CIFS VFS: Hardlinks will not be recognized on this mount. Consider mounting with the "noserverino" option to silence this message.
CIFS VFS: cifs_read_super: get root inode failed

공유를 직접 마운트할 수 있는 권한이 없기 때문에 "루트 경로와 최종 경로 사이의 디렉터리를 쿼리할 수 없습니다"가 실제 문제인 것 같습니다 . Fileshare$하지만 이 공유를 fileserver2에 직접 마운트할 수도 있습니다. DFS의 다른 서버에 연결하려면 많은 콘텐츠를 마운트해야 합니다.somedirectoryfolder1

운이 좋게도 프리미엄 계정을 사용하여 설치를 시도할 수 있었습니다.할 수 있는두 가지 모두에 액세스하고 Fileshare$" somedirectorymyuser" 대신 해당 사용자를 사용하여 설치하면 폴더1에 액세스할 수 있습니다.

# mount -t cifs //mydomain.local/Files ~/fileserver -o username=adminuser,domain=mydomain.local,password=hunter2
# ls ~/fileserver/folder1
file1 file2 file3

하지만 일상적인 작업에는 이 승격된 계정을 사용할 수 없으며 DFS 공유 또는 파일 서버에 대한 권한을 변경할 수도 없습니다.

흥미롭게도 smbclient는 다음을 통해 탐색할 수 있습니다 myuser.

# smbclient '\\mydomain.local\Files' -U '[email protected]'
# smb: \> ls folder1
.
..
file1
file2
file3

저는 다양한 설치 옵션을 시도해 보았습니다(대부분 절박해서).

vers=1.0
vers=3.0
noserverino
sec=ntlmv2
sec=ntlmssp

내가 또 무엇을 시도할 수 있는지 아는 사람 있나요?

그런데 DFS 공유는 Windows 서버에 있습니다.

답변1

DFS 배포의 기본 공유 경로와 다른 공유에 연결하려고 하면 비슷한 효과가 나타납니다.

이로 인해 커널 설치가 "대상 힌트"를 인식하지 못하는 것으로 추측됩니다.

예: 제공된 공유는 \\ad.example.com\dir1다른 서버의 실제 공유를 가리킵니다 \\server1.ad.example.com\dir1.

마운트 명령

mount -t cifs //ad.example.com/dir1 /mnt

/mnt의 내용에 액세스할 수 있게 합니다.

반면에 \\ad.example.com\upperdir 다른 서버의 실제 공유를 가리키는 하위 디렉터리 "dir2"가 있는 공유도 있습니다.\\server2.ad.example.com\dir2

이제 명령을 사용하면

mount -t cifs //ad.example.com/upperdir /mnt

"/mnt"에서 하위 디렉터리 "dir2"를 볼 수 있지만 이에 액세스하려고 하면 jaffex에서 설명하는 것과 동일한 오류가 발생합니다(해당 파일이나 디렉터리 없음).

이것은 커널 버전 5.4.0을 사용하지 않고 내 우분투 20.04 시스템에서만 발생합니다. ubuntu 18.04와 커널 4.15.0의 동일한 조합을 사용하면 두 번째 부분도 작동합니다. "/proc/fs/cifs/dfscache"를 보면 서버가 사용할 올바른 공유를 제공하는 것으로 보입니다.

cache entry: path=\ad.example.com\upperdir\dir2,type=link,ttl=1800,etime=779521798,interlink=no,path_consumed=31,expired=yes
\server2.ad.example.com\dir2 (target hint)

그래서 나는 cifs 커널 모듈의 뭔가가 새 커널에서 다르게 작동한다고 추측합니다.

관련 정보