LINUX.ORG.RU

Как достать файл из удаленного раздела

 ,


3

2

Доброго времени суток! Из-за моих кривых рук, при попытке удалить несколько разделов при помощи fdisk,я удалил раздел с бекапом. Потом через testdisk я еще и снес таблицу разделов. К врачу схожу потом, а сейчас мне нужно достать целую папку из убитого раздела. Помогите, люди добрые. Может тема еще кому-нибудь полезной будет.

Создай его на старом месте и смонтируй, не?

относительно...

sin_a ★★★★★ ()
Последнее исправление: sin_a (всего исправлений: 1)
Ответ на: комментарий от sin_a

увы....уже нет. Восстановил раздел, а файлы просмотреть не могу: «Невозможно открыть файловую систему. Файловая система может быть повреждена. »

Zoreno ()
Ответ на: комментарий от Zoreno

Возможно раздел начинается не с того же сектора что старый, и, соответственно, искомая ФС, если таковая ещё жива.

sin_a ★★★★★ ()
#!/usr/bin/perl -w
for ($sector = 0; ; $sector++)
{
$offset = $sector * 512;
$cmd = "mount /dev/sdb /mnt/tmp -t xfs -o ro,offset=$offset";
`$cmd`;
print "sector: $sector offset: $offset\n";
die "partition found @ offset $offset!" if ($? == 0);
}

Поиск границ файловой системы с начала раздела, укажите вместо xfs тип вашей файловой системы и создайте точку монтирования /mnt/tmp.

Желательно вместо '$sector = 0;' указать приблизительно номер сектора, с которого начинался раздел.

Примерно его можно рассчитать по

cat /proc/partitions

kostik87 ★★★★★ ()

Ну так тестдиском и попробуй восстановить раздел. Могу порекомендовать прогу DMDE, я с ее помощью восстановил удаленный раздел, когда тестдиском не получилось. Но она под винду.

Dnmt ()
Ответ на: комментарий от Dnmt

Чего его восстанавливать-то, найти границы файловой системы и сделать новую запись в partition-table.

Нижнюю границу (номер сектора) начала файловой системы найдёт скрипт: Как достать файл из удаленного раздела (комментарий)

Верхнюю границу можно рассчитать на основе данных в суперблоке файловой системы или из вывода df, второй столбец показывает размер в 1К блоках, это два сектора по 512 байт.

kostik87 ★★★★★ ()
Ответ на: комментарий от doctor-ua

Пробовал уже. Скачал R-Studio для линукс, но платить деньги не стал. Максимальный размер для файлов, которые можно восстановить в демо-версии это 64 кб. Этого не хватает какбы. Потом скачал live-cd с windows xpe (да простит меня Торвальдс) с r-studio на борту, но..... это же винда. Оно зависало при попытке чтения диска. Вообщем нужно было скачать другой образ, но решился через linux все сделать. Больше знаний наберусь хотя-бы

Zoreno ()
Ответ на: комментарий от Dnmt

Вот про формат не скажу точно. Я в этом еще не особо розбираюсь. Testdisk отказываеться восстанавливать 2 из 8 разделов, хотя до возникновения проблеммы их было всего 4. Сейчас попробую определить по секторам где последний

Zoreno ()
Ответ на: комментарий от kostik87

Вывод терма:

sector: 22392 offset: 11464704
mount: wrong fs type, bad option, bad superblock on /dev/loop9,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

sector: 22393 offset: 11465216

Скрипт:

#!/usr/bin/perl -w
for ($sector = 22300; ; $sector++)
{
$offset = $sector * 512;
$cmd = «mount /dev/sda /mnt/tmp -t ext4 -o ro,offset=$offset»;
`$cmd`;
print «sector: $sector offset: $offset\n»;
die «partition found @ offset $offset!» if ($? == 0);
}

Zoreno ()
Ответ на: комментарий от Zoreno

ну что, suporblock файловой системы у вас начинается с 22393 сектора.

fdisk /dev/sda

c
p
номер раздела
номер первого сектора 22393

Посмотрите вывод tune2fs -l /dev/loop9 и найдите значение Block Count - число блоков размером 4096 байт сектор - 512 байт, в одном блоке 8 секторов.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Вообще то я остановил процесс. Просто хотел спросить причем тут /dev/loop? Сейчас уже пусть дойдет до конца работа скрипта. Но что то уже 15 минут прошло. ЧЯДНТ?

Zoreno ()
Ответ на: комментарий от Zoreno

А что должно быть ещё ?

При указании опции offset создаётся loop устройство, указывающее на определённую область диска, а затем его уже пробует смонтировать mount.

Вы правильно указали тип файловой системы и имя диска (/dev/sda) ?

Вот мой пример:

#!/usr/bin/perl -w
for ($sector = 69192016; ; $sector++)
{
$offset = $sector * 512;
$cmd = "mount /dev/sdd /mnt/tmp -t ext4 -o ro,offset=$offset 2>/dev/null" ;
`$cmd`;
print "sector: $sector offset: $offset\n";
die "partition found @ offset $offset!" if ($? == 0);
}

sector: 69192016 offset: 35426312192
sector: 69192017 offset: 35426312704
sector: 69192018 offset: 35426313216
partition found @ offset 35426313216! at ./1.pl line 8.

# losetup -a
...
/dev/loop7: [0015]:340 (/dev/sdd), offset 35426313216

# fdisk -l /dev/sdd

Disk /dev/sdd: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, всего 625142448 секторов
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8e928e92

Устр-во Загр     Начало       Конец       Блоки   Id  Система
...
/dev/sdd8        69192018   625137344   277972663+  83  Linux

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от doctor-ua

Не нужен, тем более с «виндой»

Как достать файл из удаленного раздела (комментарий)

Правда это в случае, если ТС не пытался уже писать на область диска, где был раздел с файловой системой.

Если уже пытался и повреждён superblock то даже платные утилиты не особо помогут.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от Zoreno

Если скрипт не сможет смонтировать файловую систему.

Тогда, если testdisk нашёл сектор, с которого начинался раздел, делаете:

losetup -f /dev/sda -o $((номер_сектора*512))
Смотрите номер loop устройства:
losetup -a | grep sda
И выполняете проверку файловой системы:
fsck.ext4 /dev/loop<номер>

Возможно стоит попробовать, если первая проверка не пойдёт:

fsck.ext4 -b /dev/loop<номер>

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87
sh-4.1# losetup -f /dev/sda -o $((491116217*512))
BusyBox v1.16.2 (2010-06-19 18:02:46 GMT-8) multi-call binary.

Usage: losetup [-o OFS] LOOPDEV FILE - associate loop devices
	losetup -d LOOPDEV - disassociate
	losetup [-f] - show

Options:
	-o OFS	Start OFS bytes into FILE
	-f	Show first free loop device


TestDisk 6.12, Утилита Восстановления Данных, May 2011
Christophe GRENIER <grenier@cgsecurity.org> | Перевод Войтович Андрей <andy-voit@yandex.ru>
http://www.cgsecurity.org

Диск /dev/sda - 250 GB / 232 GiB - CHS 30401 255 63
     Partition               Start                    End    Size in sectors
 D Linux                    0   1  1            48 254 63     787122
 D Linux                   48 244 34         4911 254 63   78124754
>D Linux                 4911 162 17     10990 254 63   97664977
 L Linux Swap           10991   1  1     11239 254 63    4000122
Zoreno ()
Ответ на: комментарий от Zoreno

Zoreno

sh-4.1# losetup -f /dev/sda -o $((491116217*512))
BusyBox v1.16.2 (2010-06-19 18:02:46 GMT-8) multi-call binary.

Usage: losetup [-o OFS] LOOPDEV FILE - associate loop devices
	losetup -d LOOPDEV - disassociate
	losetup [-f] - show

Options:
	-o OFS	Start OFS bytes into FILE
	-f	Show first free loop device

Обычной системы нет ? Почему в busybox выполняете ? Не уверен, что в busybox вот эта конструкция будет верной: $((491116217*512)), скорее всего он не умеет выполнять такой расчёт, но в любом случае эта запись не верна, т.к. testdisk выдал вам не абсолютный номер сектора, а номер цилиндра - 4911, головки (дорожки) - 162 и сектора - 17 на ней, с которого начинается граница раздела, так что нужно делать пересчёт.

Номер сектора, который вы должны подставить команде:

losetup -f /dev/sda -o <сектор>
Рассчитывается так:
4911*255*63+(162-1)*63+17
Оно будет равно 78905375 Вот это число и подставляйте.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Я не правильно здесь номер сектора вам посчитал, всё таки правильно будет:

echo $((4911*255*63+162*63+17))
78905438
К тому же вывод testdisk у вас странный, не должно быть что бы разделы перекрывали друг друга.

Попробуйте дождаться пока скрипт до конца отработает.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Спасибо за информацию. В дальнейшем буду знать. А сейчас удалось каким-то образом оживить тот диск с live r-studio и восстановить файлы. Мне нужно было увелечитить размер ram и сохранить сразу же результат сканирования харда на флешку. Потом программа хоть и упала, но в следующий раз я запустил ее, отрыл файл с результатами сканирования и все наладилось. Правда, я узнал, что до этого 2 таблицы разделов неправилось записались, вот и testdisk выдал некоректную информацию.

Zoreno ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.