[Solved!] Восстановить таблицу разделов

stm7922213

Всем привет !
История проблемы:
На диске имелись следующие разделы:
1) с winXp (возможно с ещё одним маленьким boot-разделом, не помню), -> ntfs
2) с данными -> ntfs
3) extended с тремя (или двумя, точно не помню) логическими подразделами для линукса:
 3.1 / -> ext4
 3.2 /home -> ext4
 3.3 swap
Что делали:
На 1 раздел переставляли винду,
после чего ситуация стала следующая (вывод fdisk -l):
(загрузился с liveCD убунты 10)
   Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 7 HPFS/NTFS
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 12748 102294528 7 HPFS/NTFS
/dev/sda3 12749 34971 178506247+ 7 HPFS/NTFS
/dev/sda4 34973 38913 31656052 5 Extended
/dev/sda5 38392 38913 4192933+ 82 Linux swap / Solaris
т.е. линуксовский основной раздел стараниями винды благополучно превратился в неразмеченную область
Не понимаю, как это произошло - то ли руки совсем кривые, то ли карма плохая

Как я понимаю, данные там все остались, но поломалась таблица вот этого самого раздела.
Либо просто эта убунта не видит этот раздел почему-то (надежда), ещё проверю это.
Программа максимум - восстановить "всё как было", т.е. чтобы вернулись линуксовские разделы, там я уж граб поправлю как-нибудь
Программа минимум - вытащить оттуда все данные, коих немного, но жалко терять.
Перед всеми манипуляциями хотелось бы всё же сделать бекап всего этого раздела (dd что-то не сработал). Ведь лучше поздно, чем никогда.?
Господа телепаты, помогите, пожалуйста, хоть в какую сторону копать надо, потому что я, в принципе, нуб )
----
Итак, программа-максимум выполнена. Много интересного прочитал, спасибо всем :)
Краткий итог для тех, кому интересно, и для тех, кто может быть столкнётся с подобной проблемой:

Бэкап с помощью dd, как советовал :
Во-первых я бы сделал fdisk -lu /dev/sda, чтобы посмотреть, с каких точно секторов начинаются разделы и пустое место.
Во-вторых backup с помощью dd if=/dev/sda bs=512 skip=xxx of=extended.backup, где xxx номер сектора, с которого начинается sda4.
-
Всё просто, fdisk -u даёт адрес как раз в секторах
Копируется долго, однако.
-
После того, как не помогли fsck.ext4 и parted, я решил посмотреть, что ещё интересного умеет testdisk.

Во-первых, нужно было проделать deep search, который на моих 320 гб делался 1,5-2 часа. Он находил недостающие разделы и позволял посмотреть файлы на них. Прямо здесь можно сделать бэкап, но для этого нужно "скрыть удалённые файлы" в меню тестдиска, чтобы он скопировал только хорошие файлы. Он не просто их прячет от взора пользователя, но ещё и не копирует, что очень приятно. Иначе это может привести к каким-то безумным вложенным папкам с удалёнными когда-то частями файлов. После копирования миллиона с лишним файлов на 50 ГБ я пристрелил его и начал заново. До конца вложения я так и не дошёл, хотя путь занимал уже 3 строчки в консоли :)
Далее я сделал скрин всей этой кухни, запомнив, из каких разделов я копировал файлы.
Вообще тут нужно было запомнить _все_ хорошие разделы, которые надо сохранить, но я осознал это не с первого раза, увы.

После этого можно вручную вбить, какие разделы мы хотим видеть на диске.
Для уже готовых - вроде data можно просто поставить тип: primary я ставил, т.к. всего 4 штуки было, было бы больше - не знаю тут, что делать, возможно аналогично бы всё решилось - extended+logical. Но я решил все сделать основными.
Потом можно просто добавить разделы, ткнув А - там вводим адрес в C/H/S, который в табличке на скрине, тип и всё остальное - и вуаля, раздел готов.
Хотя, похоже, что можно было просто сделать их зелёненькими, чтобы буква стояла и этого было бы достаточно. Но в виду неинформативности меню я тупил.
Тут главное ничего не забыть, а то придётся ещё раз всё это делать.

