Miranda NG Official Community Forum
Miranda NG русскоязычный форум => Общие разговоры о Miranda NG => Topic started by: Mur466 on 27 08 2018, 16:25:57
-
Сегодня ни с того, ни с сего посреди дня перестала загружаться Miranda NG. Утром работала. Потом обновления windows потребовали перезапуск. После него Miranda ругается на "профиль в неизвестном формате".
Стояла раньше стабильная версия 0.95.8.1
Поставил альфу 0.95.9 , не помогло
В папке профиля лежит сегодняшний crashlog, прилагаю
-
а на альфе что говорит? там нет этого DebugBreak
бэкап есть?
-
Свежего бекапа нет
В папке профиля лежит файл с тем же именем .dat.bak от 1 июня. Но он тоже не открывается. Пробовал его импортировать, но импорт просто падает (прекращена работа программы)
И как-то они не похожи друг на друга в hex-редакторе. Видимо разные форматы, или актуальный профиль совсем испорчен. См. вложения.
Пробовал открыть их оба с помощью содержимого папки "C:\Program Files\Miranda NG\Plugin Updates\Backups" , скопировав их поверх. Тоже не открывает.
-
При импорте через альфу, бекап от июня импортируется (ура, хоть что-то!). При импорте актуального профиля пишет "Ошибка загрузки исходного файла, выход"
При попытке войти через альфу в бекап, предлагает сконвертировать в новый формат и успешно это делает. При входе в актуальный профиль пишет "профиль в неизвестном формате".
-
Есть надежда восстановить актуальный профиль с историей сообщений?
Если да, могу его переслать
-
Есть надежда восстановить актуальный профиль с историей сообщений?
вероятность примерно процентов 20, что можно (например, когда побилась страница ключа, а не сама таблица).
проще переехать на альфу, на самом деле.
-
Свежего бекапа нет
@ghazan, нам бы добавить в стаблю автобекапер...
Сейчас он у нас только в ночнике, но ведь положить его в архив с ядром - пара пустяков.
-
Эм, дорогие разрабочики, может
лучше про реактор вернуть режим совместимости со старой базой? Я пользуюсь мирандой (в том числе NG), с, по крайней мере, 2002 года (да, спасибо, я знаю, что столько не живут 8) И всё работает, за это время не было ни одного краха базы (которая чудесно пережила обычную миранду, потом миранду unicode, потом miranda-ng 32, сейчас miranda-ng 64). Это уже очень не первое сообщение о крахе базы по тем или иным причинам. База - по сути единственное, что держит многих на miranda. Я, конечно, отчётливо понимал, что после переезда на новую базу будет ужас-ужас-ужас. Но может, правильнее откатиться назад, не?
-
Старый формат не предоставляет некоторых функций, требуемых облачным протоколам. Это будет тупик (то есть, Skype, Steam, Facebook и прочие протоколы никогда не смогут работать нормально, потому что им требуется идентификатор сообщений в базе, всегда будут дубли сообщений, потери и т.п., то, что и было на mmap, и от чего мы ушли). Прикрутить это к mmap нельзя.
Кроме того, драйвер базы в 0.95.9 стал существенно стабильнее. Все известные проблемы с базой касаются именно 0.95.8, которая уже в прошлом.
Ну и наконец: теперь у всех установлен автобекапер.
Сейчас кончатся последние страдальцы с повреждёнными базами (последняя волна: те, у кого база была повреждена, но кое-как работала и они этого не замечали, пока не прилетел автобекапер и не обнаружил, что база представляет собой ходячего мертвеца) и всё будет хорошо.
Делайте бекапы любой информации, которую вам жалко потерять. Это относится не только к Миранде. Пропадания питания, зависания операционной системы, умершие накопители - никто от этого не застрахован. Очень весело бывает обнаружить, что побился системный том Bitlocker, когда при зависании ОС не успела скинуть кэш на SSD.
-
А в новом формате можно сделать ту же неубиваемость, которая была в старом?
У меня база с 1998 года. Сегодня Миранда запорола базу в первый раз. Хорошо, ежедневный бэкап есть...
И почему база внезапно так раздулась? Недавно было 118М, а сейчас 332М!
"Сжать базу" убивает ее в ноль. Бекапилка не работает вообще.
Как проверить базу на ошибки и дупы? В этой версии это возможно вообще?
-
А в новом формате можно сделать ту же неубиваемость, которая была в старом?
Можно, но 10 с лишним лет, в течениме которых вылизывался старый драйвер, повторить за год невозможно. Впрочем, по сравнению с 0.95.8, в 0.95.9 ни у одного пользователя ещё не было проблем с базой.
"Сжать базу" убивает ее в ноль. Бекапилка не работает вообще.
С большой вероятностью база повреждена в 0.95.8 (хоть и открывается в Миранде, но внутри она не в порядке (это не касается истории и т.п, речь о структуре базы)), попробуйте создать чистую базу и импортировать туда всё со старой. Импорт автоматически предлагается при старте с чистым профилем. Если импорт упадёт (а, скорее всего, не упадёт), то, пожалуйста, на чистой базе сначала обновитесь до стабильной версии с символами, повторите падение и опубликуйте крашлог, потому что нормального крашлога единственный столкнувшийся с падением импорта пользователь не прислал :( У остальных пользователей всё импортируется без проблем.
Бекапер, как и сжатие, перетряхивает базу полностью, поэтому обнаруживает повреждение и отказывается работать.
Как проверить базу на ошибки и дупы? В этой версии это возможно вообще?
Нет, это невозможно, да и проверять там попросту нечего, к тому же, в следующей версии появятся идентификаторы у всех событий в базе, что сделает появление дупов невозможным. На текущий момент, все проблемы, с которыми сталкиваются пользователи - из-за 0.95.8. Это следствие того, что в прошлой стабле использовалась libmdbx 0.9, а в ней были кое-какие проблемы. В новой стабле используется libmdbx 1.0, которая намного "прочнее".
-
Короче, всё ясно, остаёмся на 0.95.7 на ближайший год (или на несколько, пока SkypeWeb старый работает), можно расходиться 8)
-
Бекапер, как и сжатие, перетряхивает базу полностью, поэтому обнаруживает повреждение и отказывается работать.
Если бы. Он, вместо того чтобы выдать ошибку с соотв. сообщением, просто убивает базу. В таких случаях надо всегда делать резервную копию, автоматом!
P.S. А почему файл базы стал нечитабельным? У меня из-за этого бекап работать перестал!
P.P.S. И вот еще такая идея. FF хранит почти всю важную инфу в .sqlite - может, стоит и вам перейти на этот формат?
Он достаточно вылизан, стандартен, его понимает куча прог и он у меня еще ни разу не убивался.
-
P.P.S. И вот еще такая идея. FF хранит почти всю важную инфу в .sqlite - может, стоит и вам перейти на этот формат?
Он достаточно вылизан, стандартен, его понимает куча прог и он у меня еще ни разу не убивался.
И невероятно медленный. Я на выходных набросал драйвер бд на sqlite на основе плагина dbrw из miranda im, тормозит он сильно. Если получится допиннать его до более-менее приемлемых результатов, то залью в мастер.
-
Он, вместо того чтобы выдать ошибку с соотв. сообщением, просто убивает базу.
Насчёт сообщения надо подумать.
А почему файл базы стал нечитабельным?
Потому что попытка дёрнуть базу из-под запущенной Миранды заведомо провальна. В libmdbx есть специальные функции, которые гарантируют, что при их вызове база будет готова для копирования.
Есть бекапер, он обучен правильно дёргать базу, он делает бекапы, бекапы можно копировать куда угодно и чем угодно.
-
sqlite
Это рассматривалось при выборе нового формата. Не вариант, очень медленно, профили с сотнями контактов просто встают колом. Одним из требований к новому формату было не ухудшить скорость работы на огромных профилях.
-
Спасибо за ответы. Будем посмотреть.
Сделал импорт как вы сказали.
При выборе в диалоге при импорте import.dll - все виснет и дохнет.
Если ничего не выбрать или выбрать CrashDumper.dll - все импортируется нормально. Это что?
Дупы все-таки есть, в ВК.
https://i.imgur.com/AeixgLq.png
https://i.imgur.com/HsHjRsI.png
Размер базы стал нормальный.
167M --> 311M --> 160M
При конверсии пишет, что удалил кучу дупов.
https://i.imgur.com/wIbFkxa.png
Кстати, ошибка GUI - нет скролла по горизонтали и не переносятся длинные строчки, также нельзя скопировать текст рапорта в clipboard и сохранить в файл.
Как устанавливать имя файла для бэкапа?
Допустим, меня
main.dat_2018.10.14@13-27-41_FORNIT-PC.zip
Не устраивает, я хочу, например, backup_001.zip?
-
При выборе в диалоге при импорте import.dll - все виснет и дохнет.
Если ничего не выбрать или выбрать CrashDump.dll - все импортируется нормально. Это что?
Выбор dll доступен только в сервисном режиме? Вы в сервисном режиме запускали импорт?
Достаточно куда-нибудь переместить всю папку профиля и запустить Миранду штатно. Не найдя профиль она предложит создать новый. После создания Миранда запускается с этим профилем (т.е, появляется окно списка контактов), тут всплывает импорт и предлагает импортировать. Сервисный режим и выбор dll не требуется.
Кстати, теперь есть ещё один способ (https://wiki.miranda-ng.org/index.php?title=Plugin:Dbx_mdbx/ru) восстановления повреждённых баз.
Как устанавливать имя файла для бэкапа?
Это пока не предусмотрено.
-
Я просто удалил файл профиля и запустил миранду. Она предлагает такой выбор.
https://i.imgur.com/EU2S1KD.png
И запускается Мастер Импортирования.
https://i.imgur.com/kSUSmo8.png
И жопа:
https://i.imgur.com/Coz6vfl.png
-
А, вот оно где. Там не должно быть выбрано ничего. Если что-то выбрано, то это запуск в сервисном режиме, который в этом случае не нужен.
-
Ну вот, когда я выбрал CrashDumper.dll или ничего, все потом нормально.
А зачем нужен этот диалог и почему при этом импорт виснет?
-
Он нужен для запуска Миранды в сервисном режиме. Для случаев, например, когда надо запустить только ядро и редактор базы (чтобы что-то поменять до загрузки плагинов), и всё, никакие другие плагины в сервисном режиме не будут загружены.
Возможно стоит этот диалог переделать, например, добавив галку вместо использования пустой строки.
Импорт виснет... а кто его знает. Погоняю его, спасибо, что напомнили.
-
А дупы сообщений в ВК?
-
Старая "повреждённая" база ещё сохранилась?
-
Если сохранилась и VK-контактов не очень много, тогда можно взять, скажем, текущую стабильную версию в отдельной папке, запустить её с "повреждённой" базой, установить плагин Msg_Export и экспортировать поконтактно историю VK-контактов в формат JSON.
Эти файлы легко открываются текстовым редактором и поиском какой-нибудь строки типа "ебусь с Мирандой" можно удостовериться, что дублей там нет.
Если их и правда нет, то дальше текущую стабильную версию запустить уже с "починенной" базой, которую вы получили и описали выше, и для каждого VK-контакта почистить историю и импортировать её из JSON-файла (ПКМ по контакту - Импорт (и галку "проверять дубликаты" поставить на всякий случай)).
Всё это лучше делать на стабильной версии 0.95.9.1, поскольку в девелоперской сейчас идёт внедрение идентификаторов сообщений и лучше держать мух и котлеты отдельно (в смысле, чтобы на существующую проблему с дубликатами не накладывались ещё возможные глюки девелоперской версии).
-
Либо сделать проще, выполнив в папке с последней стабильной версией
mdbx_dump.exe -n -a -f "1.tmp" "полный/путь/к/повреждённой/базе.dat"
mdbx_load.exe -n -f "1.tmp" "new.dat"
del 1.tmp
И заценить базу new.dat, если она устраивает (всё перенеслось и нет дублей VK) - то её и использовать. mdbx_dump пытается вытащить из повреждённой базы максимум возможного во временный файл, а mdbx_load из этого контента делает новую базу.
-
Кстати, теперь есть и драйвер базы dbx_sqlite, правда, экспериментальный и медленный. Стабильность-то придёт со временем, а вот скорость - нет. Но если кто-то хочет терпеть по 20 секунд, пока подгрузятся 100 тысяч событий истории... пожалуйста.
-
А куда Миранда копирует временный бэкап базы, перед тем как сохранить ее в zip?
-
В %TEMP%, вроде как.
Там появляется временный файл, который после упаковки тут же стирается.
Завёл тикеты по всем обнаруженным проблемам и хотелкам
https://github.com/miranda-ng/miranda-ng/issues/1620
https://github.com/miranda-ng/miranda-ng/issues/1621
https://github.com/miranda-ng/miranda-ng/issues/1622
https://github.com/miranda-ng/miranda-ng/issues/1623
https://github.com/miranda-ng/miranda-ng/issues/1624
-
Ага, вижу. Только они нифига не стерлись почему-то.
У меня вся переписка - почта, база аськи и т.д. - хранится на шифрованном диске, а тут такая дыра в безопасности. >:(
-
Ну, хоть что-то у нас в безопасности (с)
Можно попробовать зашифровать базу (я, правда, не знаю, в каком она там виде скидывается во временный файл)
Хотя, есть мнение, что для mdbx нужно переделывать процедуру шифрования (повторное спасибо за то, что этот топик заставил меня вспомнить про этот комментарий, иначе бы я про него никогда не вспомнил)
https://github.com/miranda-ng/miranda-ng/issues/1230#issuecomment-381980042
с другой стороны, я совершенно не хочу видеть в Миранде ещё и затирание свободного места на диске (вероятно, это должно отдаваться на откуп пользователю)
-
Ага, при бэкапе временный файл трется, а те файлы, которые я только что удалил, были видимо результаты сбойных конверсий.
А можно сделать так, чтобы Миранда делала этот файл не в %TEMP%, а в том каталоге, куда она складывает бэкапы?
И можно сделать так, чтобы бэкап делался ежедневно в определенное время?
-
Пока нет.
Единственный вариант сделать так, чтобы в %TEMP% ничего не лезло - отключить сжатие в zip
И можно сделать так, чтобы бэкап делался ежедневно в определенное время?
В качестве костыля можно добавить в планировщик перезапуск Миранды в нужное время и включить авторезервирование при запуске.
-
Эх... Надеюсь что бэкапер доделают.
-
Сделали поддержку переменных в бекапере. Доступны все общепринятые переменные (предоставляемые ядром) + две специфические.
-
Импорт обзавёлся возможностью изменения размера окна (чтобы строки не обрезались), копирования текста из лога и отдельной галкой для запуска сервисного режима.
-
Здравствуйте. Вчера Миранда внезапно отказалась загружать профиль. Ошибок не выдаёт, но профиль видит как совершенно пустой - ни истории, ни контактов, ни настроек. Пробовал загрузить два автобэкапа за день и за два - результат тот же, оба испорчены :( Пытался создать пустой профиль и импортировать туда хоть что-то из этих испорченных баз - на двух ничего внутри не видит, на одном выдаёт "Error loading source file, exiting." Инструменты для восстановления mdbx_dump и mdbx_load тоже не помогли - на одном "восстанавливает" практически пустую базу (180 кб вместо 110 Мб) без контактов, на двух других выдаёт ошибку. Уважаемые разработчики, подскажите - можно с этими файлами хоть что-то сделать, хотя бы частично восстановить? История сообщений за много лет, более ранних бэкапов нет... Версия на момент ошибки была 0.95.10 alpha build #20729, пробовал обновить до build #20879 - результат нулевой.
-
Бэкапер создает архив main.dat_2018.11.04@17-24-12_FORNIT-PC.zip
Но внутри него файл main.dat имеет время и дату 05/11/18 01:24
Что за фигня?
-
Fornit, zip запоминает UTC, к нему надо таймзону добавить
-
Leshiy, можно выложить эти автобэкапы куда-то, ссылку мне мылом на ghazan собака miranda точка im
-
Fornit, zip запоминает UTC, к нему надо таймзону добавить
И как это сделать практически? У меня распаковывает с кривым временем.
Бэкапилка глючит! У меня в AutoBackups 12 архивов с бэкапами базы, делает каждый день. Все бэкапы 161М (в распакованном виде), а вчерашний - 128М.
-
Fornit,
И как это сделать практически? У меня распаковывает с кривым временем.
юзать какой-нибудь архиватор с поддержкой UTC? у меня вроде в фар правильно время показывает.
Все бэкапы 161М (в распакованном виде), а вчерашний - 128М.
если есть подозрение на битость, можно засунуть это в fixme.bat и посмотреть, что будет с размером
-
WinRAR 5.50 - поддерживает UTC и сам хранит в нем.
Видит и соответственно распаковывает кривое время.
-
В качестве костыля можно добавить в планировщик перезапуск Миранды в нужное время и включить авторезервирование при запуске.
Все гораздо проще. Достаточно один раз запустить Миранду в нужное время - и она сама будет делать ежедневный бекап в это время.
Конечно, включить авто резервирование при запуске.
P.S. Вместо перезапуска Миранды просто ткнул кнопку "Сохранить СЕЙЧАС". Посмотрим, сработает ли.
Однако, стоит сделать бэкап в указанное пользователем время. Если раз в день.
Если раз в неделю - в указанный день недели и время. Если раз в месяц - в указанный день месяца и время...
Ну вы понимаете...
P.S. Сработало. То есть использование этой фичи обнуляет таймер.
-
WinRAR 5.50 - поддерживает UTC и сам хранит в нем.
Видит и соответственно распаковывает кривое время.
Попробуйте на последнем ночнике — https://github.com/miranda-ng/miranda-ng/commit/0859890fad590ab9be7ec10e594fe17927a7b3f8
-
А как бинарник найти?
-
Рекомендуется обновляться через PluginUpdater (https://wiki.miranda-ng.org/Plugin:PluginUpdater/ru) (всю Миранду), потому что каждый билд плагинов гарантированно совместим лишь с ядром от того же билда.
Подсовывание нового бинарника плагина к более старому ядру совершенно не тестируется и, строго говоря, в ряде случаев плагин вообще может не заработать.
-
OK, сделаем, спасибо.
Вроде работает как надо! Время файла внутри архива совпадает с временем архива.
P.S. А что за main.dat-lck появился?
-
А что за main.dat-lck появился?
Это файл «блокировки» базы, побочное от библиотеки которая используется как основа драйвера базы. Его можно удалять, но при каждом запуске он будет появляться.
-
Его нельзя удалить, он даже не читается.
Кстати, файл main.dat раздуло с 163 577 856 до 313 524 224. За несколько часов. WTF???
-
При выключенной Миранде удалить, разумеется.
-
Fornit,
обычно это результат экспериментов с шифрацией базы. лечится прогоном через fixme.bat (также при выключенной миранде)
-
Его нельзя удалить, он даже не читается.
Странно, при выключенной миранде у меня всё удаляется без проблем, если у вас не так возможно стоить проверить раздел chkdsk?
-
Не, с томом все в порядке, это Миранда держит. ;D
И я ничего с базой не делал, никакой шифрации не устраивал, она итак находится на зашифрованном томе TrueCrypt.
P.S. Но в бекапе она все равно 163 577 856 bytes.
-
Джентельмены, боюсь, что я вам ничего нового не скажу, конечно, но на каких движках баз работают другие мультипротольные десктопные менеджеры? pidgin? Adium? А библиотека от Гугла https://github.com/google/leveldb (https://github.com/google/leveldb) чем-то плоха? Потом, я подозреваю, что гуглить вы все умеете уж всяко не хуже меня, и этот список https://bigdata-madesimple.com/a-deep-dive-into-nosql-a-complete-list-of-nosql-databases/ (https://bigdata-madesimple.com/a-deep-dive-into-nosql-a-complete-list-of-nosql-databases/) тоже видели? Я так понимаю, миранде нужен раздел "Key Value / Tuple Store databases". Может, взять готовое оперсорсное решение от крупной конторы типа Google/Amazon или совсем открытое типа BDB от Berkley? Или потом дьявол в деталях реализации? Очень хочется, конечно, иметь внешние проверенные инструменты починки базы.
-
lokapal,
некоторые вообще на текстовых файлах работают, это не показатель :-)
список видели. к сожалению, из-за некоторых особенностей апи миранды требуется очень быстрая база, иначе всё умирает нахрен, ну т.е. доступ становится совсем медленным. пока ничего, кроме libmdbx, близко по скорости к старому драйверу не лежало, как минимум втрое медленнее
-
Fornit,
обычно это результат экспериментов с шифрацией базы. лечится прогоном через fixme.bat (также при выключенной миранде)
Не работает. Выдает кучу ошибок.
S:\Miranda NG>fixme.cmd
Using profile directory
Backing up ...
mdbx_env_open failed, error 53 The network path was not found.
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
Operation succeeded
И одно всплывающее окошко с ошибкой 0xc000007b.
(https://i.imgur.com/Y5Yf37h.png)
P.S. Попытался лечить убитый профиль импортом. Нифига - пустой профиль!
P.P.S. pu_stub.exe - что это и зачем?
-
lokapal,
некоторые вообще на текстовых файлах работают, это не показатель :-)
список видели. к сожалению, из-за некоторых особенностей апи миранды требуется очень быстрая база, иначе всё умирает нахрен, ну т.е. доступ становится совсем медленным. пока ничего, кроме libmdbx, близко по скорости к старому драйверу не лежало, как минимум втрое медленнее
А старый и новый драйвера по скорости одинаковы?
-
У нас есть sqlite driver для нелюбителей mdbx. Но он пока очень экспериментальный и, возможно, таким и останется.
-
Я заметил в меню импорта - предлагали два драйвера, один SQLite. Надо было попробовать, наверное.
-
P.P.S. pu_stub.exe - что это и зачем?
Для повышения привилегий UAC если допустим миранда установлена в Program Files, а ей нужно обновиться.
Надо было попробовать, наверное
Пробуйте, но имейте ввиду, что у меня миранда очень часто с этим драйвером падала, плюс при выходе процесс миранды остаётся висеть в памяти, после чего новый инстанс миранды ругается на недоступность профиля.
Плюс импорт не сможет из SQLite обратно импортировать сообщения.
-
А как работать с fixme.cmd, кто-нибудь подскажет?
-
Создать рядом с ним папку Profiles, в которую положить папку профиля (внутри которой лежит .dat)
-
У меня все так - не работает, я уже писал выше.
-
А если вручную?
mdbx_dump.exe -n -a -f "%TEMP%\corrupted.tmp" "путь\к\повреждённому.dat"
mdbx_load.exe -n -f "%TEMP%\corrupted.tmp" "путь\куда\сохранить\исправленный.dat"
командный файл делает то же самое, так что, если какая-то из утилит обламывается, он не виноват.
-
mdbx_load.exe тут же вылетает с ошибкой, я выше написал.
Причем с такой ошибкой, кроме этой, вылетает только одна прога - игра Frostpunk.
P.S.
Попробовал
mdbx_dump.exe -n -a -f "%TEMP%\corrupted.tmp" "путь\к\повреждённому.dat"
Получается фигня.
Исходный файл Main_bad.dat 304 336 896 b
Получился corrupted.tmp 134 587 b