У меня неисправный жесткий диск, который не может записать или прочитать первые сектора диска. Это просто дает ошибки ввода-вывода, и это все, что есть. На диске есть и другие области, которые кажутся (в основном) хорошими. Я пытаюсь смонтировать раздел (ext4) и посмотреть, могу ли я получить доступ к некоторым файлам, которые я хотел бы восстановить. Поскольку mount
команда поддерживает offset
опцию, я смогу смонтировать файловую систему, даже если таблица разделов не читается и не перезаписывается. Проблема в том, как найти смещение. Похоже, что ни один из инструментов ext4 не обладает этой особенностью.
filesystems
partition
data-recovery
ext4
Эрнест А
источник
источник
Ответы:
Там нет стандартного смещения как такового, так как, конечно, вы можете начать раздел где угодно. Но давайте на минутку предположим, что вы ищете первый раздел, и он был создан более или менее с учетом значений по умолчанию. Тогда есть два места, где вы можете найти его, при условии, что вы использовали традиционную таблицу разделов DOS:
Теперь, чтобы продолжить, вам нужно выбрать свой любимый инструмент hex-dump и немного узнать о макете диска ext4 . В частности, он начинается с 1024 байтов заполнения, которое ext4 игнорирует. Далее идет суперблок. Вы можете распознать суперблок, проверив магическое число 0xEF53 со смещением 0x38 (от начала суперблока, или 0x438 от начала раздела, или 1080 в десятичном формате.) Магическое число имеет младший порядок. Так что на самом деле он хранится на диске как 0x53EF.
Вот как это выглядит
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Обратите внимание, что когда вы задаете смещение для монтирования (или потерянного), вы должны указать смещение, с которого начинается заполнение, а не суперблок.
Теперь, если это не первый раздел или иное не в одном из двух (трех) ожидаемых мест, вы в основном начинаете искать магическое число 0xEF53. Это то, что
testdisk
(рекомендуется в комментарии) делает для вас.источник
testdisk
не нашел бы это. Спасибо всем за помощь.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
чтобы получить возможные совпадения. Возможно, не очень быстро, но вы можете позволить ему работать, пока вы найдете лучший метод.testdisk
, мне просто нужно было добавить правку дляtl;dr:
заголовкаОсновываясь на ответе @ derobert , я написал программу ( gist ), которая будет анализировать входной поток
dd
и сканировать каждый сектор на предмет чего-то похожего на начало раздела ext.Он будет работать по крайней мере так же быстро, как
dd
может читать с вашего жесткого диска. Сокращенная версия приведена ниже.Самое простое использование - просто
sudo dd if=/dev/xxx | ext2scan
, хотя вы, вероятно, захотите изменитьdd
команду, чтобы улучшить размер блока или выбрать регион для поиска.Примечание: он найдет не только начало разделов, но и суперблоки внутри них.
В любом случае, я бы порекомендовал использовать
dumpe2fs
для анализа результатов. Вы можете записать начало подозреваемого суперблока в файл (по крайней мере, первые шесть секторов, согласно моему неформальному тесту), и если это суперблок, тоdumpe2fs
вам сообщат (среди прочего) об относительном расположении других суперблоков ,источник
Угадайте, где начинается раздел, и примените грубую силу:
Я полагаю, это может занять некоторое время, но если вы уже потратили 6 часов на testdisk, возможно, стоит попробовать.
источник
echo "--->$i<---"
линию из-за этого, так как иначе невозможно оценить прогресс. Я думаю, что вы можете увеличитьbsz
до 4096, что ускорит процесс.Попробуйте другой вариант (например, используя debugfs и fsck.ext4):
debugfs:
Сначала вы должны смонтировать debugfs (а не сам сбойный жесткий диск):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(по сути, это использование «debugfs -w» в режиме с включенной записью, а затем «lsdel» для вывода списка всех удаленных файлов). В качестве альтернативы вы можете использовать
и вот fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Другой - это «sleuthkit» («sudo apt-get install sleuthkit»), в котором есть команда типа «istat» для предоставления информации о блоках об инодах, из которой вы можете получить смещение и, таким образом, легко заблокировать содержимое данных.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(Кстати, если размер блока равен 1024, из команды debugfs «show_super_stats», то из этого следует, что блок 1 смещен на 1024 байта от начала диска, и каждая группа блоков также может иметь несколько блоков.)
источник
У меня был образ прошивки электронной книги, который включал образ раздела ext3fs, чтобы смонтировать и отредактировать то, что мне пришлось сканировать образ с помощью инструмента bgrep, чтобы найти все позиции магического числа ext3fs
0x53EF
и попытаться смонтировать, используя найденные смещения.Вот сокращенный скрипт, который выполняет монтирование:
Полный сценарий находится здесь .
источник
Это не проверено, но я думаю, что вы можете использовать метод, обсуждаемый в этом SU Q & A под названием: Обратный поиск inode / файла со смещения в raw-устройстве на linux и ext3 / 4? ,
Похоже, вы можете использовать индекс файла + смещение дисков + размер блока, чтобы определить смещение файла.
источник