私は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
)でもなく、Unix拡張子が使用できない状態(tcon->unix_ext
)がある場合もありますが、奇妙です。ハードリンクがなく、削除されていないファイルの場合は、次のメッセージが表示されます。CIFS VFS: bogus file nlink value 0
状況を十分に理解していますが、解決策を提示することはできません。 おそらくクライアントとサーバーの両方のサイトに Unix と同様の拡張機能があるため、問題を隠すことができますので、Unix 拡張機能を強制してください。