Назад | Перейти на главную страницу

Каталоги отображаются как файлы при совместном использовании смонтированного диска cifs

У меня проблема, когда каталог отображается как файл при доступе к общему ресурсу 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 я многому научился там, хотя в конечном итоге я двинулся в другом направлении.