Возможно вы искали: 'Magic: The Gathering -...'

May 15 2025 19:25:40
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Восстановление ext2/ext3 раздела при помощи debugfs.ext2 (ext3 ext2 fs linux debug)

Восстановление ext2/ext3 раздела при помощи debugfs.ext2 (ext3 ext2 fs linux debug)

Ключевые слова: ext3, ext2, fs, linux, debug, (найти похожие документы)

From: darkk <http://darkk.livejournal.com>
Date: Mon, 26 Nov 2007 18:21:07 +0000 (UTC)
Subject: Восстановление ext2/ext3 раздела при помощи debugfs.ext2

Оригинал: http://darkk.livejournal.com/28545.html


Дано: битый раздел, на котором лежит N месяцев работы. Бэкапов нет.
e2fsck теряет волю, ситуацию усугубляет растущее кол-во badblock-ов на
винте.

livecd storage # e2fsck -n /dev/hdb1
e2fsck 1.38 (30-Jun-2005)
Superblock has an invalid ext3 journal (inode 8).
Clear? no

e2fsck: Illegal inode number while checking ext3 journal for /dev/hdb1


При попытке сказать yes - e2fsck падал по подобию assert(), когда искал root, к
орневая директория была куском нулей

livecd storage # debugfs -c /dev/hdb1
debugfs 1.38 (30-Jun-2005)
/dev/hdb1: catastrophic mode - not reading inode or group bitmaps
debugfs: show_super_stats -h
...
Inode count: 7340032
Block count: 14659304
...


Узнаем свободные inode и получаем листинг условно-живых директорий

livecd storage # for ((i=2; $i <= 7340032; i++)); do echo testi '<'$i'>'; done
> testi.in
livecd storage # debugfs -f testi.in /dev/hdb1 > testi.out
livecd storage # grep 'Inode [0-9]* is marked in use' testi.out | grep -E -o '[
0-9]+' > used.inodes
livecd storage # cat used.inodes | sed 's,.*,ls <&>,' > ls.in
livecd storage # debugfs -f ls.in /dev/hdb1 > ls.out
livecd storage # bzip2 -c ls.out > ls.out.bz2


Крайне полезно этот ls.out залить в sql-базу (например так), чтобы
шустро собирать по нему статистику... У меня размер основной таблицы
entries (inode, name, curdir, size) индексированной базы (схема
прилагается) получился под 100 мегабайт с 60гигового раздела.

Затем можно пополнить базу следующими (НЕ абсолютно верными)
наблюдениями:

INSERT INTO directories SELECT inode, curdir FROM entries
GROUP BY inode HAVING COUNT(*) > 1;

INSERT INTO inodes SELECT inode, COUNT(*) FROM entries GROUP BY inode;

INSERT INTO broken_dirs SELECT entries.inode FROM entries
LEFT JOIN entries AS dirs ON (dirs.inode = entries.inode AND dirs.name = '.')
WHERE entries.name = '..' AND dirs.name IS NULL GROUP BY entries.inode;

INSERT INTO hardlinks SELECT inodes.inode FROM inodes
LEFT JOIN entries ON (inodes.inode = entries.inode AND (entries.name IN ('.', '..')))
WHERE nlink > 1 AND entries.name IS NULL;


Еще кстати будет перелить раздел на новый винт, который не сыпется с
околозвуковой скоростью, при том в двух экземплярах, один для
экспериментов, второй на всякий случай

Теперь ищем детей / (inode-2) и возвращаем их на место

mysql> select * from entries where inode = 2;
+-------+---------+------+------+
| inode | curdir | name | size | # комментарий, изходя из содержания
+-------+---------+------+------+
| 2 | 2392065 | .. | 12 | /var
| 2 | 6275073 | .. | 12 | /home
...
+-------+---------+------+------+
17 rows in set (0.00 sec)

mysql> select * from entries where curdir = 2392065;
+---------+---------+---------+------+
| inode | curdir | name | size |
+---------+---------+---------+------+
| 2392065 | 2392065 | . | 12 |
| 2 | 2392065 | .. | 12 |
| 2392066 | 2392065 | lock | 12 |
| 2392067 | 2392065 | run | 12 |
| 2392068 | 2392065 | backups | 16 |
| 2392069 | 2392065 | cache | 16 |
... # да, это явно /var
+---------+---------+---------+------+
15 rows in set (0.03 sec)

