Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  mount_nullfs
  badsect
  clri
  bsdlabel
  dump (rdump)
  dumpfs
  ffsinfo
  fsirand
  mount_nfs
  mount_smbfs
  swapon
  tunefs
  umount
  recovery files
  growfs
  Pax
  clonehdd
  Мониторинг RAID
  gstripe
  fusefs-ntfs
  UFS->ZFS
  RAID5
  freebsd lvm
  root ZFS, GPT
  FreeBSD on flash
  Восстановление ZFS
  Лечим FFS
  gmirror
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Файловая система —> recovery files

Восстановление файлов на FreeBSD.

Автор: dikens3.


В интернете практически нет информации по восстановлению файлов на FreeBSD.
Восстановить файлы на UFS2 и других файловых системах можно(как повезёт вобщем), чем мы и займёмся.

Общий принцип восстановления сводится к правилам:
1. Консервация системы или создание образа диска.
2. Анализ происшествия.
3. Восстановление.

Итак задача: Есть шесть pdf файлов разного размера, записать, удалить и восстановить их.

Что такое сигнатура?
Вики: Сигнатура файла — набор байтов, служащий «визитной карточкой» некоего типа файла.

Запишем несколько файлов и посмотрим, что нам скажет встроенная утилита file, которая содержит базу сигнатур.
file1.pdf
file2.exe
file3.doc
file4.djvu

Смотрим вывод, что же это за файлы:
# ls file[1-4].* | xargs file

file1.pdf: PDF document, version 1.3
file2.exe: MS-DOS executable (EXE), OS/2 or MS Windows
file3.doc: Microsoft Office Document
file4.djvu: DjVu Image file

Уберём расширения у наших файлов и переименуем в 1,2,3,4:
# ls [1-4] | xargs file

1: PDF document, version 1.3
2: MS-DOS executable (EXE), OS/2 or MS Windows
3: Microsoft Office Document
4: DjVu Image file

Как видим утилита file анализирует данные по базе сигнатур, а имя файла с расширением не имеют никакого значения для её работы.
Существует On-Line определение расширения файла по базе сигнатур:
http://mark0.net/onlinetrid.aspx

Foremost – программа для анализа файловой системы или образа диска на основании содержимого конфигурационного файла. В конфигурационном файле создаются записи для каждой сигнатуры.
Строка из конфигурационного файла /usr/local/etc/foremost.conf.sample выглядит так:
#       pdf     y       5000000 %PDF-  %EOF

Означает это следующее:
pdf		- расширение файла.
y		- будет ли учитываться регистр символов.
5000000 	- максимальный размер в байтах.
%PDF-		- заголовок. (header)
%EOF		- завершитель. (footer) Не обязателен.

Т.е. файлы с расширением PDF начинаются на %PDF- и заканчиваются на %EOF
Заголовок можно посмотреть так:
# head -c 5 1.pdf
%PDF-

Или так:
# head -c5 1.pdf | hexdump
0000000 5025 4644 002d

Согласно моей архитектуре(IA32) придётся поменять местами байты и получим 25 50 44 46 2d (в ASCII это %PDF-) Таким образом запись в конфигурационном файле можно сделать так:
pdf     y       5000000 \x25\x50\x44\x46\x2d  %EOF

А если совсем в шестнадцатеричном виде, тогда:
pdf     y       5000000 \x25\x50\x44\x46\x2d  \x25\x45\x4f\x46\x0d

Т.к. существуют символы, которые нельзя ввести с клавиатуры, приходится работать с шестнадцатеричными данными. Можно сделать запись и в десятичном виде, но так гораздо удобнее.
В итоге Foremost будет извлекать данные, находящиеся между заголовком и завершителем.

Пробуем воспользоваться полученными знаниями.
Я буду использовать жёсткий диск на 2Гб. (ad1: 2014MB <Seagate ST32122A 3.02> at ata0-slave UDMA33)
Очистим диск:
# dd if=/dev/zero of=/dev/ad0
dd: /dev/ad0: Operation not permitted

Упс, ошибся, но порадовало.
# dd if=/dev/zero of=/dev/ad1
# fdisk -BI /dev/ad1
# newfs -O2 -U /dev/ad1
# mount /dev/ad1 /mnt/target

Смотрим, смотировался ли диск:
# df -h

Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad1       1.9G    4.0K    1.8G     0%    /mnt/target

Я записал шесть PDF файлов c максимальным размером 42Мб:
-rw-r--r-- 1 dik dik 122080 25 июл 2006 1.pdf
-rw-r--r-- 1 dik dik 4795073 30 авг 2006 2.pdf
-rw-r--r-- 1 dik dik 933425 30 авг 2006 3.pdf
-rw-r--r-- 1 dik dik 42381941 5 сен 2006 4.pdf
-rw-r--r-- 1 dik dik 2611287 17 сен 2006 5.pdf
-rw-r--r-- 1 dik dik 2328268 18 сен 2006 6.pdf

Удаляем эти файлы.
Запускаем foremost со следующими ключами:
-t – расширения файлов для восстановления, их можно написать через запятую. Из man foremost приведу все расширения, для которых конфигурационный файл не нужен, но и максимальный размер файла для восстановления тоже не известен:
jpg, gif, png, bmp, avi, exe, mpg, wav, riff, wmv, mov, pdf, ole, doc, zip, rar, htm, cpp и all, включающий все перечисленные типы.
Внимание: Если нужно использовать конфигурационный файл, ключ –t указывать нельзя.
-o – директория, куда будут записываться найденные файлы.
-v – отображается прогресс на экране и информация представленная ниже.

Foremost может работать как с образами дисков, так и напрямую с жёстким диском, как в моём случае.
Пробуем:
# foremost -v -t pdf -o /mnt/test2/recovery /dev/ad1

foremost: /usr/local/etc/foremost.conf: No such file or directory
Foremost version 1.4 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File

Foremost started at Sat Oct 13 22:32:45 2007
Invocation: foremost -v -t pdf -o /mnt/test2/recovery /dev/ad1
Output directory: /mnt/test2/recovery
Configuration file: /usr/local/etc/foremost.conf
Processing: /dev/ad1
|------------------------------------------------------------------
File: /dev/ad1
Start: Sat Oct 13 22:32:45 2007
Length: Unknown

Num Name (bs=512) Size File Offset Comment

0: 12096.pdf 119 KB 6193152 (PDF is Linearized)
1: 95328.pdf 2 MB 48807936 (PDF is Linearized)
*********************|
Finish: Sat Oct 13 22:43:58 2007

2 FILES EXTRACTED

pdf:= 2
------------------------------------------------------------------

Foremost finished at Sat Oct 13 22:43:58 2007

Обратите внимание на комментарий:
(PDF is Linearized) – Такие данные, как правило, нормальные файлы.

Вот собственно получилось только 2-а файла:
# ls -ll recovery

total 4
-rw-r--r-- 1 root wheel 774 13 окт 22:43 audit.txt
drwxr-xr-- 2 root wheel 512 13 окт 22:33 pdf

# ls -ll recovery/pdf

total 2408
-rw-r--r-- 1 root wheel 122080 13 окт 22:33 00012096.pdf
-rw-r--r-- 1 root wheel 2313048 13 окт 22:33 00095328.pdf

В audit.xt записывается отчёт о проделанной работе, он такой же как при использовании ключа –v.
Foremost восстановил файлы 1.pdf и 6.pdf, правда у последнего размер отличается, но внутри он нормальный.
Мной были использованы разные настройки для foremost, такие как:
-d для Unix систем, лучше указывать.
-b 16384 - размер блока в моей системе, лучше указывать.

Блок – это группа смежных фрагментов. Фрагмент – это группа смежных секторов. (Справедливо для UFS)
Размер блока можно узнать установив TSK (/usr/ports/sysutils/sleuthkit)
# fsstat -f ufs /dev/ad1 | grep "Block Size" | awk '{print $3}'
16384

Я стал использовать конфигурационный файл с описанием PDF, вместо опции -t,  нужные 2 файла найдены небыли, по неизвестной причине.
Убрав завершитель, был найден файл под номеров 6 и часть файла под номером 5.
Поиск по всем расширениям результата не принёс, хотя были найдены jpg из одного PDF файла. Их было так  много, что можно было составить PDF из этих файлов.
Восстановить все 6 файлов мне не удалось, появлялись ещё мелкие файлы, якобы pdf, но открыть их потом не представлялось возможным.

Воспользовавшись photorec, входящей в состав /usr/ports/sysutils/testdisk были найдены 2 файла PDF и 27 файлов txt. PDF файлами оказались всё те же 1.pdf и 6.pdf.

Я предположил, что можно попробовать восстановить файлы исходя из информации, сохранившейся в метаданных. Метаданные - это данные, описывающие файлы или каталоги.

Устанавливаем TSK (/usr/ports/sysutils/sleuthkit)
Можно посмотреть список удалённых файлов/директорий:
# fls -f ufs /dev/ad1

d/- * 3: .snap
r/- * 4: 1.pdf
r/- * 5: 2.pdf
r/- * 6: 3.pdf
r/- * 7: 4.pdf
r/- * 8: 5.pdf
r/- * 9: 6.pdf

Как видно из вывода, записи обо всех файлах есть.  Звёздочкой (*) отмечены удалённые файлы/директории.

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

После удаления файла в метаданных затираются следующие поля:
- Указатели на блоки размещения, в которых находилcя файл.
- Данные о размере файла.

Можно вывести сохранившиеся метаданные, но пользы от них не будет.(Вместо нужных данных записаны нули)
# ils -f ufs /dev/ad1

