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

Что все Вы имеете на машине? Если бы это был я, то я просто продвинул бы одно из своих вторичных устройств и восстановил бы с нуля. Я всегда пытаюсь найти время, чтобы обновлять мой, хотя, таким образом, Вы знаете, мелкая частица соли.

Или Вы могли обмануть, и сделать образ виртуальной машины из PDC и выполнить его от другой части аппаратных средств при фиксации старых аппаратных средств. Мне нравится делать это с большим количеством вещей.

Вы могли использовать Фантом, чтобы сделать изображение и затем восстановить изображение к новому набегу.

Заманчиво попытаться добавить другой диск и просто заставить Windows сделать вещь набега программного обеспечения. Проблема там состоит в том, что окна сохраняют один из дисков как загрузочный диск. Если ТОТ перестал работать, то необходимо перейти через несколько обручей для создания другого загрузочным. Совсем не столь же прохладный как аппаратный набег.

8
задан 26 March 2013 в 17:28
1 ответ

Я наконец решил проблему.

Я постараюсь написать этот ответ больше, когда у меня будет время.

Проблема связана с повторным совместным использованием файловой системы cifs и затем доступ к нему с компьютера под управлением Windows 7.

Ошибка самбы здесь: https://bugzilla.samba.org/show_bug.cgi?id=9346

Очевидно, это связано с тем, как информация устанавливается в индексный дескриптор в 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

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

Пожалуйста, задавайте любые вопросы или разъяснения, которые вам понадобятся, я, вероятно, узнаю из этого :)

Также спасибо kukks в #samba на freenode я многому научился там, хотя в итоге пошел в другом направлении.

7
ответ дан 2 December 2019 в 23:03

Теги

Похожие вопросы