The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]



"Ошибка базы pkg в FreeBSD 11.2"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Системное и пользовательское ПО / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от Allan Stark (ok), 04-Июл-18, 22:08 
Здравствуйте

Изначально веб-сервер (apache24 + mysql + php) под FreeBSD 11.1-RELEASE, ядро GENERIC, виртуальная машина (под Hyper-V), внутри вертится десяток сайтов-сервисов.
Месяц назад было заполнение дисковой c повисанием mysql, вследствие чего сервер был остановлен на расширение дискового пространства и раздела ufs.
Расширение прошло успешно, раздел ufs и mysql базы проверены на целостность, визуально ничего не пострадало, все веб-сервисы отработали месяц.

gpart show:
=> 40 266338224 da0 GPT (127G)
40 409600 1 efi (200M)
409640 257540088 2 freebsd-ufs (123G)
257949728 8388535 3 freebsd-swap (4.0G)
266338263 1 - free - (512B)

Разработчики попросили обновить ряд пакетов - решил заодно перейти на FreeBSD 11.2-RELEASE.
После успешного перевода на 11.2 перед обновлением пакетов прогнал pkg info и получил ошибку БД pkg:

pkg info:
ImageMagick-nox11-6.9.9.28,1 Image processing tools (legacy version)
apache24-2.4.33 Version 2.4.x of Apache web server
apr-1.6.3.1.6.1_1 Apache Portability Library
avahi-app-0.6.31_6 Service discovery on a local network
pkg: sqlite error while executing iterator in file pkgdb_iterator.c:1035: database disk image is malformed

Попробовал откатить БД sqlite с последней копии в /var/backups - после восстановления БД получил тот же результат.
Самая старая копия стандартной недельной давности, с аналогичным результатом.
local.sqlite визуально целый, простейшие запросы вручную в нем видят все установленные пакеты.
repo-FreeBSD.sqlite целый, pkg search прекрасно находит в нем произвольные пакеты
Подозреваю, что каким-то образом local.sqlite запоролась при исчерпании свободного места на разделе.

На всякий случай есть бекап всех рабочих конфигов системы и софта вместе с дампом вывода pkg info (есть такая привычка его делать каждый раз при обновлении/установке пакетов).

В теории конечно можно переставить все пакеты (159 шт.) с перезаливкой конфигов и БД, но по времени наверно уже проще будет сформировать эту виртуалку заново.

Вопрос. Существуют ли инструменты автоматического поиска установленных пакетов либо ремонта БД pkg?
Из известных Гуглю подобных проблем все датируется седыми годами и в основном связано с проблемами перехода на pkg/pkg2ng.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от .. (?), 05-Июл-18, 01:56 
https://gist.github.com/sarim/6460936


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от Александр (??), 05-Июл-18, 11:26 
> https://gist.github.com/sarim/6460936

Спасибо за скрипт.
Аналогичная проблема иногда возникает на raspberry, возможно, из-за размера /tmp:

# df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
....
tmpfs              50M    4,0K     50M     0%    /tmp

Благодаря скрипту выяснил, что проблема в repo-FreeBSD.sqlite, а это лечится:
rm /var/db/pkg/repo-*.sqlite
pkg update

В случае повреждения local.sqlite, ранее, пришлось действительно удалять БД и переставлять пакеты, благо "ручных" немного, а остальные подтянулись по зависимостям.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от Allan Stark (ok), 05-Июл-18, 20:19 
> https://gist.github.com/sarim/6460936

Благодарю за скрипт, но я делал то же самое руками напрямую через sqlite3
БД не проходит integrity_check и просто так из дампа не восстанавливается:

# sqlite3 /var/db/pkg/local.sqlite "PRAGMA integrity_check":

*** in database main ***
Page 1812: btreeInitPage() returns error code 11
Page 1811: btreeInitPage() returns error code 11
Page 1810: btreeInitPage() returns error code 11
Page 1809: btreeInitPage() returns error code 11
Page 1834: btreeInitPage() returns error code 11
Page 1803: btreeInitPage() returns error code 11
Page 1818: btreeInitPage() returns error code 11
Page 1817: btreeInitPage() returns error code 11
Page 1815: btreeInitPage() returns error code 11
Page 1790: btreeInitPage() returns error code 11
Page 1805: btreeInitPage() returns error code 11
On tree page 1166 cell 1: 2 of 3 pages missing from overflow list starting at 1785
Page 1836: btreeInitPage() returns error code 11
Page 1835: btreeInitPage() returns error code 11
Page 1832: btreeInitPage() returns error code 11
Page 1830: btreeInitPage() returns error code 11
Page 1829: btreeInitPage() returns error code 11
Page 1827: btreeInitPage() returns error code 11
Page 1791: btreeInitPage() returns error code 11
Page 1824: btreeInitPage() returns error code 11
Page 1823: btreeInitPage() returns error code 11
Page 1821: btreeInitPage() returns error code 11
Page 1819: btreeInitPage() returns error code 11
Page 1814: btreeInitPage() returns error code 11
Page 1808: btreeInitPage() returns error code 11
Page 1807: btreeInitPage() returns error code 11
Page 1806: btreeInitPage() returns error code 11
Page 1802: btreeInitPage() returns error code 11
Page 1801: btreeInitPage() returns error code 11
Page 1800: btreeInitPage() returns error code 11
Page 1799: btreeInitPage() returns error code 11
Page 1797: btreeInitPage() returns error code 11
Page 1796: btreeInitPage() returns error code 11
Page 1795: btreeInitPage() returns error code 11
Page 1793: btreeInitPage() returns error code 11
Page 1831: btreeInitPage() returns error code 11
Page 1825: btreeInitPage() returns error code 11
Page 1820: btreeInitPage() returns error code 11
Page 1813: btreeInitPage() returns error code 11
Page 1792: btreeInitPage() returns error code 11
Page 1833: btreeInitPage() returns error code 11
Page 1822: btreeInitPage() returns error code 11
Page 1837: btreeInitPage() returns error code 11
Page 1828: btreeInitPage() returns error code 11
Page 1794: btreeInitPage() returns error code 11
Page 1798: btreeInitPage() returns error code 11
Page 1826: btreeInitPage() returns error code 11
Page 1786 is never used
Page 1787 is never used
Page 1788 is never used
Page 1789 is never used
Error: database disk image is malformed

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от Sot (?), 06-Июл-18, 12:12 
> Page 1794: btreeInitPage() returns error code 11

Суда по ошибкам, я бы предположил проблемы с индексами в БД. Попробуйте сделать REINDEX

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Ошибка базы pkg в FreeBSD 11.2"  +/
Сообщение от Allan Stark (ok), 07-Июл-18, 21:20 
>> Page 1794: btreeInitPage() returns error code 11
> Суда по ошибкам, я бы предположил проблемы с индексами в БД. Попробуйте
> сделать REINDEX

Пробовал, выдало Error: database disk image is malformed
Судя по всему запоролись несколько больших таблиц, например, packages.
Принял решение переставить виртуалку на этих выходных.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


  Закладки на сайте
  Проследить за страницей
Created 1996-2018 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor