Вопрос или проблема
Я использую относительно недавнюю установку Jammy Jellyfish и пытаюсь запустить scalpel на жестком диске системы безопасности Hikvision. Анализ данных SMART проходит нормально. Я могу увидеть данные с помощью hexdump -C /dev/sda | less
Я запускал программу на других установках, но каждый раз, когда я запускаю ее на этой системе, она выдает ошибку сегментации (segfault). Я удалял, переустанавливал, проверял файл конфигурации. Она запускается, записывает файл аудита и затем выдает ошибку сегментации. Версия scalpel 1.60.
Я также установил foremost, когда прочитал, что это основано на заметке.
Scalpel версия 1.60
Написано Голоденом Г. Ричардом III, основано на Foremost 0.69.
Открытие цели "/dev/sda"
Ошибка сегментации (core dumped)
Вот последняя часть того, что strace говорит об этом:
brk(0x58f0558bf000) = 0x58f0558bf000
read(3, "-------------------------\n# Scan"..., 4096) = 471
brk(0x58f0558e3000) = 0x58f0558e3000
read(3, "", 4096) = 0
close(3) = 0
ioctl(1, TIOCGWINSZ, {ws_row=46, ws_col=186, ws_xpixel=0, ws_ypixel=0}) = 0
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=3552, ...}, AT_EMPTY_PATH) = 0
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=3552, ...}, AT_EMPTY_PATH) = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0\6\0\0\0\0"..., 4096) = 3552
lseek(3, -2260, SEEK_CUR) = 1292
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0\6\0\0\0\0"..., 4096) = 2260
close(3) = 0
openat(AT_FDCWD, "/media/h/98a20942-1b42-4c6c-9db9-9df1420cb5f2/puddle", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0775, st_size=4096, ...}, AT_EMPTY_PATH) = 0
brk(0x58f055909000) = 0x58f055909000
getdents64(3, 0x58f0558e09b0 /* 2 entries */, 32768) = 48
getdents64(3, 0x58f0558e09b0 /* 0 entries */, 32768) = 0
brk(0x58f055901000) = 0x58f055901000
close(3) = 0
openat(AT_FDCWD, "/media/h/98a20942-1b42-4c6c-9db9-9df1420cb5f2/puddle/audit.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=0, ...}, AT_EMPTY_PATH) = 0
readlink("/dev", 0x7fff23a9c180, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/sda", 0x7fff23a9c180, 1023) = -1 EINVAL (Invalid argument)
write(2, "\nOpening target \"/dev/sda\"\n\n", 28
Открытие цели "/dev/sda"
) = 28
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=NULL} ---
+++ убито SIGSEGV (core dumped) +++
Ошибка сегментации (core dumped)
Ответ или решение
Проблема с сегментацией (segfault) в приложении Scalpel при работе с диском, скорее всего, связана с тем, как программа обрабатывает входные данные или конфигурацию. Вот несколько шагов, которые могут помочь вам решить эту проблему.
-
Проверьте конфигурационный файл: Убедитесь, что файл конфигурации Scalpel (
scalpel.conf
) настроен правильно. Настройки, связанные с поддерживаемыми файлами и путями, могут быть неверно указаны. Попробуйте использовать минимальный конфигурационный файл, чтобы проверить, не является ли причиной конфигурация. -
Запустите как суперпользователь: Если вы не запускаете Scalpel от имени пользователя с правами администратора, это может вызвать проблемы с доступом к устройству. Попробуйте запустить команду от имени
root
или используйтеsudo
:sudo scalpel /dev/sda
-
Проверьте права доступа: Убедитесь, что у вас есть необходимые права на чтение устройства
/dev/sda
. Проверьте права доступа к устройству с помощью команды:ls -l /dev/sda
-
Отладка с помощью gdb: Если указанные выше методы не помогли, вы можете использовать
gdb
для отладки приложения и получения дополнительной информации о том, почему происходит сегментация. Запуститеgdb
, передав ему имя программы:gdb scalpel (gdb) run /dev/sda
После возникшей ошибки вы можете использовать команду
backtrace
, чтобы получить стек вызовов и понять, где именно произошла ошибка. -
Проверка на наличие обновлений: Поскольку вы используете версию 1.60, возможно, есть обновления или патчи, которые могут исправить проблему. Проверьте наличие новой версии Scalpel и обновите до последней доступной версии.
-
Использование альтернативных инструментов: Если проблема не решается, вы можете рассмотреть возможность использования других инструментов для восстановления данных, таких как Foremost, PhotoRec или TestDisk, которые могут помочь вам в вашей задаче.
-
Документация и поддержка: Ознакомьтесь с документацией Scalpel и обратитесь к сообществу разработчиков или на форумы, возможно, кто-то уже сталкивался с подобной проблемой.
Если после выполнения всех этих шагов проблема все еще существует, отправьте подробную информацию о вашей системе и конфигурации на соответствующие форумы или в службу поддержки Scalpel для дальнейшего анализа.