LINUX.ORG.RU

восстановление раздела ext4


0

1

Вобщем решил я винду переустановить, все сделал грамотно, после установки оной восстановил grub, и, о ужас! потерял раздел ext4 который монтировался как /home. Вместо раздела появилось unallocated пространство.
Как восстановить раздел и все данные на нем?


Можете воспользоваться testdisk, или использовать этот скрипт:

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

Создайте предварительно /mnt/tmp и укажите стартовый сектор диска, с которого начать поиск. Скрипт с разным смещением, рассчитываемым от номера сектора пробует смонтировать файловую систему.

Как только найдёт выведет на экран номер сектора, с которого начиналась граница раздела. Тогда открываете fdisk, именно fdisk, и создаёте запись об удалённом разделе указав в качестве первого сектора этого раздела найденный скриптом. Вместо sdX укажите ваш диск.

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

вся проблема в том что раздел превратился в неразмеченную область внутри расширенного раздела

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

И что, если вы не «задели» соседними разделами границы «потерянного» раздела то вам поможет скрипт, или testdisk - вытащить часть данных.

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

Меню «попробовать восстановить данные» и ничего создавать не надо. А правильный ответ выше - testdisk. Проблема скорее не в ext4, а в таблице разделов.

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

Ну тогда и пишите какой функционал вы предлагаете использовать в gparted, а то ТС возьмёт и пересоздаст файловую систему.

А правильный ответ выше ...

Я и указал testdisk и скрипт, если файловую систему не повредили.

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

Это-то да, схоронил, если найдёт начало раздела, то это будет именно начало раздела, а не что-то похожее, но вот как быть с концом раздела?

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

Читайте superblock файловой системы и рассчитывайте число блоков в файловой системе, а на их основе номер последнего сектора.

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

К примеру из вывод df после монтирвоания файловой системы или если это файловая система ext* то так:

losetup -f /dev/sdaX -o $((<first_sector>*512))
losetup -a | grep sdX
tune2fs -l /dev/loop* | grep 'Block count\|Block size'

В зависимости от числа блоков и размера блоков, он может быть и 4KB рассчитывайте число 512 байтных секторов., прибавляете рассчитанное число к первому сектору и вот у вас номер последнего сектора.

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

mount /dev/loop* /mnt/<fs>
df /mnt/<fs>

Число 1K блоков умножаете на два и вот у вас число секторов.

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