Вопрос или проблема
Я владею 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
. Не забывайте всегда проверять доступные инструменты и версии для обеспечения совместимости при работе с файлами базы данных.