저도 세팅이 귀찬으니 인터넷에서 몇개 검색해서 적용했었습니다.
4~5개의 글을 보고 공통적으로 적용되는 사항을 적용합니다.
사용자마다 다른 옵션이 있다면 그 옵션에 대해서만 검색해보고 적용했습니다.

그래서 문제가 발생했습니다.
구글링해서 나오는 상위 5개가 공통적으로 틀린 정보를 제공하고 있었지요
물론 작성 당시에는 맞았을지 모릅니다.
하지만 올해 초부터는 틀린 정보였습니다.

제 글이 얼마나 상위에 올라갈지 모르겠으나 지금은 작동하지 않는 정보로 고생하지 않으시면 좋겠습니다.

증상 1 : 43 에러

mac에서 SMB에 파일을 업로드하고 다운로드하는데 문제가 없습니다.
하지만 fuse fs가 마운트 된 디렉토리에서는 읽기가 가능하나 쓰기나 삭제, 수정이 불가능합니다.
43에러

원인 : acl_xattr

acl_xattr – Samba.org
이 모듈을 사용하라고 안내하는 글은 아주 오래된 게시물에서만 확인할 수 있습니다.
하지만 맥에서 SMB를 사용할 때 이 모듈을 사용하라는 글이 있었고, 위 링크를 보았을 때 해가 될것이라고 생각하지 않았습니다.

samba.org에 따르면 이 모듈은 윈도우에서 ACL 저장이 필요할 때 이 모듈이 필요하다고 합니다.

윈도우의 ACL과 mac이나 리눅스의 extended Attribte과 비슷한 요소입니다.
os가 파일에 사용하는 추가 정보를 의미하죠.
권한 같은 것들이 저장됩니다.

하지만 이 모듈이 fruit 모듈과 충돌이 있습니다.

해결방안 : vfs 0bjects에서 acl_xattr 제거

저는 acl_xattr 모듈을 제거하였고, 제거하였음에도 윈도우에서 파일 복사, 압축, 압축 풀기, 앱 실행 등은 정상 작동하는 것을 확인했습니다.

증상2 : 50 에러

파일 업로드 시 발생하는 에러 메시지
파일 업로드 시 발생하는 에러메시지

파일 삭제시 발생하는 에러 메시지
파일 삭제시 발생하는 에러 메시지

이러한 메시지가 발생하면 mac의 extended attributes 문제입니다.
저는 모든 공간에서 이 문제가 발생하지는 않았습니다.
rclone으로 마운트 된 fuse filesystem에서만 문제가 발생하였습니다.

원인 : stream_xattr, stream_depot

mac용 smb 옵션에 대해 찾아보면 이러한 옵션을 볼 수 있습니다.

vfs objects = catia fruit streams_xattr recycle

fruit:metadata = stream
fruit:veto_appledouble = yes

option

각 옵션에 대해 설명을 드리겠습니다.
fruit:metadata = stream은 apple double을 다음 vfs object로 전달합니다.
따라서 나중에 objects를 추가하더라도 fruit 다음에 streams_xattr이나 streams_depot이 꼭 위치해야 합니다.

그렇다면 streams_xattrstreams_depot은 어떤 기능을 할까?
전달 받은 xattr을 file system의 NTFS 데이터 스트림에 저장합니다.
streams_xattr은 파일 시스템에 여러개의 xattr을 저장합니다.
그러나 여러개의 xattr을 저장하지 못하는 filesystem이 있을 수 있습니다.
이런 경우 streams_xattr을 이용하면 여러개의 폴더를 만들어 해당 폴더에 각각의 xattr을 저장해준다고 합니다.
최근 20년의 file system에서는 xattr은 여러개가 저장됩니다.
fat32를 제외하면 streams_depot은 사용하게 될 가능성이 없습니다.

마지막으로 fruit:veto_appledouble는 apple double의 생성을 차단합니다.
기본으로 차단되어 잇는데, 이 파일은 모든 파일과 폴더에 대해 생성되는 파일입니다.
윈도우의 desktop.ini처럼 .DS_Store에는 마지막에 본 정렬 상태(파일 이름순, 업로드 순 등)나 보기 설정(자세히, 목록 등)이 저장됩니다.
._파일명 의 형태로 저장되는 것도 apple double에 해당합니다.

이 파일이 차단되면 파일 압축하거나 압축 풀기 등이 불가능할 수도 있습니다.
하지만 fruit:metadata = stream을 사용하면 차단하도록 해두어도 문제가 없습니다.

그렇다면 이 내용이 문제가 되는 것은 무엇일까요?

해결방안

먼저 fruit:resources에는 xattr가 있습니다.
이 옵션을 이용하면 filesystem에 xattr이 저장됩니다.

그럼 streams_xattr과 같은가?
설명만 보면 결국 같은 기능입니다.
streams_xattr 기능이 이미 fruit 안에 포함되어있다고 볼수 있죠
하지만 stream을 사용하는 것과 달리 이 옵션에는 solaris에서 파생된 파일 시스템이나 zfs에서만 사용 가능하다고 합니다.

저는 zfs 파일시스템이므로 stream을 사용하지 않기로 했습니다.

대신 이 옵션으로 이용하면 fruit:veto_appledouble = no를 해줘야 합니다.
분명히 fruit:veto_appledouble의 설명을 보면 resource가 file인 경우에만 영향을 끼친다고 적혀있으나, 저는 이상하게 결과가 다르더군요.

vfs objects = catia fruit shadow_copy2 recycle

fruit:resource = xattr
fruit:metadata = netatalk
fruit:veto_appledouble = no

그래서 저는 stream_xattr을 이용하지 않고 fruit만 사용하도록 사용하도록 하여 모든 공간에서 파일을 읽고 쓰고 수정할 수 있게 되었습니다.

증상 3 : 파일 실행하거나 업로드하면 사라짐

파일을 편집하려고 더블클릭하거나 파일을 업로드하면 업로드 완료 후 mac에서 표시되지 않는 증상이 있습니다.

원인

.DSStore 파일이 삭제되고, .* 파일이 삭제되지 않기 때문입니다.
폴더에 접근하게 되면 폴더 안에 .DS_Store 파일이 생성됩니다.
그리고 파일에 접근하게 되면 파일 명 앞에 ._가 붙은 파일이 생성되죠.

이 때 맥은 .DSStore 파일이 없고, .*파일이 존재하는 경우 이 파일이 표시되지 않습니다.

해결방안

veto files = /.AppleDB/.AppleDouble/.AppleDesktop/._*/Network Trash Folder/Temporary Items/.streams/.digest/
delete veto files = yes

veto로 삭제할 파일을 지정 후 veto 파일을 삭제합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock