27.11.2014 Views

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

unixoid<br />

БЛОКИ С ПРЯМОЙ<br />

АДРЕСАЦИЕЙ<br />

БЛОКИ<br />

С КОСВЕННОЙ<br />

АДРЕСАЦИЕЙ<br />

INODE<br />

...<br />

БЛОКИ<br />

С ДВОЙНОЙ<br />

КОСВЕННОЙ<br />

АДРЕСАЦИЕЙ<br />

МАКСИМ «HATCHET» ПОЛЕВОЙ<br />

/ MAKS.HATCHET@YANDEX.RU/<br />

ОПЕРАЦИЯ<br />

«РЕИНКАРНАЦИЯ»<br />

Ручное восстановление данных в Linux<br />

Восстановить удаленные файлы с помощью специальных программ<br />

может даже учитель информатики, а вот проделать ту же<br />

операцию путем ручного редактирования управляющих структур<br />

файловой системы способен далеко не каждый. В экстремальной<br />

ситуации нужного софта может не оказаться под рукой.<br />

Придется полагаться только на себя и собственные знания.<br />

>> unixoid<br />

Сегодня мы поговорим о ручном восстановлении<br />

файлов с файловых систем ext2 и ext3. Сразу<br />

хочу тебя предупредить, что ничего сложного<br />

в этом нет. Дизайн официальных файловых систем<br />

Linux очень прост и понятен даже новичку.<br />

Все, что от тебя потребуется — внимательность<br />

и голова на плечах.<br />

Следующие два раздела посвящены тому, как<br />

организовано хранение файлов в ext2/3, и что<br />

происходит, когда пользователь выполняет<br />

команду rm. Последующие разделы описывают<br />

технику восстановления, основанную на информации<br />

первых двух.<br />

АНАТОМИЯ ФАЙЛОВОЙ<br />

СИСТЕМЫ EXT2/EXT3<br />

В начале раздела расположен boot-сектор длиной<br />

1024 байта. Он используется некоторыми<br />

загрузчиками для хранения своей второй части<br />

(например, Grub записывает туда код Stage 1.5).<br />

Далее следует супер-блок, в котором хранится<br />

ключевая информация о структуре файловой<br />

системы (своего рода главный конфиг). Чтобы<br />

прочитать информацию супер-блока, запусти<br />

следующую команду:<br />

# tune2fs -l /dev/hda1<br />

Ты увидишь массу информации, отражающей<br />

текущее состояние файловой системы, а также<br />

значения, заданные при ее создании и неизменяемые<br />

со временем. Одно из таких значений<br />

— «Block size», которое, скорее всего, будет<br />

равно 4096, то есть 4 Кб. Это размер одного<br />

блока файловой системы, базовой неделимой<br />

единицы хранимой информации. Все, что<br />

находится в ФС, разбито на огромное количество<br />

таких блоков, и даже если размер файла<br />

меньше размера блока, для его хранения будет<br />

использован целый блок, а большие файлы<br />

могут занимать сотни тысяч блоков. Общее количество<br />

блоков файловой системы прописано<br />

в поле «Block count», а количество свободных<br />

— во «Free blocks».<br />

Сразу за супер-блоком следуют дескрипторы<br />

групп и карты свободного пространства (битмапы),<br />

на которых мы не будем останавливаться.<br />

А вот расположенная сразу за ними inodeтаблица<br />

вызывает особый интерес, потому<br />

как именно она является централизованным<br />

хранилищем всей информации о каждом файле.<br />

Таблица представляет собой массив структур<br />

типа ext2_inode, размер которого задается<br />

во время создания файловой системы и не<br />

изменяется со временем (смотри поле «Inode<br />

Count» супер-блока). Каждый элемент этого<br />

массива описывает один файл и хранит такую<br />

информацию, как тип (обычный, каталог, ссылка<br />

и т.д.), схема размещения на диске, логический/<br />

физический размер, дата/время создания/<br />

модификации/последнего доступа/удаления,<br />

количество ссылок на файл и права доступа.<br />

Структура ext2_inode, выступающая в роли<br />

элемента массива, определена в файле source/<br />

include/linux/ext2_fs.h и выглядит так:<br />

Структура inode<br />

struct ext2_inode {<br />

/* Ðåæèì äîñòóïà ê ôàéëó */<br />

__u16 i_mode;<br />

/* UID âëàäåëüöà ôàéëà */<br />

__u16 i_uid;<br />

/* Ðàçìåð ôàéëà â áàéòàõ */<br />

__u32 i_size;<br />

/* Âðåìÿ ïîñëåäíåãî äîñòóïà */<br />

__u32 i_atime;<br />

082<br />

XÀÊÅÐ 07 /127/ 09

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!