У меня проблема, когда каталог отображается как файл при доступе к общему ресурсу samba (в Ubuntu 12.10) с компьютера Windows.
Вывод команды ls -ll в папке на linuxbox выглядит следующим образом:
chubby@chubby:/media/blackhole/_Arkiv$ ls -ll
total 0
drwxrwxrwx 0 jv users 0 Jun 18 2012 _20
drwxrwxrwx 0 jv users 0 Apr 17 2012 _2006
drwxrwxrwx 0 jv users 0 Apr 17 2012 _2007
drwxrwxrwx 0 jv users 0 May 12 2011 _2008
drwxrwxrwx 0 jv users 0 Feb 19 09:53 _2009
drwxrwxrwx 0 jv users 0 Dec 20 2011 _2010
drwxrwxrwx 0 jv users 0 May 8 2012 _2011
drwxrwxrwx 0 jv users 0 Mar 5 11:37 _2012
drwxrwxrwx 0 jv users 0 Feb 28 10:09 _2013
drwxrwxrwx 0 jv users 0 Feb 28 11:18 _Mailarkiv
drwxrwxrwx 0 jv users 0 Jan 3 2011 _Praktikanter
Запись в / etc / fstab:
# Mounting blackhole
//192.168.0.50/kunder/ /media/blackhole cifs uid=jv,gid=users,credentials=/home/chubby/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
Когда я получаю доступ к общему ресурсу непосредственно с NAS на моем компьютере с Windows, проблем нет.
Версия Samba - 3.6.6, но в журналах изменений я не нашел ничего подходящего.
Я пробовал монтировать его в разных местах с разными разрешениями, пользователями и группами, но не добился никакого прогресса.
Из-за моей низкой репутации при сбое сервера (в основном это пользователь stackoverflow) я не могу опубликовать снимок экрана, который показывает, что каталоги отображаются как файлы.
Если я введу полный путь в проводнике, список каталогов будет работать отлично, за исключением любых подкаталогов, которые затем отображаются как файлы.
Мы будем очень признательны за любой вектор атаки по этой проблеме.
Пожалуйста, дайте мне знать, если я предоставил недостаточно информации.
Изменить: тот же общий ресурс при доступе из OS X отлично работает, перечисляя каталоги как каталоги. Наилучшие пожелания!
Я наконец решил проблему.
Я постараюсь написать этот ответ поподробнее, когда у меня будет время.
Проблема связана с повторным совместным использованием файловой системы cifs и последующим доступом к ней с компьютера Windows7.
Ошибка самбы здесь: https://bugzilla.samba.org/show_bug.cgi?id=9346
Очевидно, это связано с тем, как информация размещается на inode в cifs.
Смотрите здесь ошибку: https://bugzilla.kernel.org/show_bug.cgi?id=52791
Таким образом, Samba определяет (для своих клиентов Windows) путем подсчета количества жестких ссылок, а не тестирования атрибута. Поскольку cifs (по какой-то непонятной причине) всегда устанавливает это значение в ноль, а в каталоге всегда будет не менее двух, каталог будет отображаться как файл для клиентов Windows.
Итак, чтобы "исправить" это, я установил свои текущие заголовки ядра и исходный код linux:
sudo apt-get install linux-headers-$(uname -r) linux-source
Затем я пошел в /usr/src/linux-source-3.5.0
и распаковал архив туда.
Поиск папки /usr/src/linux-source-3.5.0/linux-source-3.5.0/fs/cifs
Я меняю в файле следующее inode.c
(строка 135):
set_nlink(inode, fattr->cf_nlink);
кому:
if(fattr->cf_cifsattrs & ATTR_DIRECTORY)
set_nlink(inode, 2);
else
set_nlink(inode, fattr->cf_nlink);
Затем я создал make-файл, чтобы упростить компиляцию (и избежать раздражающих ошибок insmod): Makefile2
:
obm-m := cifs.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Это позволяет нам делать (в той же папке): sudo make -f Makefile2
Это дает нам файл с именем cifs.ko
.
Итак, теперь мы можем остановить Samba, размонтировать все имеющиеся у нас общие ресурсы, удалить текущие файлы cif и установить наш перекомпилированный.
sudo service smbd stop
sudo umount /path/to/share
sudo rmmod cifs
sudo insmod cifs.ko
sudo mount -a
sudo service smbd start
Для меня это сработало, если вы перезапустите компьютер, это изменение не сохранится. Я добавлю к этому сообщению, когда найду хороший способ сделать это.
Пожалуйста, задавайте любые вопросы или разъяснения, которые вам нужны, я, наверное, научусь :)
Также благодаря куккам в #samba на freenode я многому научился там, хотя в конечном итоге я двинулся в другом направлении.