class|host|device|start_time
ils|server.dom.ru.local||1192354043
st_ino|st_alloc|st_uid|st_gid|st_mtime|st_atime|st_ctime
3|f|0|5|1192306041|1192306029|1192306041|0|0|0|0|0
4|f|1001|1001|1192306029|1192299975|1192306029|0|0|0|0|0
5|f|1001|1001|1192306029|1192299976|1192306029|0|0|0|0|0
6|f|1001|1001|1192306029|1192299976|1192306029|0|0|0|0|0
7|f|1001|1001|1192306029|1192299983|1192306029|0|0|0|0|0
8|f|1001|1001|1192306029|1192299983|1192306029|0|0|0|0|0
9|f|1001|1001|1192306029|1192299984|1192306029|0|0|0|0|0

5,6,7 столбцы содержат информацию о времени.
       st_mtime
              UNIX time (seconds) of last file modification.
       st_atime
              UNIX time (seconds) of last file access.
       st_ctime
              UNIX time (seconds) of last inode status change.

Есть ещё /usr/ports/sysutils/ffs2recov, но и она маловероятно, что поможет.

P.S. Хранение данных о файле очень важно.
Представьте себе лист в клетку.
А теперь закрасим все клетки на этом листе разными цветами. Т.е. первую клетку красным, вторую зелёным, третью синим цветом и т.д.
В итоге получим красивую картинку.
Так вот всё, что закрашено красным – будет файл 1.pdf.
Что закрашено синим - будет файл 2.pdf. И т.д.
Теперь попробуйте собрать из красных клеток файл? Количество (размер) же известно?
Маловероятно, но можно, т.к. неизвестен только порядок соединения красных клеток.
В UFS всё ещё сложнее, представьте теперь, что лист стал чёрно-белым. :-)

Вот и всё.

Полезные ссылки по теме:
http://mark0.net/soft-trid-e.html
http://rlab.ru/doc/linuxharddatarecovery.html
http://weblog.infoworld.com/venezia/archives/2006_01.html

Используемая литература:
Криминалистический анализ файловых систем. Брайан Кэрриэ.



размещено: 2007-10-14,
последнее обновление: 2007-11-10,
автор: dikens3

оценить статью:

kmb, 2007-10-14 в 19:17:09

Понравилось, думаю в жизни всем пригодиться :) Спасибо.

Константин, 2007-10-16 в 14:42:53

есть коммент такой - чтобы узнать размер блока совсем не обязательно устанавливать sleuthkit - достаточно сделать, например:
bsdlabel имя_слайса
bsdlabel /dev/ad0s1
и там в табличке отразится
[fsize bsize bps/cpg]
 2048 16384 28544

dikens3, 2007-10-16 в 15:30:05

Спасибо, только не всегда работает:
server# fsstat -f ufs /dev/amrd0s1a | grep "Block Size" | awk '{print $3}'
16384

server# bsdlabel /dev/amrd0s1
# /dev/amrd0s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
 a:   524288        0    4.2BSD        0     0     0
 b:  2009728   524288      swap
 c: 41929587        0    unused        0     0         # "raw" part, don't edit
 d:  8388608  2534016    4.2BSD        0     0     0
 e:   524288 10922624    4.2BSD        0     0     0
 f: 30482675 11446912    4.2BSD        0     0     0

DemonSKED, 2009-10-01 в 16:16:49

Помогите
fls -rd /dev/ad1s2
Sector offset supplied is larger than disk image (maximum: 0)
В чем проблема?

chukot, 2011-01-22 в 5:41:39

Недавно встретился с необходимостью восстановления UFS2.
Случай был такой: нечистая файловая система. полуумирающий жеский диск. Во время выполнения резервирования - хард сдох. А именно - несколько сбойных секторов. Повреждена таблица размещения разделов и тд.
восстановление начал с использования R-Studio. Как ни странно, кроме поиска файлов по сигнатурам, эта программа делает одну полезную вещь - разбирает структуру фс, восстанавливает ее данные о ней.
Это очень полезно в тех случаях когда вы не помните ничего о размещении разделов на диске, и не можете, следовательно, восстановить поврежденную информацию этого характера.

Так вот - структура была распознана, но не удалось никакими усилиями получить самое важное).
Структура файловой системы отсканированого диска была неполной.
Выход был найдет следующий. На основе восстановленых данных о структуре фс был сделан образ (ы).
Оные смонтированы на другую машины с BSD, и обработаны fsck. Как ни странно - восстановилось все.

sergio, 2011-09-27 в 15:17:38

fls -rd /dev/ad0s1d

Sector offset supplied is larger than disk image (maximum: 0)

Чего ему надо?

Олег, 2011-11-22 в 8:44:31

C PDF понятно, как быть с форматами которых нет в /usr/local/etc/foremost.conf, например со скриптами sh?
Как правильно сделать для них hexdump и прописать в foremost.conf, если это вообще возможно?


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 53 чел.
За последние 30 мин было: 123 человек
За сегодня было
2564 показов,
627 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0423 секунд
Из них PHP: 26%; SQL: 74%; Число SQL-запросов: 77 шт.
Исходный размер: 121785; Сжатая: 24038