Czy mogę przechowywać widelce zasobów OS X w udziale Samby gdziekolwiek * * * niż w plikach dotbar?


15

Widelce zasobów OS X to alternatywne strumienie danych dołączone do zwykłych plików. Mogą zawierać niestandardową ikonę pliku, kolorową etykietę, słowa kluczowe lub dowolne inne metadane ustawione przez użytkownika lub aplikacje.

Są one natywnie obsługiwane przez system plików HFS + OS X, ale ilekroć system OS X podłącza inny system plików, zarówno lokalny (FAT32), jak i zdalny (NFS, SMB), są one przechowywane w tak zwanych plikach „kropkowych”: rozwidlenie zasobów dla zwykłego pliku name.extto przechowywane w innym zwykłym, ale ukrytym pliku ._name.ext. (Nie należy ich mylić z .DS_Storeplikami, które przechowują ustawienia widoku katalogu, takie jak widok ikona vs. kolumna lub położenie okna).

Problem z ._plikami dotbar polega na tym, że są to zwykłe pliki w docelowym systemie plików, z takim samym rozszerzeniem jak plik oryginalny, dlatego sieją spustoszenie na wiele sposobów. Na przykład Ant i Maven zobaczą ._MyClass.javakolejny plik Java do skompilowania.

Widzę, że OS X można skonfigurować do przechowywania widelców zasobów w nazwanych strumieniach SMB i że Samba można skonfigurować do przechowywania nazwanych strumieni w rozszerzonych atrybutach POSIX lub, alternatywnie, w katalogu magazynu gdzie indziej .

Oba rozwiązania rozwiązałyby problem zanieczyszczenia plików docelowych przez docelowy system plików, ale ja też nie mogę pracować.

 
Xattr

Najpierw próbowałem z xattr:

vfs objects = streams_xattr
kernel oplocks = no

Ta ostatnia opcja wynika z tego błędu . Powiedziałem OS X, aby go użył, robiąc to w katalogu głównym udziału, przed zamontowaniem:

touch .com.apple.smb.streams.on

Ale kiedy próbowałem skopiować plik za pomocą Findera, otrzymałem ten błąd:

Finder nie może ukończyć operacji, ponieważ niektórych danych w „hello.java” nie można odczytać ani zapisać.
(Kod błędu -36)

 
Magazyn

Potem spróbowałem z depot:

vfs objects = streams_depot

pozostawiając .com.apple.smb.streams.onw katalogu głównym udziału. Próbując skopiować ten sam plik za pomocą Findera, otrzymałem kolejny błąd:

Nie można zakończyć operacji, ponieważ wystąpił nieoczekiwany błąd
(kod błędu -50)

 
Jak sprawić, by OS X działał z jedną z tych dwóch opcji? Moim celem jest ._usunięcie tych paskudnych ze wspólnych katalogów.

Próbowałem po prostu zawetować pliki z kropkami:

veto files = /._*/
delete veto files = yes

Ale powoduje to awarię niektórych aplikacji, na przykład Mercurial po uruchomieniu z OS X na zamontowanym udziale SMB .

Używam OS X 10.9.5 jako klienta; Samba 3.6.6 z Debian Wheezy jako serwer.

Edycja: oto moja konfiguracja zgodnie z żądaniem:

[global]
    security = user
    invalid users = root
    workgroup = COMPANY_NAME
    encrypt passwords = true
    panic action = /usr/share/samba/panic-action %d
    syslog = yes
    syslog only = yes

    # PERFORMANCE TUNING
    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 SO_KEEPALIVE
    read raw = true
    write raw = true
    use sendfile = true
    min receivefile size = 16384
    aio read size = 16384
    aio write size = 16384
    max xmit = 131072
    getwd cache = true

    # DEFAULT OPTIONS FOR ALL SHARES
    writeable = true
    force group = company_group

    create mask = 664
    security mask = 664
    force create mode = 664
    force security mode = 664

    directory mask = 2775
    directory security mask = 2775
    force directory mode = 2775
    force directory security mode = 2775

    # solve problem where OS X clients remove mode 0100
    map archive = no

[homes]
    browseable = no

Czy próbowałeś zmienić unix extensionsdyrektywę w [global]sesję, aby sprawdzić, czy to rozwiązuje twoją sprawę? Czy możesz zaktualizować swoje pytanie o dane wyjściowe testparmpolecenia?
fgbreel,

@fgbreel Dodano konfigurację do mojego pytania. Nie próbowałem zmieniać rozszerzeń Unixa, ponieważ jest on domyślnie włączony (a ja muszę mapować dowiązania symboliczne i inne rzeczy.) Czy uważasz, że powinienem go wyłączyć?
Tobia,

Tak, nie ma sensu :(
fgbreel

Odpowiedzi:


2

Wygląda na to, że możesz to zrobić dzięki nowemu modułowi vfs_fruit , ułożonemu z modułem VFS vfs_streams_xattr .

Zobacz na przykład ten wątek listy adresowej . Potrzebujesz bazowego systemu plików, który obsługuje rozszerzone atrybuty, i musisz go zamontować z włączonymi nimi.

Jednak według wiki Samby jest to nowa funkcja w Sambie 4.2, więc będziesz musiał ją zaktualizować. (W tej chwili nawet Debian Sid [eksperymentalny] nie ma jeszcze wersji 4.2.)

Jeśli nie jesteś zainteresowany porzuceniem pakietu Debian i zbudowaniem nowej wersji Samby (lub uaktualnieniem do Jessie i czekaniem, aż 4.2 pojawi się w jessie-backports), możesz ukryć pliki kropek przed klientami.

Możesz mieć dwa różne udziały wskazujące ten sam katalog, z których jeden ukrywa na przykład pliki ._. Być może nie jest optymalny, ale może być wykonalny.


0

Nie wiem, czy jest to możliwe z natywnymi preferencjami Maca, ale możesz użyć narzędzia takiego jak Asepsis, aby pomóc w rozwiązaniu tego problemu. Przeniesie wszystkie zrzuty Maca do ich własnych folderów.


Kiedy ostatnio sprawdzałem, Asepsis usuwa tylko .DS_Storepliki, a nie pliki „dotbar” ._*, które powodują najwięcej problemów w udziałach sieciowych
Tobia

@Tobia: Podnosisz dobry punkt. W takim przypadku znalazłem również BlueHarvest , ale nie jest za darmo. Wygląda na to, że BlueHarvest używa monitorowania w czasie rzeczywistym, podczas gdy Asepsis używa pasywnego przekierowania (poprzez łatanie pliku systemowego).
Blake Johnson

Dzięki. Ale poczekam na rozwiązanie po stronie Samby, ponieważ uważam, że to tylko kwestia konfiguracji.
Tobia,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.