Свой среди чужих. Восстанавливаем данные с FAT, NTFS и UFS, не покидая LinuxО восстановлении данных с файловых систем Linux не писал только ленивый. Для выполнения этой задачи существует множество самых разнообразных средств, включая утилиту Debugfs, которая с легкостью извлекает любые потертые файлы с ext2. Но как же быть с другими фс? Как восстановить исчезнувший файл с флеш-брелка или расположенного рядом NTFS-раздела? Об этом молчат даже самые трудолюбивые блоггеры. А между тем, все очень просто и прозаично. Не всегда удобно перезагружаться в другую операционную систему для выполнения действий по проверке файловых систем, восстановления файлов, изменения размера разделов и выполнения других операций с данными. Представь, что уже несколько лет на твоем компе установлено две операционные системы: Windows и Linux. Первую ты загружаешь очень редко и только в экстренных случаях, второй пользуешься ежедневно и уже подумываешь о полном переходе на Linux и удалении винды, вот только NTFS-раздел, хранящий годами накапливаемые данные, перевести в ext3 нельзя никакими инструментами. Приходится держать две операционки, потому что хоть NTFS-раздел и доступен из Linux (с помощью ntfs-3g), для решения проблем файловой системы все равно придется перезагружаться в Windows. А если накрылась файловая система FAT на Flash-накопителе? Опять перезагружаться в Windows? Или ты случайно удалил файл в файловой системе UFS, принадлежащей рядом установленной FreeBSD? Может быть, ты системный администратор, и диска для восстановления Windows в нужный момент не оказалось под рукой? Отвечу на все вопросы сразу: почти все действия по возвращению из небытия файловых систем FAT, NTFS, UFS, восстановлению хранящихся в них файлов, диагностике и многому другому можно произвести, не покидая Linux. Из этой статьи ты узнаешь, как это сделать. Набор инструментовПеред тем, как перейти непосредственно к описанию процесса восстановления, диагностики и возвращения убитых файлов к жизни, считаю своим долгом ознакомить тебя со списком используемых инструментов. Во-первых, нам понадобятся инструменты для работы с файловыми системами (создание, проверка, получение информации). Все они распространяются в трех пакетах: 1. dosfstools — утилиты для работы с файловыми системами типа FAT. Пакет содержит всего две программы: mkfs.vfat (mkfs.dos) для создания файловой системы и fsck.vfat (fsck.dos) для выполнения проверки файловой системы. 2. ufsutils — набор утилит для работы с UFS и производными (например, FFS, используемой во FreeBSD). Содержит восемь утилит, включая mkfs.ufs, fsck.ufs, tunefs.ufs (настройка ФС), growfs.ufs (изменение размера) и другие. 3. ntfsprogs — различные утилиты для работы с NTFS. Не содержит программ для создания или полной проверки (базовая проверка возможна) файловой системы, но включает в себя массу полезнейших инструментов, таких как ntfscp для копирования файлов без монтирования раздела, «реинкарнатор» файлов ntfsundelete, утилита для изменения размера раздела ntfsresize, программа для клонирования разделов ntfsclone и другие. Также нам могут пригодиться инструменты для работы с разделами жесткого диска. Есть три наиболее продвинутые программы такого типа: parted (www.gnu.org/software/parted), предназначенная для создания разделов, изменения их размера, перемещения, создания и проверки файловых систем; gpart (www.brzitwa.de/mb/gpart) — программа-восстановитель затертой таблицы разделов и TestDisk (www.cgsecurity.org/wiki/TestDisk) — аналог gpart с псевдографическим интерфейсом и несколькими полезными функциями. В пакете TestDisk ты найдешь утилиту PhotoRec, предназначенную для восстановления различных типов файлов с раздела вне зависимости от используемой файловой системы. Принцип ее работы заключается в поиске и восстановлении файлов по их метаданным без анализа структуры файловой системы. PhotoRec способна восстанавливать изображения (bmp, jpg, png, tiff, raf, raw, rdc, x3f, crw, ctg, orf, mrw), аудио-файлы (wav, au, mp3, wma), видео-файлы (avi, mov, mpg), архивы (bz2, tar, zip), документы (doc, pdf, html, rtf), файлы с исходниками программ (c, pl, sh). Ряд программ такого же типа можно найти в пакете Sleuth Kit (www.sleuthkit.org), для которого существует web-интерфейс autopsy. Сценарии использованияВ следующих разделах мы рассмотрим несколько распространенных сценариев использования описанных утилит. Во-первых, это подробное описание процесса восстановления файлов с использованием трех разных подходов, во-вторых, починка файловых систем после сбоя, в-третьих, клонирование раздела на несколько машин, в-четвертых, описание процесса переноса данных на раздел меньшего размера. Кастим RessurectionДля оживления умерших файлов на NTFS предназначена уже упоминавшаяся ntfsundelete из пакета ntfsprogs. Она очень проста в использовании и чрезвычайно аккуратна. Если ты случайно потер файл и сразу же отмонтировал раздел, будь уверен — ntfsundelete сможет вернуть его на место в целости и сохранности. Для начала необходимо просмотреть список всех удаленных файлов:
В третьей колонке вывода будет указан процент сохранности файла. Если он равен 100% — все ОК, файл может быть возвращен к жизни целым и невредимым; меньшее значение указывает на то, что какие-то его участки уже были затерты новыми данными, поэтому после восстановления файл окажется, что называется, битым. В некоторых случаях возможность восстановления даже наполовину убитого файла может сделать погоду, пока же остановимся на полностью целых экземплярах. Для этого выполним следующую команду:
Ух, как же их много! Заставим программу вывести на экран только файлы, удаленные за последние 2 дня:
Так-то лучше. Восстановим файл, номер inode (первая колонка вывода) которого равен 11172, в каталог /undeleted:
Файлы можно восстанавливать по маске:
Фильтровать по длине:
Или же ты можешь восстановить все удаленные файлы, а уже потом разобраться, что к чему: Программа извлекает файлы со всеми атрибутами, включая имя и время создания. Пользоваться ей одно удовольствие. Для восстановления данных со всех остальных файловых систем, включая FAT, UFS, EXT3, да и любых других, удобнее всего использовать PhotoRec. Запускаем программу:
В главном меню выбираем подопытное устройство (например, /dev/sda). Нажимаем <Enter> и выбираем тип таблицы разделов (для писюков это Intel). Далее выбираем раздел, а на следующем экране — тип файловой системы (ext2/ext3 или другая). Задаем каталог, куда мы хотим поместить восстановленные файлы, и нажимаем «Y». Каталог должен находиться на другом разделе/диске, иначе ты рискуешь усугубить ситуацию, затерев удаленные файлы новыми данными. Все, начался процесс восстановления, он может продлиться от 10 минут до нескольких часов, в зависимости от «старости» файловой системы и количества удаленных файлов. Ты можешь остановить процесс в любой момент, нажав <Ctrl-C>, и возобновить его с места прерывания, вновь запустив PhotoRec. В выбранном тобой каталоге ты найдешь массу подкаталогов с именами вроде recup_dir.1, recup_dir.2, каждый из которых содержит большое количество файлов разного типа. Имена PhotoRec не восстанавливает, поэтому придется повозиться с разгребанием всей этой кучи. У PhotoRec есть и другие недостатки: 1. Достаточно часто он дает сбои, и файлы могут оказаться поврежденными, поэтому их следует проверять на «небитость» в обязательном порядке. 2. Программа ищет файлы по шаблонам. Если ты удалил файл, формат которого не поддерживается PhotoRec — пиши пропало. Поэтому в довесок к photorec необходимо иметь под рукой другие средства анализа и восстановления утраченных данных. Лучшим на этом поприще считается комплект утилит Sleuth Kit (www.sleuthkit.org), содержащий огромное количество самых разнообразных инструментов, которые любят применять в своей работе различные службы по расследованию инцидентов взлома и продвинутые системные администраторы. Мы далеки от этого, и нас интересуют только две утилиты из всего комплекта: fls и icat, предназначенные для поиска и извлечения файлов (как существующих, так и удаленных). Просмотрим список удаленных файлов с помощью утилиты fls:
Флаг ‘-r’ заставляет программу рекурсивно проходить по всем каталогам, а ‘-d’ — показывать только удаленные файлы. Скорее всего, листинг будет очень длинным, и к тому же будет содержать список inode, которые уже были отданы другим файлам (строчка realloc в третьей колонке), поэтому мы его отфильтруем и направим в less:
В третьей колонке ты увидишь номера inode-файлов, а в четвертой — их имена. Чтобы выдернуть файл из ФС, воспользуйся командой icat (флаг ‘-r’ предназначен для восстановления удаленного файла):
Для восстановления всех файлов можно воспользоваться следующей командой:
Если ты желаешь найти какой-то конкретный файл, то вывод fls можно просто «погрепать»:
Замечательная особенность утилит Sleuth Kit состоит в том, что они используют множество самых разнообразных методик поиска удаленных файлов и их частей. Это и анализ управляющих структур файловой системы, и различные эвристические методы, и сопоставление с шаблоном. Фактически, с помощью Sleuth Kit возможно вернуть к жизни даже файлы, затертые на ext3 (притом, что сами разработчики ext3 говорят о невозможности проведения такой операции). Починка файловых системПочинить поломавшуюся файловую систему очень просто. Достаточно воспользоваться стандартными утилитами fsck.vfat (для файловых систем FAT12, FAT16 и FAT32), fsck.ufs (для UFS, UFS2, FFS) и ntfsfix (для NTFS). К сожалению, ntfsfix не способна полностью вылечить NTFS. Она лишь исправляет некоторые из ее проблем и устанавливает флаг принудительной проверки файловой системы, так что следующая перезагрузка в Windows повлечет за собой запуск chkdsk для полной проверки ФС. Используя виртуальную машину, мы можем избежать необходимости перезагрузки в Windows. Для этого: 1. Запускаем виртуальную машину и устанавливаем винду на виртуальный жесткий диск. Копирование разделовДопустим, ты купил новый жесткий диск и хочешь перенести несколько разделов со старого диска на новый. Если ты начнешь делать это стандартными методами, через создание нового раздела и ручное копирование файлов, то рискнешь поиметь массу проблем, связанных с кодировками имен файлов, специальными файлами, защищенными файлами, да и потеряешь массу времени. Лучше воспользоваться методом клонирования раздела. Пользователи UNIX клонируют разделы с помощью стандартной утилиты dd, которую можно применять в связке с любой файловой системой. Для этого на новом диске создается раздел, идентичный по размерам источнику, и выполняется команда «dd if=раздел1 of=раздел2 bs=1m». Таким же образом можно скопировать и NTFS-раздел, но в пакете ntfsprogs для этой цели есть более подходящая утилита. Программа ntfsclone идентична по функциональности команде dd за исключением двух особенностей. Во-первых, она не копирует незанятые участки файловой системы, и перемещение происходит быстрее, а образ раздела (если ты создаешь образ) занимает меньше места. Во-вторых, ntfsclone способна хранить образ в специальном сжатом файле, который удобно передавать на другие машины. Для клонирования раздела достаточно выполнить следующую команду:
А для создания образа:
Утилита ntfsclone особенно удобна, если ты решил скопировать установленный Windows на целый парк других машин (учебный класс или офис). Для этого достаточно установить Windows на одну машину и создать образ, который затем можно выложить в шару и с помощью Linux LiveCD залить на другие машины. Чтобы они смогли загружаться, придется также скопировать MBR-запись диска:
А затем записать ее на диск всех машин:
Перенос данныхЕсли ты решил полностью перейти на Linux, но не хочешь использовать различные ухищрения и ntfs-3g для доступа к своим старым данным, расположенным на NTFS-разделе? Ведь этот раздел может занимать большую часть диска, и нет никакой возможности просто скопировать его содержимое на новый раздел, отформатированный в ext3/ext4. В этом случае тебе на помощь опять придут утилиты из пакета ntfsprogs, а точнее одна из них — ntfsresize, которая позволит копировать данные небольшими порциями в новую файловую систему с последующим уменьшением размера NTFS-раздела и увеличением ext3/ext4-раздела. Для этого тебе понадобится какой-нибудь LiveCD, содержащий ntfsprogs и e2fsprogs версии не ниже 1.41 (для поддержки ext4, если ты, конечно, собираешься переносить данные на нее). Также очень желательно, чтобы LiveCD содержал свеженький gparted, потому что изменять размер вручную трудно и опа |