저는 Raspbian을 실행하는 Raspberry Pi에서 SMB 공유의 파일로 작업하고 있습니다. 이 파일에 액세스할 때마다 시스템 로그에 다음 메시지가 표시됩니다.
CIFS VFS: bogus file nlink value 0
이것이 실제로 무엇을 의미합니까? 어떻게 제거합니까?
SMB 서버는 Apple TimeCapsule입니다.
답변1
이는 마운트 지점에 파일이 있고 해당 파일의 Inode 링크에 1보다 작은 숫자가 있는 "가짜" 상황인 것 같습니다.
여기있어CIF 구조.는 cf_nlink
특정 파일에 있는 inode 링크 수입니다.
이 작품코드는 파일의 모든 정보를 cifs에 채울 것임을 보여줍니다.
if (symlink) {
fattr->cf_mode = S_IFLNK;
fattr->cf_dtype = DT_LNK;
} else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;
fattr->cf_dtype = DT_DIR;
/*
* Server can return wrong NumberOfLinks value for directories
* when Unix extensions are disabled - fake it.
*/
if (!tcon->unix_ext)
fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
} else {
fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode;
fattr->cf_dtype = DT_REG;
/* clear write bits if ATTR_READONLY is set */
if (fattr->cf_cifsattrs & ATTR_READONLY)
fattr->cf_mode &= ~(S_IWUGO);
/*
* Don't accept zero nlink from non-unix servers unless
* delete is pending. Instead mark it as unknown.
*/
if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
!info->DeletePending) {
cifs_dbg(1, "bogus file nlink value %u\n",
fattr->cf_nlink);
fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
}
}
방법: 심볼릭 링크인 경우 속성을 설정하면 됩니다. Unix 확장이 비활성화되었을 때 서버가 잘못된 수의 링크를 반환할 수 있는 디렉터리인 경우 CIFS_FATTR_UNKNOWN_NLINK
Linux CIFS 클라이언트에서 "내가 가지고 있는 nlink 수를 모르겠습니다"로 차단하면 됩니다.
그런데 파일이 cf_nlink < 1
삭제되지 않은 상태( !info->DeletePending
)도 아니고 유닉스 확장자를 사용할 수 없는 상태( tcon->unix_ext
)가 있는 경우도 있는데, 이상합니다. 하드 링크가 없고 삭제되지 않은 파일의 경우 다음 메시지를 받게 됩니다.CIFS VFS: bogus file nlink value 0
상황을 충분히 이해하지만 해결책을 제시할 수는 없습니다. 아마도클라이언트와 서버 사이트 모두에 Unix와 유사한 확장이 있으므로 문제를 가릴 수 있으므로 Unix 확장을 강제로 사용하십시오.