Samba, CIFS и удаление файлов - PullRequest
0 голосов
/ 22 августа 2009

Итак, у меня есть общий ресурс Samba, расположенный на сервере A. У меня есть этот общий ресурс, смонтированный на двух других серверах, B и C. Идея состоит в том, что B и C должны записывать временные файлы в одно место, чтобы иметь несколько фоновых изображений. задания обработки (также выполняющиеся на B и C) имеют доступ к одному и тому же пулу файлов.

Когда фоновые процессы завершены, они удаляют файл, над которым они работали. Когда я делаю список каталогов общего ресурса после того, как файл был удален, исходные имена файлов теперь располагаются в строках cifs79, cifs78 и т. Д. Они занимают столько же места, что и исходный файл, поэтому я предполагаю, что они оригиналы, только что переименованные.

Проблема в том, что эти файлы не исчезнут, если я не перезапущу самбу (что я никогда не планирую делать). Мне не хватает простого параметра конфигурации, который немедленно удаляет файлы?

Я создал свои акции с помощью этой команды:

mount -t cifs //10.251.251.251/uploads ./uploads -o username=samba_user,noexec

Файлы попадают в общий ресурс как -rw------- и остаются такими же после изменения имен.

Вот полный smb.conf файл: http://gist.github.com/172474 и результат выполнения smbstatus: http://gist.github.com/172478


Подробнее:

Если я вручную создаю файл из коробки, в которой смонтирован общий ресурс, я могу без проблем создавать, редактировать, удалять. Если я начну сеанс IRB (интерактивный рубин), я могу использовать Ruby для создания / удаления файлов без проблем. Похоже, само приложение создает файл со странными правами доступа. Хотя приложение и мой сеанс IRB работают от одного и того же пользователя, поэтому они должны иметь одинаковые разрешения для любых действий.

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 08 декабря 2009

В колонке R / W написано RDONLY, но в моей конфигурации я только для чтения = нет

Это не означает, что клиентам не разрешено открывать (file, "r"), то есть открывать файлы только для чтения, даже если им разрешено их записывать.

Похоже, Samba должен удерживать файлы, которые B удаляет, потому что у A все еще есть оплок. Срок действия блокировки истекает через некоторое время, после чего samba, вероятно, удалит переименованный файл.

Это очень похоже на то, что NFS делает для реализации семантики fd = открыть / создать временный файл удалить файл использовать временный файл (поскольку вы еще не закрыли его) закрыть fd

Вы получаете файлы .nfs ... в ваших каталогах.

0 голосов
/ 23 декабря 2009

В принципе, я думаю, что это проблема разрешений, файл конфигурации выглядит нормально. Вы пробовали просматривать журналы / var / log / samba / *?

О вашем файле smb.conf:

[global]
force create mode = 0644
force directory mode = 0744 

0744 не является обычным режимом для «принудительного режима каталога», возможно, опечаткой, обычно, если вы даете разрешения на чтение папкам, для которых тоже хотите указать флаг выполнения, используйте 755, 750 или 700. Эта опция все папки имеют как минимум те биты, которые установлены. "Принудительно создать режим" его хорошо.

[uploads]
create mask = 0655
directory mask = 755

Поскольку вы монтируете его с помощью noexec, я думаю, что правильное значение для вашей "маски создания" будет 666 или 644, а для "маски каталога" будет 755.

Я бы подключился к серверу ssh и запустил что-то вроде этого:

find /tmp/uploads -type f -print0 | xargs -0 chmod 644
find /tmp/uploads -type d -print0 | xargs -0 chmod 755
chown "$SMBUSER:$SMBUSER_GROUP" -r /tmp/uploads/
0 голосов
/ 22 августа 2009

У вас есть доступ к полной конфигурации для сервера samba? Я знаю, что обычная идиома состоит в том, чтобы настроить samba для выполнения чего-то другого, кроме удаления файла по команде с сервера для удаления, для реализации функциональности стиля «корзина / корзина» в сети. Переименование файлов в исходном каталоге немного необычно, но все же возможно.

...