После перезагрузки все 4 раздела стали видны с лайвсиди, что уже было победой.
Потом переставил граб и всё, готово, линух загрузился.
Данные на месте.

YUAL

 
ubuntu:~$ sudo dd if=/dev/sda4 of=/media/hdd/linuxextended.img 2+0 records in 2+0 records out 1024 bytes (1.0 kB) copied, 0.00048386 s, 2.1 MB/s
на сколько я понимаю dd не умеет копировать разделы диска рекурсивно. По сути он у тебя скопировал таблицу разделов этого девайса. Чем можно скопировать неразмеченое пространство это интересно. Я бы для начала создал там раздел. Ничего кроме первых 512 байт это не должно задеть. Правда если там 2 раздела, то границу между ними хз как найти.
P.S. поддерживаю предыдущего автора. Я тоже страюсь не иметь дел - мне есть чем заняться, кроме ковыряния компьютера.

carusya

Можно воспользоваться оберткой для dd - clonezilla. Ну или посмотреть, какую команду она выдаст для dd

stm7922213

Я бы для начала создал там раздел.
Есть шанс, что после этого станет видно данные ?
Видимо, мне надо узнать побольше про устройство разделов и иже с ними.
А если ничего не изменится, то откат назад будет таким же безболезненным ?

YUAL

ЕМНИП (а она вполне может И), то в конец раздела никакие данные не дописываются. так что если ты не будешь создавать там файловой системы (!), то откат будет просто dd if=/dev/zero of=/dev/sdтакой-то bs=512 count=1
В начале у тебя мог затереться суперблок той же виндой (кто знает что она там творит?)
Поэтому возможно придётся его поискать
fsck.ext4 -b 8193 /dev/sdчё-то-там
Ну или на этом месте не будет, то ищи ближайший.
lde --superscan -t ext2fs /dev/sdчё-то-там

dickofan

на ХиренБутЦД в свое время была софтина, которая неплохо искала утерянные разделы, названия только щас не помню

stm7922213

ЕМНИП (а она вполне может И), то в конец раздела никакие данные не дописываются. так что если ты не будешь создавать там файловой системы (!), то откат будет просто dd if=/dev/zero of=/dev/sdтакой-то bs=512 count=1
В начале у тебя мог затереться суперблок той же виндой (кто знает что она там творит?)
Поэтому возможно придётся его поискать
fsck.ext4 -b 8193 /dev/sdчё-то-там
Ну или на этом месте не будет, то ищи ближайший.
lde --superscan -t ext2fs /dev/sdчё-то-там
Если я всё правильно понял, то
Сначала я создаю там partition, без файловой системы (empty или unformatted), и потом уже ищу суперблок ? fsck.ext4 -b 8193 /dev/sdчё-то-там

oksan4ik79

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

stm7922213

Спасибо, в интернетах тоже видел, что его советовали, взял на заметку. Я просто боюсь, как бы в случае фейла какой-нибудь из прог не произошли необратимые изменения.

oksan4ik79

Я просто боюсь, как бы в случае фейла какой-нибудь из прог не произошли необратимые изменения.
Сделай полный dd на другой диск, и там экспериментируй, наживую нельзя, конечно, точно в один прекрасный момент все просрешь :)

stm7922213

Сделай полный dd на другой диск, и там экспериментируй, наживую нельзя, конечно, точно в один прекрасный момент все просрешь :)
Вот, да,
я выше писал, что неразмеченную область dd не копирует
На что, как я понял, мне посоветовали создать раздел без фс, который уже можно будет скопировать. но я буду делать это утром в любом случае, т.к. утро вечера мудренее :)
к тому же тестдиск в режиме анализа ничего не делает, поэтому посмотрю, что он скажет для начала. + если создать раздел, то тестдиск может и не сработать, похоже придётся выбирать. но опять же утром
Вдруг за это время ещё кто-нибудь ответит :)

tokuchu

я выше писал, что неразмеченную область dd не копирует
Ты не extended-раздел копируй, а весь sda — его он скопирует. Можешь даже посчитать смещение и скопировать только ту часть, что нужна.
На что, как я понял, мне посоветовали создать раздел без фс, который уже можно будет скопировать.
При создании раздела на этом неразмеченном месте, туда ничего записываться не будет, изменения будут только в таблице разделов, записанной в extended-разделе. Так что мне кажется можно без опасения создавать там раздел, если только он extended-разделы не делает рекурсивно.
к тому же тестдиск в режиме анализа ничего не делает, поэтому посмотрю, что он скажет для начала.
parted, кстати, вроде тоже умеет искать разделы:
              rescue start end
Rescue a lost partition that was located somewhere
between start and end. If a partition is found, parted
will ask if you want to create an entry for it in the
partition table.

nas1234

а "data" это метка раздела твоя была на линуксе или проставлена была тем, кто винду ставил?

stm7922213

data - метка с винды, а что ?

nas1234

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

тьфу, не туда посмотрел.

YUAL

Если я всё правильно понял, то
Сначала я создаю там partition, без файловой системы (empty или unformatted), и потом уже ищу суперблок ? fsck.ext4 -b 8193 /dev/sdчё-то-там
ну почти. кроме того, что fsck.ext4 -b 8193 /dev/sd не ищет супер блок, а чинит ФС на основании данных суперблока, адрес которого ты передаёшь -b 8193.
файловая система делает несколько таких суперблоков в разныч участках раздела. вторая команда, что я дал, как раз ищет но не чинит.

banderon

Первое, что я в таких тредах хочу сделать, это дать ссылку на .
Ну а так, в треде уже все правильные советы прозвучали.
Во-первых я бы сделал fdisk -lu /dev/sda, чтобы посмотреть, с каких точно секторов начинаются разделы и пустое место.
Во-вторых backup с помощью dd if=/dev/sda bs=512 skip=xxx of=extended.backup, где xxx номер сектора, с которого начинается sda4.
При создании раздела перед sda5 с вероятностью 90% будет сделана запись ровно в два сектора, причем в последние 66 байт каждого. Если эти сектора окажутся не внутри структуры файловой системы, то проблем не возникнет.
На мой взгляд более безопасное решение – удалить сначала sda5 из таблицы разделов, а потом добавить нужного размера новый раздел на месте утерянного. В этом случае запись будет только в первый сектор раздела sda4, и вероятность испортить файловую систему будет почти нулевая.

YUAL

dd if=/dev/sda bs=512 skip=xxx of=extended.backup
я бы только посоветовал bs ставить не 512 байт, а кусочками побольше. а то можно долго копировать
home:~# dd if=/dev/sda of=/root/temp.dump bs=512 count=80000
80000+0 records in
80000+0 records out
40960000 bytes (41 MB) copied, 0.365788 s, 112 MB/s
home:~# dd if=/dev/sda of=/root/temp.dump bs=4096 count=10000
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 0.0892464 s, 459 MB/s
Номер сектора только внимательно вычислять.

Filan

Это кэш:
# dd if=/dev/sda of=/dev/null bs=4096 count=10000
10000+0 записей получено
10000+0 записей отправлено
скопировано 40960000 байт (41 MB), 0,469714 c, 87,2 MB/c
# dd if=/dev/sda of=/dev/null bs=512 count=80000
80000+0 записей получено
80000+0 записей отправлено
скопировано 40960000 байт (41 MB), 0,0883628 c, 464 MB/c

svetaslav212

Это кэшь:
Кышь!

stm7922213

Всем спасибо за ответы !
Буду неторопясь совершать сии действа :)
Начитавшись в нете про testdisk, который тут тоже советовали, подумал, что ничего плохого в анализе диска нет, и запустил его на анализ, он смог найти линуксовые разделы, большая часть данных цела и невредима. Очень приятно, что он умеет копировать файлы с исходными именами в исходных папках. Да даже даты создания-изменения верные. Потом подробнее опишу пару нюансов.
Скопирую, посмотрю, порадуюсь и начну веселье.
апд:
dd if=/dev/sda bs=512 skip=561825241 of=/media/hdd/extended.backup
63317207+0 records in
63317207+0 records out
32418409984 bytes (32 GB) copied, 6671.48 s, 4.9 MB/s
копировалось долго, действительно
я не торопился

stm7922213

ну почти. кроме того, что fsck.ext4 -b 8193 /dev/sd не ищет супер блок, а чинит ФС на основании данных суперблока, адрес которого ты передаёшь -b 8193.
файловая система делает несколько таких суперблоков в разныч участках раздела. вторая команда, что я дал, как раз ищет но не чинит.
Раздел swap я удалил, на свободном месте создал новый раздел sda5 в 30 гб без фс.
/dev/sda4 34973 38913 31656052 5 Extended
/dev/sda5 34973 38913 31656051 83 Linux
Но дальше дело не пошло:
 

ubuntu:~$ sudo fsck.ext4 -v -n -f -b 8193 /dev/sda5
e2fsck 1.41.11 (14-Mar-2010)
fsck.ext4: Bad magic number in super-block while trying to open /dev/sda5

The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>

В других числах, которые он в мане предлагает, тоже поискал, но результат тот же.
lde не хочет работать пока.
Приплыли ?
Хотя сейчас ещё parted почитаю.
апд:
Parted тоже молчит
(parted) print                                                            
Model: ATA WDC WD3200BEVT-2 (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 1049kB 106MB 105MB primary ntfs boot
2 106MB 105GB 105GB primary ntfs
3 105GB 288GB 183GB primary ntfs
4 288GB 320GB 32.4GB extended
5 288GB 320GB 32.4GB logical

(parted) rescue
Start? 288GB
End? 320GB
(parted)

stm7922213

Всем спасибо ! :)
Программа-максимум выполнена.
В конце концов со всем справился testdisk.
Последовательность действий была примерно следующая, если кто вдруг столкнётся с той же проблемой:

Бэкап с помощью dd, как советовал :
Во-первых я бы сделал fdisk -lu /dev/sda, чтобы посмотреть, с каких точно секторов начинаются разделы и пустое место.
Во-вторых backup с помощью dd if=/dev/sda bs=512 skip=xxx of=extended.backup, где xxx номер сектора, с которого начинается sda4.
-
Всё просто, fdisk -u даёт адрес как раз в секторах
Копируется долго, однако.
-
После того, как не помогли fsck.ext4 и parted, я решил посмотреть, что ещё интересного умеет testdisk.

Во-первых, нужно было проделать deep search, который на моих 320 гб делался 1,5-2 часа. Он находил недостающие разделы и позволял посмотреть файлы на них. Прямо здесь можно сделать бэкап, но для этого нужно "скрыть удалённые файлы" в меню тестдиска, чтобы он скопировал только хорошие файлы. Он не просто их прячет от взора пользователя, но ещё и не копирует, что очень приятно. Иначе это может привести к каким-то безумным вложенным папкам с удалёнными когда-то частями файлов. После копирования миллиона с лишним файлов на 50 ГБ я пристрелил его и начал заново. До конца вложения я так и не дошёл, хотя путь занимал уже 3 строчки в консоли :)
Далее я сделал скрин всей этой кухни, запомнив, из каких разделов я копировал файлы.
Вообще тут нужно было запомнить _все_ хорошие разделы, которые надо сохранить, но я осознал это не с первого раза, увы.

После этого можно вручную вбить, какие разделы мы хотим видеть на диске.
Для уже готовых - вроде data можно просто поставить тип: primary я ставил, т.к. всего 4 штуки было, было бы больше - не знаю тут, что делать, возможно аналогично бы всё решилось - extended+logical. Но я решил все сделать основными.
Потом можно просто добавить разделы, ткнув А - там вводим адрес в C/H/S, который в табличке на скрине, тип и всё остальное - и вуаля, раздел готов.
Хотя, похоже, что можно было просто сделать их зелёненькими, чтобы буква стояла и этого было бы достаточно. Но в виду неинформативности меню я тупил.
Тут главное ничего не забыть, а то придётся ещё раз всё это делать.

