CIFS와의 파일 시스템 호환성

CIFS와의 파일 시스템 호환성

저는 Raspberry Pi를 음악 파일 서버로 사용해 왔는데 마음에 들지 않습니다. 현재 설정 samba에서는 내 RPi의 서버와 WD Passport로 포맷된 USB 드라이브를 사용합니다 vfat. 내 Sonos 음악 시스템용 라이브러리는 다음과 같습니다. Sonos는 드라이브를 설치하고 내가 선택할 수 있도록 메뉴에 찾은 모든 음악을 나열합니다.

대부분의 경우 Sonos 인터페이스는 RPi Samba 서버와 원활하게 실행되는 것 같습니다. 그러나 내 MacOS에서는 잘 작동하지 않습니다. 저는 음악 라이브러리를 유지하기 위해 Mac을 사용하는데 두 가지 주요 문제점이 있습니다.

  1. 음악 라이브러리에서 삭제 및 추가하려면 Samba 구성을 통해 사용자 권한을 변경해야 합니다.
  2. Mac Finder 응용 프로그램의 RPi에서 Samba 음악 공유를 탐색하면 많은 "누락 및 아티팩트"가 드러나는 반면, CIFS를 사용하여 NetgearNAS에서 정확히 동일한 폴더를 탐색하면 아래 이미지를 참조하세요.

여기에 이미지 설명을 입력하세요.

친구는 NetgearNAS를 Sonos 시스템의 파일 서버로 사용합니다. 매우 안정적으로 작동하며 "아티팩트"가 Finder에 표시되지 않습니다. 그의 NetgearNAS는 CIFSCIFS만 사용하도록 구성되어 있습니다. 내 RPi에서 CIFS를 사용해 보고 싶지만 지금까지의 조사 결과는 혼란만 가중시켰습니다.

마지막으로 내 질문은 다음과 같습니다.

  1. SMB와 CIFS는 밀접하게 연관되어 있는 것처럼 보이지만 "동일한 것"입니까? 그렇지 않다면 차이점은 무엇입니까?

  2. ext4일부 소스에서는 CIFS를 파일 시스템( , 등이 파일 시스템 이라는 의미에서 FAT32)으로 참조하는 반면 다른 소스에서는 이를 네트워크 프로토콜로 참조합니다. CIFS 확장자가 없기 때문에 mkfsCIFS를 파일 시스템으로 호출하는 참조가 오해의 소지가 있는 것 같습니다. 아니면 뭔가 빠졌습니까?

  3. CIFS가 단순한 네트워크 프로토콜이라면 특정 파일 시스템으로 제한됩니까? 즉, CIFS에서 FAT32 또는 ext4를 사용할 수 있습니까? CIFS에서 사용하는 파일 시스템이 크로스 플랫폼 서버 프로토콜로 사용하는 데 영향을 줍니까?

답변1

지방 조직네트워크 사용 및 다중 사용자 환경에 전혀 적합하지 않은 매우 제한된 파일 시스템입니다(고대 MS-DOS 파일 시스템입니다). 즉, 호환성을 최대화하려면 USB 썸 드라이브 이외의 다른 것과 함께 VFAT를 사용하지 마십시오.

기본적으로 모든 문제는 MacOS가 SMB/CIFS를 통해 확장된 속성, 파일 권한 등을 VFAT에 저장하려고 시도하지만 VFAT는 이러한 것을 지원하지 않으며 매우 긴 파일 이름이나 UTF-8을 지원하지 않는다는 사실에서 비롯됩니다. 파일 이름 또는 현대 사용자가 관심을 갖는 모든 것.

USB 드라이브에서 실제 일반 Linux 파일 시스템(ext4, xfs)을 사용하면 모든 것이 잘 됩니다. 이렇게 하면 파일 누락, 권한 오류, 아티팩트 등과 같은 문제가 확실히 해결됩니다.

기타 질문에 관하여:

  • SMB와 CIFS는 동일한 Microsoft 네트워크 파일 시스템(서버 메시지 블록 프로토콜). CIFS는 실제로 CIFS의 첫 번째 버전(SMB 버전 1.0)이었고 최신 버전(SMB v. 2.0, 3.0, 3.1, ...)으로 대체되었기 때문에 여기에는 약간의 혼란이 있습니다. 그러나 Linux에서는 어떤 이유로 첫 번째 버전을 "smbfs"라고 하고 최신 버전을 "cifs"라고 합니다. 어쨌든 이제 Linux와 MacOS 사이에는 차이가 없으며 둘 다 서로 바꿔 사용할 수 있습니다.

  • SMB/CIFS 예회로망파일 시스템. 와 직접적인 관계는 전혀 없습니다막힌파일 시스템. 이는 파일 추상화 및 일반 I/O 모드를 제공한다는 점에서 파일 시스템이지만 모든 네트워크 파일 시스템(NFS, SMB, WebDAV, AFP...)을 사용하여 모든 데이터의 파일을 공유할 수 있습니다. 블록 파일 시스템(FAT32, ext4, HFS+, xfs, NTFS, ZFS...).

  • 다양한 블록 파일 시스템은 다양한 기능(직접 IO, POSIX ACL, Windows ACL, 확장 속성, 파일 스트림, "빈" 파일, 파일 버전 관리, 메타데이터 버전 관리, 하위 볼륨, 볼륨 스냅샷...)을 제공합니다. 다양한 네트워크 파일 시스템도 다양한 기능을 제공합니다. 네트워크 파일 시스템 기능이 기본 블록 파일 시스템에 매핑되는 방식은 매우 다양하며 끝없는 혼란, 고통 및 버그의 원인입니다.

예를 들어 Windows에서 파생된 CIFS는 기본적으로 Windows ACL을 사용하지만 안타깝게도 대부분의 Unix/Linux 파일 시스템의 POSIX ACL에 일대일 매핑되지 않습니다. 이제 Samba는 확장된 속성을 사용하여 실제 Windows ACL을 저장함으로써 이 문제를 해결합니다. 그러나 기본 블록 파일 시스템이 Windows ACL을 지원하지 않는 경우속성, 문제가 발생합니다.

답변2

몇 가지 질문에 답변해 드리겠습니다.

우선 CIFS는 SMB 프로토콜의 버전입니다. 예를 들어 참조하십시오.SMB 위키 페이지.

두 번째 질문은 파일 시스템과 네트워크 프로토콜에 관한 것입니다. CIFS/SMB는 네트워크 프로토콜입니다. 파일 시스템은 Linux 세계에서 온 것입니다. mount다른 파일 시스템처럼 공유하여(권한 가정) 파일에 투명하게 액세스할 수 있습니다. 따라서 mount.cifs이 특정 프로토콜에 대한 설치 프로세스를 처리하는 프로그램이 있습니다 .

세 번째 질문에 따르면 네트워크 프로토콜은 기본 파일 시스템과 관련이 없습니다. 이는 (추상적인 방식으로) 유선을 통해 데이터를 전송하는 방법만 지정합니다. 데이터는 하드 드라이브(파일 시스템이라고도 함)에서 직접 가져오거나 동적으로 생성될 수 있습니다(내보내 /proc거나 /sys폴더로 가져오면 어떻게 되는지 생각해보세요...).

그러나 이 프로토콜은 특정 사용 사례를 염두에 두고 설계되었습니다. 내가 아는 한 이것은 FAT 시스템입니다. Linux/Unix에서 확장된 권한을 허용하도록 확장이 만들어졌습니다. 여기서는 무엇이 가능한지, 무엇이 구현되는지에 대해 약간 지쳤습니다(특히 서버와 클라이언트 모두 공통의 최대 프로토콜 버전을 찾아야 하기 때문에). 다른 컴퓨터의 다른 소프트웨어 버전이 여기에서 작동할 수 있지만 확실하지 않습니다.


추가 조사가 필요한 기본 정보를 제공하기보다는 귀하가 제기한 몇 가지 질문에 대해 답변해 드리겠습니다.

귀하의 "누락 및 아티팩트"는 코드 페이지/문자 세트 문제로 인해 발생합니다. ASCII가 아닌 문자에서만 발생합니다. 그렇죠? 지금은 어떻게 설정되어 있는지 모르겠습니다. 먼저 USB 장치의 파일이 올바른 이름으로 파일 시스템에 기록되었는지 확인할 수 있습니까? 그런 다음 RPi가 파일도 읽을 수 있는지 확인합니다(CIFS 없이 ssh또는 직접 연결된 모니터/키보드를 사용하여 해당 파일을 읽을 수 있음).

다양한 기본 파일 시스템은 파일 이름에 다양한 문자 집합을 지원하므로 파일 이름을 다르게 처리하도록 SMB를 구성할 수 있습니다. 이는 가능한 한 많은 기본 파일 시스템을 지원하는 기능입니다(참고자료 참조 man smb.conf). 인코딩이 잘못되었다고 가정하면 이는 클라이언트의 설치 문제일 수도 있습니다. 따라서 시스템을 구축하고 각 단계를 검증하는 것부터 시작하세요.

언급한 사용자 권한 문제와 관련하여 인증된 액세스(사용자 + 비밀번호)가 필요하며 기본 권한이 있는 기본 사용자를 사용하도록 samba/cifs 서버를 구성하십시오. 그렇지 않으면 저장소가 문제입니다. 다시 아래에서 위로:

  • USB 메모리의 파일은 어느 사용자/그룹에 속합니까? 그들은 vfat주인 없이 누워있습니다. 따라서 Linux 커널은 마운트 옵션에 따라 파일에 사용자를 적용합니다.
  • 모든 파일/폴더가 이 사용자에게 속하는지 확인하십시오(다시 Rpi에서 ssh/터미널 액세스 사용).
  • 새로 생성된 파일(터미널에서)이 동일한 권한을 받는지 확인하세요. 그렇지 않은 경우 설치 구성(설치 옵션 uid, gid, 및 가능한 경우) umask을 사용하십시오 . 바라보다 .dmaskfmaskman mount
  • SMB/CIFS에서 파일/폴더를 생성하고 UID/GID/권한을 확인합니다. 게스트 전용 액세스인 경우 삼바 구성()의 합계로 create mask충분할 수 있습니다. 그렇지 않은 경우 문제를 더 자세히 설명해야 합니다.directory maskman smb.conf

관련 정보