Восстановление пропавших разделов в Linux

На гипервизоре Proxmox при запуске виртуальной машины, обнаружилось, что нет ни одного раздела. Из-за чего это произошло не совсем понятно, но в итоге имеем виртуальную машину Ubuntu, которая не загружается, из-за отсутствия разделов. Отсутствие разделов выяснилось только после загрузки с LiveCD и команды fdisk -l.

Давайте восстанавливать пропавшие разделы. Операционная система особой роли не играет. Способы восстановления подойдут для любой ОС на базе Linux с загрузчиком Grub.

Порядок восстановления пропавших разделов в Linux на обычном компьютере/сервере точно такое же как и на виртуальной машине.

В современных дистрибутивах Linux используется только 2 способа загрузки:

  1. загрузчик GRUB в GPT через BIOS;
  2. загрузчик GRUB в GPT через UEFI.

Эти два способа используются только со структурой разделов GPT. MBR сейчас не используется. В первом случае GRUB работает с устройствами через BIOS (немного устаревший вариант). Во втором GRUB работает с устройствами через специальную прослойку EFI, минуя BIOS.

В моем случае был способ №1. Узнал я это только после того как временно восстановил систему из старого бэкапа.

Общие принципы

В обоих случаях нам нужно скачать дистрибутив Ubuntu LiveCD серверной или десктопной версии. С помощью него мы будем восстанавливать пропавшие разделы в Linux. Можно использовать любой другой, но в статье использовался этот.

Если разделы пропали не по вашей вине (вы не удаляли их и не форматировали), на жестком диске, где размещен образ виртуальной машины, нет BAD-блоков или других проблем, то успех решения этой проблемы очень высок.

Можно проверить жесткий диск на наличие физических проблем, запустив любую специальную утилиту. К примеру, можно запустить программу Victoria только на чтение.

Восстанавливаем структуру ФС

Это теоретический раздел и вводить команды в консоль будем в следующих разделах.

При запуске команды fdisk -l мы не видим ни одного раздела. Если мы создадим разделы на диске точь в точь как это было ранее, то ОС запустится. В моем случае был старый бэкап, который я восстановил и увидел как была размечена файловая система. Примерно так:

fdisk -l
...
Device		Start	End		Sectors		Size	Type
/dev/sda1	2048	4095		2048		1M	BIOS boot
/dev/sda2	4096	830078125	830074030	395.8G	Linux filesystem

Здесь мы видим, используется GPT. Первый раздел имеет 1Мб с меткой bios_boot. Загрузчик в таком случае ставится физически на второй раздел в директорию /boot/.

Запоминаем все цифры и воссоздаем разметку дисков вручную. При этом не форматируем разделы. Это важно.

Если точных данных у вас нет и Вы только примерно представляете структуру (сначала sda1 с BIOS boot, а потом sda2 с основным разделом системы), то размечаете первый раздел как на листинге выше. Это сработает, так как этот раздел создается автоматически при установке ОС с одинаковыми параметрами.

Файловая система EXT 3/4 устроена так, что если мы даже создадим один раздел от начала первого и до конца второго, то вы сможете увидеть его содержимое. Восстановить загрузку не получится, а получить доступ к данным — да.

Установка загрузчика GRUB в GPT через BIOS

При этом варианте загрузки необходимо иметь первый раздел /dev/sda1 размером 1Mb с флагом bios_grub. Этот раздел должен быть обязательно первым.

Создаем первый раздел:

sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-167770000, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (239616-167770000, default = 167770000) or {+-}size{KMGTP}: +1Mb
Hex code or GUID (L to show codes, Enter = 8300): EF02
Changed type of partition to 'BIOS boot partition'
Command (? for help): w

Таким способом восстановили первый раздел. Далее второй:

sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (2-128, default 2): 2
First sector (4096-167770000, default = 4096) or {+-}size{KMGTP}: 4096
Last sector (239616-167770000, default = 167770000) or {+-}size{KMGTP}: 830078125
Hex code or GUID (L to show codes, Enter = 8300): 8300
Command (? for help): w

Если не знаете чему должен быть равен Last sector, то оставляете значение по умолчанию.

Если вы изначально знали точные размеры разделов (как в моем случае), то при следующей загрузке у Вас запустится ОС. Если система не запустилась, то необходимо переустановить загрузчик GRUB.

Для этого устанавливаем дополнительный пакет:

sudo apt install grub2-common

И далее устанавливаем сам загрузчик:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev/sda1 /mnt/boot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo chroot /mnt
sudo grub-install /dev/sda

Здесь подключаем все нужные папки и через chroot ставим GRUB.

После перезагрузки система запустится.

Установка загрузчика GRUB в GPT через UEFI

Если для загрузки Linux используется EFI, то восстановление похожее как в предыдущем случае. Есть небольшие исключения: специальный раздел должен быть =100Mb и отформатирован в FAT32 с установленным флагом esp. Раздел можно сделать последним. Порядок не важен. Чаще всего EFI — это первый раздел. Именно в этом случае важно знать первоначальную разметку диска до аварии.

sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-167770000, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (239616-167770000, default = 167770000) or {+-}size{KMGTP}: +100Mb
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'ESP partition'
Command (? for help): w

Восстанавливаем второй раздел:

Второй раздел
sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (2-128, default 2): 2
First sector (25600-167770000, default = 25600) or {+-}size{KMGTP}: 25600
Last sector (239616-167770000, default = 167770000) or {+-}size{KMGTP}: 830078125
Hex code or GUID (L to show codes, Enter = 8300): 8300
Command (? for help): w

Далее устанавливаем загрузчик GRUB в EFI раздел. Для этого устанавливаем нужные пакеты:

sudo apt install grub-efi efibootmgr

И далее устанавливаем сам загрузчик:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev/sda1 /mnt/boot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo chroot /mnt
sudo grub-install /dev/sda

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

Теги:

Комментарии






Интересное
Важное событие IT
Создание Cisco
Создание Cisco
Узнать подробнее
Оглавление
  1. Общие принципы
  2. Восстанавливаем структуру ФС
  3. Установка загрузчика GRUB в GPT через BIOS
  4. Установка загрузчика GRUB в GPT через UEFI