mount -t cifsは半ランダムなinode番号を提供します。

mount -t cifsは半ランダムなinode番号を提供します。

インストール、再起動などの過程でinodeが持続する必要があるアプリケーションがあります。を
使用してくださいmount -t cifs -o serverino。 (サーバーがサポートしている場合)しかし、マウントすると、いくつかのランダムなファイルとディレクトリのセットには、クライアントによって生成された順次ID < 2^32があります。

、など、いくつかの組み合わせを試しましたが、-o nounix -o serverino -o mfsymlinks -o noacls何も物事のランダム性を変えることができないようです。

2 ^ 32以上のinodeを返すたびに、複数のマウント試行(完全には確認されていません)で見た場合、特定のファイル/ディレクトリに対して一貫性があるように見えますが、比率は高いですが、任意のファイルセットには小さい値があります。リスト出力でinodeの数を単調に増加させます。

サーバーはWindows2012R2です。クライアントは最新のカーネルを備えたCentOSとUbuntu Linuxです。 1つは3.10.0、もう1つは4.4.0です。

このようにインストールするときに、UniqueIdまたはFileIDをクライアントにinodeとして返すようにクライアントまたはサーバー側で設定できるものはありますか?

(バージョン1、2.1、および3.0プロトコルで試行されました)

答え1

~によるとmount.cifs(8)出荷書類ビーチ、このserverinoオプションを渡すと、サーバー側のinode番号付けが有効になりますが、サーバーが「CIFS UNIX拡張」を使用できる場合にのみ適用されます(「INODE NUMBERS」セクションを参照)。

Unix拡張が有効になっている場合、POSIX呼び出しに応答してサーバーによって提供された実際のinode番号がinode番号として使用されます。

Unix拡張が無効になっていて、マウントオプションが有効になっていると、serverinoサーバーのinode番号を取得できません。クライアントは通常、サーバーによって割り当てられた " UniqueID"をinode番号にマップします。

UniqueIDの値はサーバーのinode番号と同じではありません。 UniqueID値はサーバー全体で一意であり、通常2の32平方より大きいです。この値は通常、大規模ファイルサポート(LFS)なしでコンパイルされたプログラムでglibc EOVERFLOWエラーを引き起こします。これは、ターゲット構造ドメインに合わないためです。-D_FILE_OFFSET_BITS=64この問題を回避するには、LFSサポート(たとえばuse)を使用してプログラムをコンパイルすることをお勧めします。 「noserverino」マウントオプションを使用して、クライアントで2未満の32平方を生成するinodeの数を生成することもできます。ただし、ハードリンクを正しく検出できない場合があります。

直接表現しないドキュメントからCONFIG_CIFS_POSIXただし、カーネル(カーネルオプション)で「CIFS POSIX拡張」を有効にする必要があるかもしれません。

Windows Server 2012 にはこれらの拡張機能がないため、次のものが必要になる場合があります。代わりにNFSサーバー機能を有効にしてください。そしてそれを使用してください。

しかし、cifsこれがこの動作を表す唯​​一のファイルシステムではありません。/sys/devおよび/procファイルシステムもこの動作を示します。

関連情報