Views
3 years ago

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

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

unixoid БЛОКИ С

unixoid БЛОКИ С ПРЯМОЙ АДРЕСАЦИЕЙ БЛОКИ С КОСВЕННОЙ АДРЕСАЦИЕЙ INODE ... БЛОКИ С ДВОЙНОЙ КОСВЕННОЙ АДРЕСАЦИЕЙ МАКСИМ «HATCHET» ПОЛЕВОЙ / MAKS.HATCHET@YANDEX.RU/ ОПЕРАЦИЯ «РЕИНКАРНАЦИЯ» Ручное восстановление данных в Linux Восстановить удаленные файлы с помощью специальных программ может даже учитель информатики, а вот проделать ту же операцию путем ручного редактирования управляющих структур файловой системы способен далеко не каждый. В экстремальной ситуации нужного софта может не оказаться под рукой. Придется полагаться только на себя и собственные знания. >> unixoid Сегодня мы поговорим о ручном восстановлении файлов с файловых систем ext2 и ext3. Сразу хочу тебя предупредить, что ничего сложного в этом нет. Дизайн официальных файловых систем Linux очень прост и понятен даже новичку. Все, что от тебя потребуется — внимательность и голова на плечах. Следующие два раздела посвящены тому, как организовано хранение файлов в ext2/3, и что происходит, когда пользователь выполняет команду rm. Последующие разделы описывают технику восстановления, основанную на информации первых двух. АНАТОМИЯ ФАЙЛОВОЙ СИСТЕМЫ EXT2/EXT3 В начале раздела расположен boot-сектор длиной 1024 байта. Он используется некоторыми загрузчиками для хранения своей второй части (например, Grub записывает туда код Stage 1.5). Далее следует супер-блок, в котором хранится ключевая информация о структуре файловой системы (своего рода главный конфиг). Чтобы прочитать информацию супер-блока, запусти следующую команду: # tune2fs -l /dev/hda1 Ты увидишь массу информации, отражающей текущее состояние файловой системы, а также значения, заданные при ее создании и неизменяемые со временем. Одно из таких значений — «Block size», которое, скорее всего, будет равно 4096, то есть 4 Кб. Это размер одного блока файловой системы, базовой неделимой единицы хранимой информации. Все, что находится в ФС, разбито на огромное количество таких блоков, и даже если размер файла меньше размера блока, для его хранения будет использован целый блок, а большие файлы могут занимать сотни тысяч блоков. Общее количество блоков файловой системы прописано в поле «Block count», а количество свободных — во «Free blocks». Сразу за супер-блоком следуют дескрипторы групп и карты свободного пространства (битмапы), на которых мы не будем останавливаться. А вот расположенная сразу за ними inodeтаблица вызывает особый интерес, потому как именно она является централизованным хранилищем всей информации о каждом файле. Таблица представляет собой массив структур типа ext2_inode, размер которого задается во время создания файловой системы и не изменяется со временем (смотри поле «Inode Count» супер-блока). Каждый элемент этого массива описывает один файл и хранит такую информацию, как тип (обычный, каталог, ссылка и т.д.), схема размещения на диске, логический/ физический размер, дата/время создания/ модификации/последнего доступа/удаления, количество ссылок на файл и права доступа. Структура ext2_inode, выступающая в роли элемента массива, определена в файле source/ include/linux/ext2_fs.h и выглядит так: Структура inode struct ext2_inode { /* Ðåæèì äîñòóïà ê ôàéëó */ __u16 i_mode; /* UID âëàäåëüöà ôàéëà */ __u16 i_uid; /* Ðàçìåð ôàéëà â áàéòàõ */ __u32 i_size; /* Âðåìÿ ïîñëåäíåãî äîñòóïà */ __u32 i_atime; 082 XÀÊÅÐ 07 /127/ 09

unixoid разделу. Это хорошо для устойчивости файла к разрушению, но плохо с точки зрения простоты его последующего восстановления. Имена файлов хранятся в каталогах, которые на самом деле есть не что иное, как файлы специального типа. В каталог записана последовательность структур типа ext2_dir_entry_2 (или ext2_dir_entry в старых ядрах), которая выглядит следующим образом: СТРУКТУРА КАТАЛОГОВОЙ ЗАПИСИ struct ext2_dir_entry_2 { /* Ññûëêà íà inode */ __u32 inode; /* Äëèíà äàííîé çàïèñè */ __u16 rec_len; /* Äëèíà èìåíè ôàéëà */ __u8 name_len; /* Òèï ôàéëà */ __u8 file_type; /* Èìÿ ôàéëà */ char name [EXT2_NAME_LEN]; }; #define EXT2_NAME_LEN 255 ДАМП СУПЕР-БЛОКА С ПОМОЩЬЮ DUMPE2FS /* Âðåìÿ ñîçäàíèÿ */ __u32 i_ctime; /* Âðåìÿ ìîäèôèêàöèè */ __u32 i_mtime; /* Âðåìÿ óäàëåíèÿ */ __u32 i_dtime; /* GID ãðóïïû */ __u16 i_gid; /* Êîëè÷åñòâî ññûëîê íà ôàéë (0 — ôàéë óäàëåí) */ __u16 i_links_count; /* Êîëè÷åñòâî áëîêîâ, ïðèíàäëåæàùèõ ôàéëó */ __u32 i_blocks; /* Ðàçíûå ôëàãè */ __u32 i_flags; /* Çàâèñèìûå îò ÎÑ çíà÷åíèÿ */ union osd1; /* Ññûëêè íà áëîêè */ __u32 i_block [EXT2_N_BLOCKS]; /* Âåðñèÿ ôàéëà (èñïîëüçóåòñÿ NFS) */ __u32 i_version; /* ACL-àòðèáóòû ôàéëà */ __u32 i_file_acl; /* ACL-àòðèáóòû êàòàëîãà (íàñëåäóþòñÿ âî âðåìÿ ñîçäàíèÿ ôàéëà) */ __u32 i_dir_acl; /* Ïîëîæåíèå ïîñëåäíåãî ôðàãìåíòà */ __u32 i_faddr; /* Çàâèñèìûå îò ÎÑ çíà÷åíèÿ */ union osd2; }; #define EXT2_DIR_BLOCKS 12 XÀÊÅÐ 07 /127/ 09 #define EXT2_IND_BLOCK EXT2_DIR_ BLOCKS #define EXT2_DIND_BLOCK (EXT2_IND_ BLOCK + 1) #define EXT2_TIND_BLOCK (EXT2_DIND_ BLOCK + 1) #define EXT2_N_BLOCKS (EXT2_TIND_ BLOCK + 1) Ссылки на закрепленные за файлом блоки хранятся в массиве i_block, первые 12 элементов которого представляют собой 32-битные адреса первых 12 блоков файла. Их называют блоками с прямой адресацией. Тринадцатый элемент массива хранит ссылку на блок, хранящий адреса следующих блоков данных («блок косвенной адресации»). Четырнадцатый элемент массива — ссылка на блок, хранящий ссылки на блоки косвенной адресации («двойной блок косвенной адресации»). И, наконец, в 15 элементе массива хранится ссылка на блок, содержащий ссылки на блоки двойной косвенной адресации. Такая вот путаная (но эффективная) древовидная схема размещения данных в файловых системах ext2 и ext3. При этом блоки косвенной адресации не обязательно должны следовать друг за другом, для файловой системы — это точно такие же блоки данных. Для их распределения используется стандартный механизм, который может вернуть ссылку на блок, расположенный в любой точке раздела. В результате схема размещения данных файла может оказаться разбросанной по всему Когда приложение выполняет системный вызов open() или creat() для создания файла, ядро заполняет свободный inode в inode-таблице новыми данными. Затем добавляет в текущий каталог новую запись типа ext2_dir_entry_2, записывает в нее имя файла (поле name), его тип (file_type) и помещает ссылку на созданный inode в одноименное поле. В итоге, пройдя по цепочке структур и массивов в обратном порядке, можно быстро найти данные, закрепленные за файлом — пока он жив. КАК ПРОИСХОДИТ УДАЛЕНИЕ ФАЙЛА В общих чертах процедура удаления (разлинковки) файла выглядит следующим образом. Драйвер файловой системы определяет каталог, за которым закреплен удаляемый файл и находит inode файла в последовательности структур типа ext2_dir_entry_2. После чего отыскивает нужный inode в inode-таблице и уменьшает его счетчик ссылок (i_links_count) на единицу. Если счетчик не становится равен нулю, удаления не происходит (ссылка на файл могла остаться в другом каталоге); в противном случае — пишите письма, драйвер приступает к грязной работе. Все принадлежащие файлу блоки помечаются как неиспользуемые в карте свободного пространства. Обновляется поле времени удаления, и inode освобождается. В конце концов, драйвер обнуляет поле inode файла в файле каталога и увеличивает длину предыдущей записи на размер удаляемой (именно для этого нужно поле rec_len). Нетрудно заметить, что фактического удаления информации не происходит. Более того, inode файла остается на месте и продолжает хранить всю информацию об удаленном файле. Ссылки на блоки данных также остаются на месте, но сами блоки помечаются как неиспользуемые, 083

Май - Xakep Online
Скачать - Xakep Online
Январь - Xakep Online
УЧИМ КАКОценить сбалансированность системы ... - Xakep Online
ИюНь - Xakep Online
Офисное западло - Xakep Online
КОНКУРС - Xakep Online
JIT SPRAY АНАЛИЗ TDSS - Xakep Online
Скачать - Xakep Online
ЛУЧШИХ ВИРУСОВ - Xakep Online
Ноябрь - Xakep Online
Скачать - Xakep Online
Взлом GSM - Xakep Online
ЛЕГКИЙ ХАК - Xakep Online
2009 - Xakep Online
ВЗЛОМ ИНТЕРНЕТ-МАГАЗИНА: - Xakep Online
7 ЧУДЕС KDE - Xakep Online
с татьи - Xakep Online
c-лето ;) - Xakep Online
содержание 10 (59) - Xakep Online
Ноябрь - Xakep Online
ЗАКАДРИ КАРДИНГ НАШИ ИДУТ! - Xakep Online
Untitled - Xakep Online
WebMoney - Xakep Online
шпион внутри - Xakep Online
тест - Xakep Online
Зверские опыты над Oracle - Xakep Online