ownCloud пропали расшаренные ресурсы или как избежать проблем

После переноса ownCloud 9.0.0 на новый сервер, с сохранением всех файлов и базы, некоторые пользователи стали жаловаться на пропадание некоторых расшаренных ресурсов.

Быстрый поиск в google подсказал верное решение — очистить (truncate) таблицу oc_filecache. После очистки понаблюдал за поведением таблицы — записи о файлах стали потихоньку появляться, вроде всё открывалось. Но это ещё не было концом проблемы.

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

{«reqId»:»WRR6-KX8VcKjgjfchtrrTs7AANNAA»,»remoteAddr»:»85.85.85.14″,»app»:»webdav»,»message»:»Exception: {\»Message\»:\»File with id \\\»8471\\\» has not been found.\»,\»Exception\»:\»OCP\\\\Files\\\\NotFoundException\»,\»Code\»:0,\»Trace\»:\»#0 \\\/home\\\/www\\\/drive\\\/html\\\/apps\\\/files_sharing\\\/lib\\\/sharedstorage.php(82): OC\\\\Files\\\\View->getPath(8471)\\n#1 \\\/home\\\/www\\\/drive\\\/html\\\/apps\\\/files_sharing\\\/lib\\\/sharedstorage.php(570): OC\\\\Files\\\\Storage\\\\Shared->init()\\n#2 \\\/home\\\/www\\\/drive\\\/html\\\/lib\\\/private\\\/files\\\/storage\\\/wrapper\\\/wrapper.php(381): OC\\\\Files\\\\Storage\\\\Shared->getCache(», Object(OCA\\\\Files_Trashbin\\\\Storage))\\n#3 \\\/home\\\/www\\\/drive\\\/html\\\/lib\\\/private\\\/files\\\/view.php(1302): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->getCache(»)\\n#4 \\\/home\\\/www\\\/drive\\\/html\\\/apps\\\/dav\\\/lib\\\/connector\\\/sabre\\\/serverfactory.php(124): OC\\\\Files\\\\View->getFileInfo(»)\\n#5 [internal function]: OCA\\\\DAV\\\\Connector\\\\Sabre\\\\ServerFactory->OCA\\\\DAV\\\\Connector\\\\Sabre\\\\{closure}(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#6 \\\/home\\\/www\\\/drive\\\/html\\\/3rdparty\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Object(Closure), Array)\\n#7 \\\/home\\\/www\\\/drive\\\/html\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(446): Sabre\\\\Event\\\\EventEmitter->emit(‘beforeMethod’, Array)\\n#8 \\\/home\\\/www\\\/drive\\\/html\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(248): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#9 \\\/home\\\/www\\\/drive\\\/html\\\/apps\\\/dav\\\/appinfo\\\/v1\\\/webdav.php(55): Sabre\\\\DAV\\\\Server->exec()\\n#10 \\\/home\\\/www\\\/drive\\\/html\\\/remote.php(138): require_once(‘\\\/home\\\/www\\\/drive…’)\\n#11 {main}\»,\»File\»:\»\\\/home\\\/www\\\/drive\\\/html\\\/lib\\\/private\\\/files\\\/view.php\»,\»Line\»:1639,\»User\»:\»s_kuropatkin\»}»,»level»:4,»time»:»2017-04-29T11:33:16+00:00″}

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

Правильным способом перестроения кеша для добавления недостающих файлов является выполнение команды

sudo -u drive ./occ files:scan —all

В данном случае drive — имя пользователя, под которым запущен ownCloud. Команда запускается из корневой папки установки ownCloud, т.е. той, где лежит скрипт с именем occ. Именно эта команда должна была решить изначальную проблему с недостающими у пользователя расшаренными папками, однако у меня уже была почищена соответствующая таблица и при перестроении файлового кеша ownCloud выдал тем же файлам другие идентификаторы, и говоря об ошибке, приведённой выше, файл с id 8471 был уже совсем не тем файлом (точнее, папкой) которая была расшарена пользователем.

Решением в моей ситуации был откат таблицы из бекапа на состояние до очистки и последующее обновление кеша предложенной выше командой. Теперь у всех всё работает и открывается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *