Linux элементы таблицы разделов упорядочены не так как на диске

Обновлено: 07.07.2024

Ситуация следующая. Есть винт на 160Гб. На нем 2 раздела — 40Гб и 120Гб. С целью установки убунты как второй системы была произведена разбивка 120Гб -> 100+10+2+8.

Далее, с целью отката изменений, были объединены диски (10, 2 и 8) обратно в один 20Гб и отформатирован в NTFS. В нагрузку к этому, были проведены операции с MBR, результатом которой явилась ее смерть.

Итоги

Дураку понятно, что это начало веселой ночи.
Далее, под катом, решения вопроса.

1. Восстановление таблицы разделов

1.1. Parted magic

Данный LiveCD\USB дистрибутив, размером в 100Мб несет в себе огромную кучу софта, для работы с дисками. От разбивки, до восстановления.
Из них всех, нам нужны будут gpart, testdisk, fdisk и ms-sys.

1.2. Gpart

gpart — это утилита, сканирующая по-секторно диск на наличие разделов, которые присутствуют на носителе, но отсутствуют в таблице. В своей работе, она игнорирует уже существующую таблицу (если присутствует). Программа разаботана немецким программистом Michail Brzitwa и больше им не поддерживается. Вялотекущая разработка ведется командами Fedora и Debian. Текущая версия — 0.1h.

Утилита позволяет наиболее быстро и легко восстановить таблицу разделов, но она несет в себе несколько недостатков. Во-первых, разработка была давно заброшена, во-вторых, она иногда не совсем корректно определяет разделы.

gpart может работать в 2-х режимах. Это быстрый анализ и подробное сканирование. В некоторых случаях, первого режима достаточно. Мы же будем смотреть на второй.

gpart -if /dev/sda

-i — интерактивный режим. На каждую найденную партицию будет задан вопрос, сохранять ее, либо пропустить.
-f — полный скан диска.

После, довольно продолжительного времени, будет создан отчет с возможными разделами. Его-то и нужно обязательно максимально внимательно просмотреть перед записью.
Пример отчета (не мой):

Если все ОК, то соглашаемся на запись в таблицу разделов, скрещиваем пальцы и перезагружаемся.
В моем случае, программа определила разделы, которые были до разбивки (40 и 120), что не подходило и заставило искать альтернативные способы восстановления.

1.3. testdisk

Note: подробнее эта утилита описана в этом посте, здесь не буду повторяться.

Эта утилита аналогична предыдущей, но имеет ряд плюсов:
1. более свежая и активно поддерживается;
2. субъективно, работает намного быстрее;
3. функциональнее;
4. есть простой консольный интерфейс на базе ncurses.

Поехали!
1. в первом окне выбираем Create a new log file;
2. выбираем нужный диск (/dev/sda) -> Proceed;
3. отмечаем тип разделов как Intel;
4. выбираем Analyse current partition structure and search for lost partitions;
5. если найденные разделы верны, жмем Backup и переходим к пункту 6, есть возможность быстро пересканировать диск, если где-то ошибка (Quick search);
6. здесь уже виден зеленый список с разделами. Если ок, то записываем, иначе запускаем Deep search.;

В моем случае, результат был аналогичен результату gpart, что есть некорректен.
Запустив Deep search, выждав около 40 минут я получил ответ, от которого на душе так нехило отлегло.
Было найдено несколько партиций, которые накладывались одна на другую (это были изначальная (до манипуляций) 120Гб и новая, на 100Гб). Отметив ненужную, как удаленную, я записал таблицу на диск и перезагрузился. К счастью, все обошлось и компьютер вернулся к состоянию, который был изначально, а я мог с чистой совестью лечь спать.

3. Восстановление MBR

Для этой задачи, у нас в арсенале есть тулза ms-sys.
Сперва узнаем, что с нашей MBR.

ms-sys /dev/sda
/dev/sda has an x86 boot sector
it is unknown boot sector

Теперь видно, что на данном диске нет загрузочного сектора.
Утилита может работать с MBR различных операционных систем. Список можно получить, запустив программу без агрументов. В моем случае, необходим был от Windows 7.
Записываем MBR на диск:

ms-sys -7 /dev/sda
Windows 7 master boot record successfully written to /dev/sda

Проверяем:

ms-sys /dev/sda
it is Microsof 7 master boot record, like the one this
program creates with the switch -7 on a hard disk device.

Вот и все, нужная MBR установлена и можно перезагружаться.

У меня на ноутбуке один HD с двумя разделами (один ext3 с установленной Ubuntu 12.04 и один своп).

fdisk Дает мне Раздел 1 не запускается при предупреждении о границе физического сектора. В чем причина и нужно ли ее устранять? Если так, то как?

Это sudo fdisk -l :

Это sudo lshw связанный результат:

Это связано /etc/fstab линии:

На жестком диске есть 4096-байтовые сектора расширенного формата, к которым раздел не выровнен

Эта строка объясняет предупреждение:

  • Ваш жесткий диск является одной из более новых моделей, которая использует расширенный формат 4096 байт на физический сектор вместо более старых 512 байт / сектор.
  • Эти жесткие диски могут по-прежнему обеспечивать "устаревшую" эмуляцию 512 байт / сектор, поэтому размер логического сектора равен 512.
  • По факту, lshw показывает, что это Western Digital Drive, первая компания, которая перешла на AF. У них есть обширная страница с большим количеством информации, которую вы можете посмотреть.

Таким образом, предупреждение возникает потому, что раздел 1 начинается с логического сектора 63 = байт 32256, число не делится на 4096; на самом деле это конец 7-го физического сектора (точнее позиция 7.875:)

Теоретически, такое разделение может несколько повлиять на скорость чтения / записи ввода-вывода, в зависимости от прошивки вашего привода. Если вы довольны работой сейчас, проигнорируйте предупреждение и не нужно ничего делать. Если нет, сначала сделайте резервную копию всех важных данных, а затем используйте Gparted для перемещения раздела так, чтобы он начинался с сектора размером 4096 байт; установить начальную границу на 1 МБ - это простой способ сделать это.

  • Технически вы можете установить начало для любого логического сектора , кратного 8, например, 64 - это хорошо, 256 - это хорошо и т. Д., Но 63, 255. нет.

Для вашего нового жесткого диска сначала создайте разделы, используя gparted по вашему желанию.

Затем получите доступ к жесткому диску с помощью sudo fdisk device_name. Команда m в fdisk выведет меню справки.

Теперь удалите раздел, который выдает предупреждение, используя опцию d в fdisk.

Сначала команда d, затем номер раздела (упомянутый в предупреждении).

Теперь запишите изменения на диск с помощью команды w. Это выйдет из fdisk.

Второй раз зайти на жесткий диск, используя имя устройства sudo fdisk.

Теперь создайте новый раздел, используя свободное пространство (ранее мы удалили раздел, который будет свободным или нераспределенным пространством), используя команду n в fdisk.

В команде "Новый раздел" не вводите значения для первого и последнего секторов, просто нажмите Enter. это примет значение по умолчанию.

Теперь запишите изменения на диск с помощью команды w. Это выйдет из fdisk.

Выполните вышеуказанные шаги для всех разделов. После окончания этого формата ваши вновь созданные разделы, используя gparted. (Это то, что я сделал для меня. Никаких предупреждений в выводе fdisk -l.)

В моем домашнем NAS внезапно отказал один из дисков. Это был единственный диск не в raid, данные на котором вроде как не важные (торренты, софт и т.д., все, что можно заново выкачать из инетрнета), поэтому диск не дублировался. Ничего критичного не произошло, но мне все равно стало жалко данные, поэтому я заменил диск, а этот отложил в сторонку, чтобы попытаться восстановить информацию. У меня это получилось, поэтому решил задокументировать результат, чтобы самому не забыть и с вами поделиться.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Введение

Симптомы поломки были следующие. Заметил, что пропал сетевой диск. Зашел на сервер и увидел, что диск не инициализирован. Таблица разделов пустая. При этом, диск работал нормально и SMART ошибок не показывал. Я сразу заподозрил, что проблема именно с таблицей разделов. Данные должны быть на месте.

Дополнительная важная информация - диск был в составе mdadm массива, состоящим из одного диска. LVM не использовался.

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

Восстановление таблицы разделов

Я давно знаю утилиту testdisk. С ее помощью мне уже удавалось восстанавливать данные в linux. Она есть в репозиториях ubuntu, так что я ее установил. Далее все было просто. К сожалению, скриншотов нет, так как делал все на отдельном системнике. Расскажу на словах, что сделал:

  1. Запустил утилиту. Она вывела список всех подключенных дисков. В моем случае диск был /dev/sda.
  2. Выбрал нужный диск, указал в выборе partition table types первый вариант - Intel.
  3. Запустил сканирование. Утилита нашла разделы, которые там были ранее. Я прикинул, вроде бы то, что и должно быть.
  4. Записал таблицу разделов на диск.

Далее через fdisk я увидел разделы диска sda, в том числе тот, что меня интересовал - Linux raid autodetect.

Восстановление таблицы разделов

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

Восстановление mdadm массива

Установил в live систему mdadm:

Первым делом проверил суперблоки на восстановленном разделе:

Информация о mdadm массиве

На вид все было в порядке. Дальше рассчитывал сразу найти массив и примонтировать его.

mdadm: failed to add /dev/sda2 to /dev/md3: Invalid argument

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

md: sda2 does not have a valid v1.2 superblock, not importing!

Решение этой ошибки достаточно быстро нагуглилось.

mdadm --assemble --verbose /dev/md2 /dev/sda2 --update=devicesize

После этого массив нормально стартовал и cat /proc/mdstat показывал его состояние. Тут я думал, что мои мучения окончены и я сейчас получу свои данные. Но это тоже было еще не все.

Восстановление таблицы разделов на mdadm

Просто подмонтировать запущенный mdadm массив к системе не получилось.

Я так понял, что тут либо таблица разделов так же была уничтожена, либо файловая система. Я не знал, как был разбит на разделы сам массив, поэтому просто решил еще раз прогнать анализ таблицы разделов уже массива md2 через утилиту testdisk.

К счастью, она нашла единственный раздел на диске и восстановила его. Таким образом у меня получилось устройство /dev/md2p1. Дальше я успешно смонтировал этот раздел в /mnt и получил доступ к данным. Они все были на месте.

В заключении я к этой же системе подмонтировал сетевой диск через cifs и начал копировать данные.

Заключение

Непонятной осталась причина сбоя, и это хуже всего. На вид все в порядке, но я теряю доступ к данным. Любой другой пользователь, не разбирающийся в linux, просто потерял бы данные, либо пришлось обращаться в специализированные фирмы по восстановлению информации, а это стоит дорого. И еще, как я понял, я точно так же мог потерять доступ и к массиву из нескольких дисков. К слову, потерпевший NAS это Synology, где под капотом обычный linux и mdadm, поэтому я понимал, как надо действовать. На этом же устройстве есть несколько массивов на много Tb и если бы кто-то из них сглючил, то было бы плохо.

Несколько моих статей по восстановлению загрузки linux после различных сбоев:

Изменить тип раздела (как изменить тип раздела с оновного на расширенный)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Изменить тип раздела

Начнем по порядку.
Есть ноутбук, на нем был уставновлен Linux Debian Jessie. Диск был размечен так:

Понадобилось установить MS Windows.
Изменил размер sda6, sda2 через gparted. В резульате в конце диска пофилось свободное место - около 360 Гб.
Установил windows 7 (появилось 2 раздела: 100 Мб и 359 Гб (системный), восстановил загрузчик grub.
Решил в Windows сделать отдельный раздел для данных- сжал системный диск до 75 Гб, появилось 292 Гб свбодного места.
Пытаюсь создать раздел на свободном месте - получаю облом в виде "Диск уже содержит максимально допустимое число разделов". Через Gparted тоже не создаётся.
Сейчас разметка диска такая (немного отличается от начальной, т.к. пересоздал раздел подкачки):

Похоже что проблема в том, что у меня уже есть 4 основных раздела
sda1 /
sda2 - расширенный
sda3 - загрузочный раздел windows (который 100 Mb)
sda4 - системный раздел windows

Вопрос: как мне сделать еще 1 раздел для пользовательских данных в windows (диск D)?
Желательно без сноса всего..

Без сноса всего затруднительно. Можно попробовать подвинуть sda3 и sda4 в конец диска и расширить sda2, но удастся ли после этого восстановить загрузку винды — у меня уверенности нет.
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Допустим, винду могу снести.
Как можно подготовить диск к её установке, с учетом того что на нем останется установленный debian?
Чувствую что туплю, не пойму где. Интернеты подсказывают, что если создать основной раздел вручную и укзать его для установки windows, то дополнительный раздел 100Мб создан не будет. Если сносить винду, то удаляйте sda3 и sda4, увеличивайте sda2 (чтобы за его пределами осталось место только для установки винды), устанавливайте винду — пускай инсталлятор пересоздаёт sda3 и sda4. Но проще попробовать сначала подвинуть их, вдруг да винда сможет грузиться после этого. Переустановить-то её никогда не поздно.
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
А еще лучше -- сконвертируйте MBR в GPT и забудьте про проблемы с MBR-разметкой как забывают страшный сон.
У вас сейчас таблица выглядит так:

Для MBR 3 основных раздела и один расширенный -- предел.
Винда такого не переживёт. Она ж убогонькая, с GPT грузиться может только в режиме UEFI.
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Возможен такой вариант.
Удалить виндовые разделы 100 МБ и раздел с самой Windows. После этого через Gpated увеличить расширеный раздел /dev/sda2 на всё свободное место, оставив после этого раздела 100 МБ не распределёнными. Внутри этого большого расширеного раздела создать логический раздел для Windows и логический раздел для пользовательских данных Windows. Затем на оставшихся не распределённых 100 МБ создать основной раздел с ФС NTFS, пометить его флагом boot. Это будет раздел для загрузчика Windows. После этого устанавливать Windows. Похоже что проблема в том, что у меня уже есть 4 основных раздела
sda1 /
sda2 - расширенный
sda3 - загрузочный раздел windows (который 100 Mb)
sda4 - системный раздел windows

Именно так, причина в этом.

Вопрос: как мне сделать еще 1 раздел для пользовательских данных в windows (диск D)?
Желательно без сноса всего..

Ответ: в Вашей интерпретации - никак.
Первичных разделов не может быть больше 4 (расширенный это тоже первичный, специального типа).

Без сноса всего - переустановить Windows на заранее подготовленный раздел для неё, чтобы она не делала скрытый служебный на 100Мб.
Она так умеет, работать будет.
Но я так не рекомендую, это всё равно костыли.

Посмотрите на это под другим углом:
есть ли действительно острая необходимость в установке Windows именно на железо?
Если не играете в игрушки и не пользуетесь под Windows аппаратным 3D-ускорением, то разумнее было бы Windows установить на виртуальную машину VirtualBox.
Отлично работает, легко бекапится, можно делать снапшоты, не надо перезагружаться между ОСями.

Интернеты подсказывают, что если создать основной раздел вручную и укзать его для установки windows, то дополнительный раздел 100Мб создан не будет.
Правильно подсказывают.
Для win7 и win8 так и есть, за 10-ку не поручусь, могут быть нюансы. Без сноса всего - переустановить Windows на заранее подготовленный раздел для неё, чтобы она не делала скрытый служебный на 100Мб.
Она так умеет, работать будет.
Но я так не рекомендую, это всё равно костыли.

Так и собираюсь сделать.
Костыль потому что файлы загузчика не на отдельном разделе, а на системном? Вроде как кроме битлокера и среды восттановления (?) отдельный загрузочный раздел ни на что не влияет особо. Разве что он отделён от системного и если с последним что-то случится то через среду восстановления на отдельном разделе его можно пробовать восстановить.

Посмотрите на это под другим углом:
есть ли действительно острая необходимость в установке Windows именно на железо?
Если не играете в игрушки и не пользуетесь под Windows аппаратным 3D-ускорением, то разумнее было бы Windows установить на виртуальную машину VirtualBox.
Отлично работает, легко бекапится, можно делать снапшоты, не надо перезагружаться между ОСями.

Для себя наверно так и сделал бы, но ноутом буду пользоваться не я,эти заморочки с запуском ВМ, переключением и прочим не подойдут. Но вариант хороший.

Пока попоробовал на этой системе вручную удалить раздел в 100Мб.
Загрузочным сделал системный раздел (через diskpart поставил загрузочный флаг на системный раздел), перенёс файлы загрузчика (bcdboot %windir% c:) и записал загрузочный сектор в системный раздел (bootset /nt60 C:).
После этого перезагрузился, все было нормально.
Потом Gparted'ом удалил раздел 100Mb и передвинул системный раздел, чтобы не было промежутка в 100 Мб. После этого сменился его номер (был sda3, стал sda4 - так пределил grub). Вот это видимо было зря, windows теперь не грузится, видимо нужно где-то загрузчику сказать что номер раздела на диске изменился.
Еслм восстановить загрузчик не удастся, придется таки сносить.

Читайте также: