Я размещаю простой веб-сервер Apache на Raspberry Pi, работающем под управлением Debian, который до сих пор обслуживает только статический контент из каталога по умолчанию /var/www/ .

Я хотел поделиться папкой /var/www/ через Samba, чтобы я мог легко смонтировать папку с компьютера с Windows и быстро обновлять ее прямо на сервере.

С компьютера Windows (через общий ресурс Samba) я могу ...

  • Чтение файлов любого типа
  • Переименование, создание или удаление файлов любого типа
  • Изменить содержимое большинства типов файлов

Однако я не могу изменить файлы .html и .htm (возможно, и другие типы файлов) из Windows и получаю следующее сообщение об ошибке при попытке сохранить модификацию:

Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Это происходит независимо от того, какой редактор я использую в Windows (например, Блокнот, Visual Studio и т.д.).

В Windows это дает мне интересную возможность переименовать уязвимый файл (например, изменить его с *.htm на *.htm.edit), изменить содержимое, а затем изменить имя обратно. Но я не могу редактировать его без переименования.

Я все еще могу изменить все файлы прекрасно из Unix.

Права доступа пользователя и файла идентичны для всех затронутых и незатронутых файлов: -rwxrw-rw-

Обратите внимание, что другой статический веб-контент, обслуживаемый сервером Apache (например, файлы CSS), по-прежнему можно редактировать через Samba из клиента Windows.

Поскольку он кажется ограниченным файлами, относящимися к HTML (до сих пор), я наивно полагаю, что это некоторый конфликт между Samba и Apache, возможно, связанный с блокировкой файлов. Я попытался отключить OpLocks для этого общего ресурса Samba (я не слишком знаком с ними, но я слышал, что они могут привести к некоторым проблемам блокировки), но безуспешно.

Ниже приведен фрагмент файла конфигурации Samba (smb.conf), относящийся к этому общему ресурсу Samba:

[www]
Comment = WWW root folder
Path = /var/www
Browseable = yes
Writeable = Yes
only guest = no
create mask = 0777
directory mask = 0777
Public = yes
valid users = pi
force user = pi
strict locking = no
oplocks = False
level2 oplocks = False

Мне просто нужна возможность редактировать файлы .html из клиента Windows с помощью общего ресурса Samba. Буду признателен за любой совет, как я мог бы решить проблему или решить эту проблему.

1 ответ1

1

Моя проблема была на самом деле конфликт блокировки в Windows, который, кажется, проявляется только на общей папке Samba.

Я обнаружил, что для некоторых файлов (включая файлы HTML)обработчик предварительного просмотра, используемый на панели предварительного просмотра Проводника Windows, получает блокировку файла Samba DENY_WRITE , поэтому выбор файла в Проводнике Windows блокирует его редактирование.

Это меня удивляет: для файла HTML на локальном компьютере с Windows блокировка файла, полученная обработчиком предварительного просмотра, не мешает другим процессам писать его; но когда файл находится на общем ресурсе Samba, по какой-то причине блокировка файла Windows преобразуется в блокировку DENY_WRITE в Samba, поэтому, когда второй процесс с компьютера Windows (текстовый редактор) пытается изменить файл, он учитывает блокировку Samba и естественно терпит неудачу.

Лично мне не нужны обработчики предварительного просмотра в Windows, поэтому я просто отключил их (Параметры папки >> Вкладка «Просмотр» >> Снимите флажок «Показать обработчики предварительного просмотра в области предварительного просмотра»). Это скорее обходной путь; в идеале, блокировка файла обработчика предварительного просмотра не должна переводиться в блокировку DENY_WRITE в Samba.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .