가짜 파일 nlink 값은 무엇입니까?

가짜 파일 nlink 값은 무엇입니까?

저는 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_NLINKLinux CIFS 클라이언트에서 "내가 가지고 있는 nlink 수를 모르겠습니다"로 차단하면 됩니다.

그런데 파일이 cf_nlink < 1삭제되지 않은 상태( !info->DeletePending)도 아니고 유닉스 확장자를 사용할 수 없는 상태( tcon->unix_ext)가 있는 경우도 있는데, 이상합니다. 하드 링크가 없고 삭제되지 않은 파일의 경우 다음 메시지를 받게 됩니다.CIFS VFS: bogus file nlink value 0

상황을 충분히 이해하지만 해결책을 제시할 수는 없습니다. 아마도클라이언트와 서버 사이트 모두에 Unix와 유사한 확장이 있으므로 문제를 가릴 수 있으므로 Unix 확장을 강제로 사용하십시오.

관련 정보