Могу ли я хранить вилки ресурсов OS X в общем ресурсе Samba где-либо еще *, кроме файлов dotbar?

15

Разветвления ресурсов OS X - это альтернативные потоки данных, прикрепленные к обычным файлам. Они могут содержать пользовательский значок файла, цветную метку, ключевые слова или любые другие метаданные, установленные пользователем или приложениями.

Они изначально поддерживается HFS + файловой системы OS X, но всякий раз , когда OS X подключает другую файловую систему, будь то локальная (FAT32) или удаленной (NFS, SMB) они хранятся в так называемых файлах «dotbar»: вилы ресурс для обычного файла name.extявляется хранится в другом обычном, но скрытом файле ._name.ext. (Их не следует путать с .DS_Storeфайлами, в которых хранятся параметры вида каталога, например значок или столбец, или положение его окна.)

Проблема с ._файлами точечных панелей состоит в том, что они являются обычными обычными файлами в целевой файловой системе с тем же расширением, что и исходный файл, что приводит к хаосу несколькими способами. Например, Ant и Maven увидят ._MyClass.javaеще один Java-файл для компиляции.

Я вижу, что OS X может быть сконфигурирован для хранения вилок ресурсов в именованных потоках SMB, и что Samba может быть сконфигурирован для хранения именованных потоков в расширенных атрибутах POSIX или, в качестве альтернативы, в каталоге хранилища где-то еще .

Оба решения позволят решить проблему с точечными файлами, загрязняющими целевую файловую систему, но я не могу заставить их работать.

 
некоторый атрибут

Сначала я попробовал с xattr:

vfs objects = streams_xattr
kernel oplocks = no

Последний вариант связан с этой ошибкой . Я сказал OS X использовать его, выполнив это в корне общего ресурса перед монтированием:

touch .com.apple.smb.streams.on

Но когда я попытался скопировать файл с помощью Finder, я получил эту ошибку:

Finder не может завершить операцию, потому что некоторые данные в «hello.java» не могут быть прочитаны или записаны.
(Код ошибки -36)

 
Депо

Тогда я попробовал с депо:

vfs objects = streams_depot

оставив .com.apple.smb.streams.onв корне долю. Пытаясь скопировать тот же файл с Finder, я получил еще одну ошибку:

Операция не может быть завершена из-за непредвиденной ошибки
(код ошибки -50)

 
Как я могу заставить OS X работать с любым из этих двух вариантов? Моя цель состоит в том, чтобы вытащить эти неприятные ._из общих каталогов.

Я попытался просто наложить вето на файлы точек:

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

Но это вызывает сбой некоторых приложений, например, Mercurial при запуске из OS X через смонтированный общий ресурс SMB .

Я использую OS X 10.9.5 в качестве клиента; Samba 3.6.6 от Debian Wheezy в качестве сервера.

Изменить: вот моя конфигурация в соответствии с просьбой:

[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
Тобия
источник
Вы пытались изменить unix extensionsдирективу в [global]сеансе, чтобы увидеть, решает ли ваш случай? Можете ли вы обновить свой вопрос выводом testparmкоманды?
fgbreel
@fgbreel Добавил конфигурацию в мой вопрос. Я не пробовал изменять расширения Unix, потому что он включен по умолчанию (и мне нужно сопоставить символические ссылки и прочее.) Как вы думаете, мне следует отключить его?
Тобиа
Да, не имеет смысла :(
fgbreel

Ответы:

2

Похоже, что вы могли бы сделать это с новым модулем vfs_fruit , уложенным вместе с модулем VFS vfs_streams_xattr .

Смотрите, например, эту ветку списка рассылки . Вам нужна базовая файловая система, которая поддерживает расширенные атрибуты, и она должна быть смонтирована с включенными ими.

Однако , согласно вики Samba , это новая функция в Samba 4.2, поэтому вам потребуется обновить ее. (На данный момент даже в Debian Sid [экспериментальный] еще нет 4.2.)

Если вас не интересует отказ от пакета Debian и создание новой версии Samba (или обновление до Jessie и ожидание появления 4.2 в jessie-backports), вы можете скрыть точечные файлы от клиентов.

У вас может быть два разных общих ресурса, которые указывают на один и тот же каталог, один из которых, например, скрывает ._files. Возможно, не оптимально, но может быть работоспособным.

Кит
источник
0

Я не знаю, возможно ли это с нативными настройками Mac, но вы можете использовать такой инструмент, как Asepsis, чтобы помочь с этой проблемой. Это перенесет все пометы Mac в их собственные папки.

Блейк Джонсон
источник
В прошлый раз, когда я проверял, Asepsis удаляет только .DS_Storeфайлы, а не файлы «точек», ._*которые вызывают большинство проблем в сетевых ресурсах
Tobia
@Tobia: Вы поднимаете хорошую мысль. В этом случае я нашел BlueHarvest , но он не бесплатный. Похоже, BlueHarvest использует мониторинг в режиме реального времени, в то время как Asepsis использует пассивное перенаправление (путем исправления системного файла).
Блейк Джонсон,
Благодарю. Но я буду ждать решения на стороне Samba, так как считаю, что это просто вопрос конфигурации.
Tobia