Kann ich OS X-Resource-Forks in einer Samba-Freigabe an einem anderen Ort als in Dotbar-Dateien speichern?

15

OS X-Resource-Forks sind alternative Datenströme, die an reguläre Dateien angehängt werden. Sie können das benutzerdefinierte Symbol, die farbige Beschriftung, Schlüsselwörter oder andere vom Benutzer oder von Anwendungen festgelegte Metadaten der Datei enthalten.

Sie werden nativ vom HFS + -Dateisystem von OS X unterstützt, aber wenn OS X ein anderes Dateisystem bereitstellt, egal ob lokal (FAT32) oder remote (NFS, SMB), werden sie in sogenannten "Dotbar" -Dateien gespeichert: der Resource Fork für die reguläre Datei name.extist in einer anderen regulären, aber versteckten Datei gespeichert ._name.ext. (Sie dürfen nicht mit .DS_StoreDateien verwechselt werden, in denen die Ansichtseinstellungen eines Verzeichnisses gespeichert sind, z. B. Symbol- oder Spaltenansicht oder die Position seines Fensters.)

Das Problem bei Dotbar- ._Dateien besteht darin, dass es sich im Zieldateisystem tatsächlich um reguläre Dateien handelt, die dieselbe Erweiterung wie die Originaldatei haben und daher in vielerlei Hinsicht Chaos anrichten. Beispielsweise sehen Ant und Maven eine ._MyClass.javaweitere zu kompilierende Java-Datei.

Ich sehe, dass OS X so konfiguriert werden kann, dass Resource Forks in benannten SMB-Streams gespeichert werden, und dass Samba so konfiguriert werden kann, dass benannte Streams in erweiterten POSIX-Attributen oder alternativ in einem Depotverzeichnis an einer anderen Stelle gespeichert werden .

Beide Lösungen würden das Problem der Dotbar-Dateien lösen, die das Zieldateisystem verschmutzen, aber ich kann auch nicht zum Laufen bringen.

 
Xattr

Zuerst habe ich es mit xattr versucht:

vfs objects = streams_xattr
kernel oplocks = no

Die letztere Option ist auf diesen Fehler zurückzuführen . Ich habe OS X angewiesen, es zu verwenden, indem ich es im Stammverzeichnis der Freigabe ausführte, bevor ich es bereitstellte:

touch .com.apple.smb.streams.on

Aber als ich versuchte, eine Datei mit Finder zu kopieren, kam folgende Fehlermeldung:

Der Finder kann den Vorgang nicht abschließen, da einige Daten in "hello.java" nicht gelesen oder geschrieben werden können.
(Fehlercode -36)

 
Depot

Dann habe ich es mit depot versucht:

vfs objects = streams_depot

Verlassen .com.apple.smb.streams.onin der Wurzel der Aktie. Beim Versuch, dieselbe Datei mit Finder zu kopieren, ist ein weiterer Fehler aufgetreten:

Der Vorgang kann nicht abgeschlossen werden, da ein unerwarteter Fehler aufgetreten ist
(Fehlercode -50).

 
Wie kann ich OS X mit einer dieser beiden Optionen zum Laufen bringen? Mein Ziel ist es, diese bösen ._aus den freigegebenen Verzeichnissen herauszuholen.

Ich habe versucht, Dotbar-Dateien einfach mit einem Veto zu belegen:

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

Dies führt jedoch dazu, dass einige Anwendungen fehlschlagen, beispielsweise Mercurial, wenn OS X über eine gemountete SMB-Freigabe ausgeführt wird .

Ich verwende OS X 10.9.5 als Client. Samba 3.6.6 von Debian Wheezy als Server.

Bearbeiten: hier ist meine Konfiguration wie gewünscht:

[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
Tobia
quelle
Haben Sie versucht, die unix extensionsDirektive in die [global]Sitzung zu ändern, um zu sehen, ob Ihr Fall gelöst wird? Können Sie Ihre Frage mit dem testparmBefehl output from aktualisieren ?
fgbreel
@fgbreel Konfiguration zu meiner Frage hinzugefügt. Ich habe nicht versucht, Unix-Erweiterungen zu ändern, da diese standardmäßig aktiviert sind (und ich symbolische Links und ähnliches abbilden muss). Soll ich sie deaktivieren?
Tobia
Ja,
ergibt

Antworten:

2

Es sieht aus wie Sie vielleicht dies mit der neuen Lage zu tun vfs_fruit - Modul, mit dem gestapelten vfs_streams_xattr VFS - Modul.

Siehe zum Beispiel diesen Mailinglisten-Thread . Sie benötigen ein zugrunde liegendes Dateisystem, das erweiterte Attribute unterstützt, und Sie müssen es mit aktivierten bereitstellen.

Doch nach dem Samba - Wiki , das ist eine neue Funktion in Samba 4.2, so dass Sie nach Bedarf gehen zu aktualisieren. (Im Moment hat selbst Debian Sid [experimental] noch nicht 4.2.)

Wenn Sie nicht daran interessiert sind, das Debian-Paket fallen zu lassen und eine neue Version von Samba zu erstellen (oder auf Jessie zu aktualisieren und darauf zu warten, dass 4.2 in jessie-backports angezeigt wird), können Sie Punktedateien vor den Clients verbergen.

Sie könnten zwei verschiedene Freigaben haben, die auf dasselbe Verzeichnis verweisen, von denen eine beispielsweise die ._Dateien verbirgt. Vielleicht nicht optimal, aber machbar.

Keith
quelle
0

Ich weiß nicht, ob dies mit nativen Mac-Einstellungen möglich ist, aber Sie können ein Tool wie Asepsis verwenden , um dieses Problem zu beheben. Alle Mac-Dateien werden in ihre eigenen Ordner verschoben.

Blake Johnson
quelle
Das letzte Mal, als ich es überprüft habe, entfernt Asepsis nur .DS_StoreDateien, nicht die "Dotbar" ._*-Dateien, die die meisten Probleme bei Netzwerkfreigaben verursachen
Tobia
@Tobia: Du sprichst einen guten Punkt an. In diesem Fall habe ich auch BlueHarvest gefunden , aber es ist nicht kostenlos. BlueHarvest verwendet anscheinend eine Echtzeitüberwachung, während Asepsis eine passive Umleitung verwendet (durch Patchen einer Systemdatei).
Blake Johnson
Vielen Dank. Aber ich werde auf eine Lösung auf der Samba-Seite warten, da ich glaube, dass es nur eine Frage der Konfiguration ist.
Tobia