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입니다. 하나는 3.10.0이고 다른 하나는 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파일 시스템도 이 동작을 나타낼 수 있습니다.

관련 정보