После перезагрузки все 4 раздела стали видны с лайвсиди, что уже было победой.
Потом переставил граб и всё, готово, линух загрузился.
Данные на месте.

Filan

Для уже готовых - вроде data можно просто поставить тип: primary я ставил, т.к. всего 4 штуки было
На будущее - только Primary или GPT. Никаких MBR+extended.

stm7922213

На будущее - только Primary или GPT. Никаких MBR+extended.
Почему ? А если я хочу больше 4 разделов ?
На досуге почитаю про GPT...

advint

Как ты загрузчи к поставил? Это груб? Загрузился в консоль восстановления с убунтовского дистриба и оттуда набрал команду? Или для этого GUI есть?

stm7922213

Да, граб. Загрузился с лайв сиди, погуглил чуть, через консоль всё делается.
Это много где описано, в принципе, уже доводилось делать :)
Вот, например, чтоб не вдаваться в детали, восстановление используя chroot.

Filan

Почему ?
Чтобы не ловить такие глюки как сейчас.
А если я хочу больше 4 разделов ?

GPT.

yroslavasako

А первый груб умеет с него бутиться?

Filan

Не знаю - надо гуглить.
Точно умеет загрузчик фри и grub2, а первого груба у меня уже давно нигде нет.

yroslavasako

мне он больше нравится, потому что конфигурируется напрямую. А разделы я создаю lvm, а не gpt.

tokuchu

потому что конфигурируется напрямую
Что ты имеешь в виду?

yroslavasako

/boot/grub/grub.conf
А не генератор конфигов как в новом.

carusya

GPT
А икспишка ТС умеет с него бутиться?

tokuchu

/boot/grub/grub.confmenu.lst
А не генератор конфигов как в новом.
Я в новом генератором не пользуюсь. Существенное отличие только в том, что на GPT grub2 хочет себе отдельный маленький раздельчик.

yroslavasako

на mbr тоже, /boot называется. У меня 3 mbr раздела: lvm, swap и boot. Без последнего никак не обойтись, ни при первом, ни при втором грубе. Ну есть ещё вариант, когда груб ставится в специально оставленную ему неразмеченную область диска, но это по сути тот же отдельный раздел.

stm7922213

А под что кошерно делать разделы, что посоветуете ? В частности, в моём случае: win+lin.
Может мне тут ssd-шник перепадёт гигов на 60, буду кроить и перекраивать.
Думаю, на ssd можно поставить /, винду, может ещё что-нить эдакое (своп?). На харде раздел для данных в нтфс, /home, "my documents" или что там в винде вместо хоум, может отдельно /boot ?

tokuchu

на mbr тоже, /boot называется. У меня 3 mbr раздела: lvm, swap и boot. Без последнего никак не обойтись, ни при первом, ни при втором грубе. Ну есть ещё вариант, когда груб ставится в специально оставленную ему неразмеченную область диска, но это по сути тот же отдельный раздел.
Ну не совсем так. Для MBR grub 1 и 2 записывают себя куда-нибудь и драйвер файловой системы. Т.е. если нет извращений, то можно и без /boot обойтись. Возможно для grub2 в определённых рамках (по размеру кода) можно и с извращениями. Но в случае GPT, grub2 раньше тоже встраивался куда-то, но последние версии обязательно требуют себе маленький неразмеченный раздельчик, в котором конфиг и прочее нельзя записать, этим он от /boot всё же отличается.

Filan

А икспишка ТС умеет с него бутиться?
Судя по появлению нового раздела в 100Mb в начале диска - это не XP.
Т.к. "икспишка" устанавливается на один раздел.

stm7922213

Судя по появлению нового раздела в 100Mb в начале диска - это не XP.
Т.к. "икспишка" устанавливается на один раздел.
Да, сначала пытались поставить семёрку, она вроде поставилась, но до конца не настроилась.
Потом уже поверх воткнули xp.
Оставить комментарий
Имя или ник:
Комментарий: