Как мне идентифицировать / использовать этот (экзотический?) .db файл?

Вопрос или проблема

Я владею Synology DS220J, который использую для хостинга нескольких различных NFS-списков / “Общий папок” (как их называет DSM), и я копался в некоторых файлах, чтобы выяснить, где устройство хранит информацию о них.

Я нашел интересный файл, который содержит названия моих “Общих папок” в /usr/syno/etc/synoshare.db:

% strings synoshare.db 
BACKUP.OLD
HOMES
BACKUP
[УДАЛЕНА СТРОКА]
LAVORO
[УДАЛЕНА СТРОКА]
WEB_PACKAGES
STORAGE
NETBACKUP
[УДАЛЕНА СТРОКА]
TFTP

Я скопировался этот файл с NAS на свою локальную машину, и первое, что я попробовал сделать, это взаимодействовать с ним, как если бы это была база данных SQLite:

% sqlite3 synoshare.db 
SQLite версия 3.44.0 2023-11-01 11:23:50
Введите ".help" для подсказок по использованию.
sqlite> .databases
main: /home/dev/playground/temp/synoshare.db r/w
sqlite> .tables
Ошибка: файл не является базой данных

Затем я прибегнул к file -k:

% file -k synoshare.db
synoshare.db: Berkeley DB 1.85/1.86 (Btree, версия 3, родной порядок байтов)\012- Berkeley DB 1.85/1.86 (Btree, версия 3, little-endian)\012- данные

file кажется, убежден, что это файл Berkeley DB. Так что я попробовал использовать db_dump (db_dump не имеет страницы man в openSUSE, поэтому я обратился к db_dump man странице от Oracle, которая предлагает использовать -l для отображения баз данных в файле):

% db_dump -l synoshare.db
db_dump: __db_meta_setup: synoshare.db: неожиданный тип файла или формат
db_dump: открыть: synoshare.db: Неверный аргумент

Что мне попытаться сделать дальше? Я понимаю, что эта база данных может быть структурирована в каком-то проприетарном формате, но насколько это вероятно? И, похоже, она имеет некоторое сходство с файлами Berkeley DB, так что, возможно, я мог бы использовать какой-то трюк, чтобы конвертировать ее в правильный файл Berkeley DB?

Как-то неожиданно, проблема заключалась в том, что последние версии db_dump не поддерживают файлы Berkeley DB 1.85.

Вам понадобится db_dump185.

openSUSE, похоже, не предоставляет пакет, который содержит db_dump185, однако в Ubuntu есть (libdb1-compat), так что я scpнул файл на машину с Ubuntu и установил libdb1-compat:

sudo apt install libdb1-compat

Утилита db_dump185 читает файл базы данных версии 1.85 db_file и выводит его на стандартный вывод, используя переносимый текстовый формат, понятный утилите db_load(1).

Итак, я конвертировал файл с помощью:

db_dump185 synoshare.db >synoshare_converted.db

И следующей проблемой было то, что я не смог установить пакет db_load на Ubuntu по каким-то причинам.

Я не очень хотел с этим разбираться, особенно потому что на моей системе openSUSE db_load был в пакете db48-utils, который я установил, чтобы взаимодействовать с файлом, используя db_dump, так что я просто scpнул файл обратно на свою машину openSUSE и запустил:

<synoshare_converted.db db_load synoshare_converted_db_load.db

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

db_dump -p synoshare_converted_db_load.db
% db_dump -p synoshare_converted_db_load.db
VERSION=3
format=print
type=btree
db_pagesize=4096
HEADER=END
[...]
DATA=END

Ответ или решение

Идентификация и использование файла с расширением .db на Synology DS220J

Вопрос, с которым вы столкнулись, является довольно распространенной задачей для IT-специалистов, работающих с различными базами данных. В данном случае вы нашли файл synoshare.db на своем NAS-сервере Synology, и ваша задача заключается в том, чтобы определить, как его использовать или извлечь информацию из него.

1. Понимание формата файла

Ваши первоначальные эксперименты с использованием SQLite для взаимодействия с файлом не увенчались успехом. Как вы уже выяснили, файл synoshare.db является базой данных Berkeley DB версии 1.85/1.86. Это может означать, что для его анализа вы должны использовать инструменты, совместимые с этой версией Berkeley DB.

2. Установка необходимых инструментов

Так как вы столкнулись с ошибками при использовании db_dump, важно убедиться, что у вас установлен правильный инструмент. На системах с поддержкой Berkeley DB 1.85 вам понадобится db_dump185. Этот инструмент может отсутствовать в стандартных репозиториях некоторых дистрибутивов, таких как openSUSE, но доступен в Ubuntu через пакет libdb1-compat.

Порядок действий:

  • Передайте файл synoshare.db на машину под управлением Ubuntu:
    scp /path/to/synoshare.db user@ubuntu_machine:/path/to/destination
  • Установите необходимые инструменты:
    sudo apt install libdb1-compat

3. Конвертация и анализ данных

После установки db_dump185 вы сможете преобразовать файл для дальнейшего анализа:

db_dump185 synoshare.db > synoshare_converted.db

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

4. Перенос обратно и дальнейшая работа

Если вам нужно использовать db_load для работы с преобразованным файлом и у вас возникли проблемы с его установкой на Ubuntu, вы можете вернуть файл обратно на вашу машину с openSUSE. Следующий код выполнит загрузку вновь созданного файла:

scp synoshare_converted.db user@opensuse_machine:/path/to/destination
db_load synoshare_converted.db synoshare_converted_db_load.db

5. Извлечение данных

Теперь вы можете извлечь содержимое файла, используя следующий код:

db_dump -p synoshare_converted_db_load.db

Вы получите вывод, содержащий данные в формате, который можно будет проанализировать для получения имен ваших "Shared folders" и другой информации.

Заключение

Работа с файлами базы данных может быть сложной задачей, особенно с экзотическими форматами. Однако, следуя вышеописанным шагам и использовав соответствующие инструменты, можно успешно извлечь и анализировать данные в файле synoshare.db. Не забывайте всегда проверять доступные инструменты и версии для обеспечения совместимости при работе с файлами базы данных.

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

Капча загружается...