debugfs: clri <2>
debugfs: set_inode_field <2> mode 040755
debugfs: set_inode_field <2> links_count 17
debugfs: find_free_block 1
Free blocks found: 33869
debugfs: set_inode_field <2> bmap[0] 33869
debugfs: set_inode_field <2> blocks 8
debugfs: mkdir <2>
debugfs: ls <2>
12 (12) . 2 (12) .. 12 (4072) <2>
debugfs: unlink <2>/<2>
debugfs: unlink <2>/.
debugfs: unlink <2>/..
debugfs: ls
0 (4096) .
debugfs: ln <2> <2>/.
debugfs: ln <2> <2>/..
debugfs: ls
2 (12) . 2 (4084) ..
debugfs: ln <2392065> <2>/var
skipped
debugfs: ln <6275073> <2>/home
debugfs: ^D
livecd ~ # e2fsck /dev/hda1


А потом устраиваем большое переименование /lost+found

livecd ~ # ls /mnt/slave/lost+found | { echo "lock tables lostnfound
write;" ; sed 's,#,,;s,.*,insert into lostnfound values(&);,'; } |
mysql ext2backup

livecd ~ # { echo "select inode, curdir, name from lostnfound inner
join entries using (inode) where name != '.' and name != '..';" |
mysql ext2backup | while read inode curdir name; do
base="/mnt/slave/smth-found"; echo "mkdir -p "$base/#$curdir"; mv
"/mnt/slave/lost+found/#${inode}" "$base/#$curdir/$name""; done; }
| sed 1d > renamer.sh

livecd ~ # { echo "select lostnfound.inode as lostinode,
if(parent.name <=> null, concat('#', entries.inode), parent.name) from
lostnfound inner join entries on (entries.name = '..' and curdir =
lostnfound.inode) left join entries as parent on (parent.name != '.'
and parent.name != '..' and parent.inode = entries.inode);" | mysql
ext2backup | while read inode curdir; do base="/mnt/slave/smth-found";
echo "mkdir -p "$base/$curdir"; mv
"/mnt/slave/lost+found/#${inode}" "$base/$curdir/#$inode""; done;
} | sed 1d > renamer.sh


После чего почти все в почти читаемом виде с ФС почти восстановлено (в
lost+found у меня осталось после данной махинации процентов 15% от
первоначального объема).


debugfs-ls-scan.pl

#!/usr/bin/perl
use DBI;
use strict;
my $db = DBI->connect("dbi:mysql:database=ext2backup", "root", "")
or die $DBI::errstr;
my $inserter = $db->prepare(
"INSERT INTO `entries`(`inode`,`curdir`,`name`, `size`) VALUES (?,?,?,?)");
my $counter = 0;
my $curdir = undef;
while (<>) {
my @chunks = split / /;
foreach my $chunk (@chunks) {
$chunk =~ s/ +$//;
if ($chunk =~ /^ ?([0-9]+) (([0-9]+)) (.*)$/) {
my ($inode, $size, $name) = ($1, $2, $3);
if ($name eq ".") {
$curdir = $inode;
}
# print "($inode, $size, $name) at $curdirn";
$inserter->execute($inode, $curdir, $name, $size)
or die $DBI::errstr;
}
else {
die "Invalid chunk: $chunk"
}
}
$counter++;
if (($counter % 100) == 0) {
print "$counter lines...n";
}
}

# vim:set tabstop=4 softtabstop=4 shiftwidth=4:
# vim:set foldmethod=marker foldlevel=32 foldmarker={,}:



debugfs-mysql-schema.sql

-- MySQL dump 10.10
--
-- Host: localhost Database: ext2backup
-- ------------------------------------------------------
-- Server version 5.0.22-Debian_0ubuntu6.06.2-log

--
-- Table structure for table `broken_dirs`
--

DROP TABLE IF EXISTS `broken_dirs`;
CREATE TABLE `broken_dirs` (
`inode` int(11) NOT NULL,
PRIMARY KEY (`inode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `entries`
--

DROP TABLE IF EXISTS `entries`;
CREATE TABLE `entries` (
`inode` int(11) NOT NULL,
`curdir` int(11) NOT NULL,
`name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`size` int(11) NOT NULL,
KEY `inode` (`inode`),
KEY `curdir` (`curdir`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `hardlinks`
--

DROP TABLE IF EXISTS `hardlinks`;
CREATE TABLE `hardlinks` (
`inode` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `inodes`
--

DROP TABLE IF EXISTS `inodes`;
CREATE TABLE `inodes` (
`inode` int(11) NOT NULL,
`nlink` int(11) NOT NULL,
PRIMARY KEY (`inode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `lostnfound`
--

DROP TABLE IF EXISTS `lostnfound`;
CREATE TABLE `lostnfound` (
`inode` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
668 Прочтений •  [Восстановление ext2/ext3 раздела при помощи debugfs.ext2 (ext3 ext2 fs linux debug)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Восстановление ext2/ext3 раздела пр... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка