На всякий случай уточню, что дальше делать со скопированным кодом. Если в открытом Total Commander'е щёлкнуть правой кнопкой на свободном месте панели инструментов (где находятся все кнопки), то появится меню с пунктом "Вставить". Выбираем его, и скопированный код вставляется куда надо, а на панели появляется кнопка с названием Построить базу *.sbd на основе файла *.bad под курсором. Коей и пользуемся в дальнейшем. Кстати, поправить путь к папке с утилитами можно и после создания кнопки, если в упомянутом выше меню выбрать пункт "Изменить".T_Im писал(а):скопировать следующий код (поправить в 2-х местах путь к папке sdb_util на свой)
Восстановление убитого кэша Беркли (BerkeleyDB)
Модератор: Tolik
- Papazol
- Гуру
- Сообщения: 2069
- Зарегистрирован: 04 дек 2009, 01:39
- Откуда: Рязань
- Благодарил (а): 73 раза
- Поблагодарили: 647 раз
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
- Papazol
- Гуру
- Сообщения: 2069
- Зарегистрирован: 04 дек 2009, 01:39
- Откуда: Рязань
- Благодарил (а): 73 раза
- Поблагодарили: 647 раз
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Вот и до меня добрался большой крэш базы данных Беркли. Верификация выявляет повреждение двух файлов (один около 2 ГБ, другой - около 1 ГБ) и переименовывает их в *.bad. Попытки восстановления не привели к успеху. При дампинге файлов возникает какая-то ошибка, и дампы не создаются.
Утилита пишет:
Лог верификации:
Утилита пишет:
- скрытый текст: показать
Лог верификации:
- скрытый текст: показать
-
T_Im
- Постигающий Дао
- Сообщения: 112
- Зарегистрирован: 04 янв 2009, 21:52
- Благодарил (а): 14 раз
- Поблагодарили: 23 раза
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
При дампинге файлов возникает какая-то ошибка, и дампы не создаются.
правильно, если база сильно побита, нужны ключи -R / -r (в дополнительных параметрах), но, перечитайте внимательно мои предыдущие сообщения: во первых sdb util не умеет восстанавливать базу с этими ключами, а во вторых, вы сильно рискуете необратимо потерять данные, восстанавливая кеш "Restore broken files from *.bad" с помощью sdb util!>> db_dump -f
Сделайте так:
распакуйте этот архив (тут есть моя утилита и правильные версии файлов db_*, в версии из шапки есть проблемы с -R ключем)
http://rgho.st/6Nxng4CFb
к себе в папку с файлом 158.80.sdbv.bad
и выполните в этой папке команду
Код: Выделить всё
db_dump -R 158.80.sdb.bad | db_cleaner | db_load 158.80.sdb- Papazol
- Гуру
- Сообщения: 2069
- Зарегистрирован: 04 дек 2009, 01:39
- Откуда: Рязань
- Благодарил (а): 73 раза
- Поблагодарили: 647 раз
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Похоже, восстановить данные невозможно. Всё я сделал так, как написано, но в результате появились файлы размером 4096 байт, это явно не то, что нужно. Жаль.
-
T_Im
- Постигающий Дао
- Сообщения: 112
- Зарегистрирован: 04 янв 2009, 21:52
- Благодарил (а): 14 раз
- Поблагодарили: 23 раза
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Могу глянуть, если вы выложите первые метров 20-80 базы куда нибудь на обменник.
Как то не верится, что так мало вытянуло... (у меня так было только если база пересекалась с "чужим" файлом или забивалась нулями - т.е. когда там действительно уже не было информации)
Как то не верится, что так мало вытянуло... (у меня так было только если база пересекалась с "чужим" файлом или забивалась нулями - т.е. когда там действительно уже не было информации)
-
T_Im
- Постигающий Дао
- Сообщения: 112
- Зарегистрирован: 04 янв 2009, 21:52
- Благодарил (а): 14 раз
- Поблагодарили: 23 раза
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Да отрезать первые 20-80 метров (от начала bad файла, в хекс редакторе или Total коммандером, ...)
этого скорее всего будет достаточно, чтобы увидеть, есть ли там живые тайлы.
этого скорее всего будет достаточно, чтобы увидеть, есть ли там живые тайлы.
-
T_Im
- Постигающий Дао
- Сообщения: 112
- Зарегистрирован: 04 янв 2009, 21:52
- Благодарил (а): 14 раз
- Поблагодарили: 23 раза
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Ваша база отличается от моих. Вероятно, это версионная база, а я работал с неверсионными.
В версионной базе ключи и смещения тайлов другие.
Поправил фильтр, чтобы работал и для версионных баз (просьба всем перекачать db_cleaner на версию из этого сообщения), теперь должно работать
PS: что то не могу отредактировать свое старое сообщение со ссылками., чтобы обновить файлы и там.
В версионной базе ключи и смещения тайлов другие.
Поправил фильтр, чтобы работал и для версионных баз (просьба всем перекачать db_cleaner на версию из этого сообщения), теперь должно работать
PS: что то не могу отредактировать свое старое сообщение со ссылками., чтобы обновить файлы и там.
- Вложения
-
- db_cleaner.7z
- 3-я обновленная версия, должна работать как с обычными, так и с версионными данными
- (426.7 КБ) 308 скачиваний
-
- db_cleaner_source.7z
- исходник
- (1.23 КБ) 271 скачивание
Последний раз редактировалось T_Im 09 дек 2016, 00:29, всего редактировалось 1 раз.
- Papazol
- Гуру
- Сообщения: 2069
- Зарегистрирован: 04 дек 2009, 01:39
- Откуда: Рязань
- Благодарил (а): 73 раза
- Поблагодарили: 647 раз
Re: Восстановление убитого кэша Беркли (BerkeleyDB)
Итак, применил я все указанные средства к своим битым файлам. В результате получил небитые файлы. Верификацию они проходят без ошибок. Программа их принимает нормально. То есть средства работают. За это большое спасибо!
Однако есть кое-какие непонятки.
1. Файлы немаленькие, то есть должны содержать приличное количество тайлов разных версий. Поскольку эти файлы лежат в папке ...\z17\..., логично предположить, что все тайлы, содержащиеся в этих файлах, относятся к z17. Поэтому и искать их (строить карту заполнения, например) следует на z17. Так вот, включив "Отображать другие версии", я строю карту заполнения на z17 для полигона, описывающего содержимое одного из бывших битых файлов (158.80), а она (карта) показывает, что там тайлов-то и нет. И реально, на других зумах тайлы есть, а на z17 нет. Что же тогда содержится в восстановленных файлах? Или я чего-то не понимаю либо не так делаю?
2. Когда мои файлы испортились, я скачивал новую на то время версию снимков, причём часть интересующей меня области я скачал в испортившиеся файлы. После того, как файлы испортились, я начал скачивать интересующую меня область заново, и при этом образовались новые файлы 157.80.sdbv и 158.80.sdbv. Если предположить, что мои испорченные файлы восстановились (хотя бы и не полностью), могу ли я слить данные из новых файлов в старые (восстановленные)? Или мне перекачивать по-новой?
Однако есть кое-какие непонятки.
1. Файлы немаленькие, то есть должны содержать приличное количество тайлов разных версий. Поскольку эти файлы лежат в папке ...\z17\..., логично предположить, что все тайлы, содержащиеся в этих файлах, относятся к z17. Поэтому и искать их (строить карту заполнения, например) следует на z17. Так вот, включив "Отображать другие версии", я строю карту заполнения на z17 для полигона, описывающего содержимое одного из бывших битых файлов (158.80), а она (карта) показывает, что там тайлов-то и нет. И реально, на других зумах тайлы есть, а на z17 нет. Что же тогда содержится в восстановленных файлах? Или я чего-то не понимаю либо не так делаю?
2. Когда мои файлы испортились, я скачивал новую на то время версию снимков, причём часть интересующей меня области я скачал в испортившиеся файлы. После того, как файлы испортились, я начал скачивать интересующую меня область заново, и при этом образовались новые файлы 157.80.sdbv и 158.80.sdbv. Если предположить, что мои испорченные файлы восстановились (хотя бы и не полностью), могу ли я слить данные из новых файлов в старые (восстановленные)? Или мне перекачивать по-новой?