Как прочитать таблицу разделов in-memory (kernel) / dev / sda?

Я случайно перезаписал таблицу разделов / dev / sda с помощью GParted ( полная версия AskUbuntu ). Поскольку я еще не перезагрузился, и моя файловая система по-прежнему отлично подходит для использования, мне сказали, что я смогу восстановить таблицу разделов из ядровой памяти. Это возможно? Если да, то как мне его восстановить и восстановить?

введите описание изображения здесь

3 Solutions collect form web for “Как прочитать таблицу разделов in-memory (kernel) / dev / sda?”

Да, вы можете сделать это с файловой системой /sys .

/sys – поддельная файловая система, динамически генерируемая драйверами ядра и ядра.
В этом конкретном случае вы можете перейти в /sys/block/sda и вы увидите каталог для каждого раздела на диске. В этих папках есть 2 определенных файла, их start и size . start содержит смещение от начала диска, а size – размер раздела. Просто удалите разделы и заново создайте их с теми же самыми пусками и размерами, что и в /sys .

Например, это то, что мой диск выглядит так:

  Device Boot Start End Blocks Id System /dev/sda1 * 2048 133119 65536 83 Linux /dev/sda2 * 133120 134340607 67103744 7 HPFS/NTFS/exFAT /dev/sda3 134340608 974675967 420167680 8e Linux LVM /dev/sda4 974675968 976773167 1048600 82 Linux swap / Solaris 

И это то, что у меня есть /sys/block/sda :

 sda1/ start: 2048 size: 131072 sda2/ start: 133120 size: 134207488 sda3/ start: 134340608 size: 840335360 sda4/ start: 974675968 size: 2097200 

Я проверил это, чтобы проверить достоверность информации после изменения таблицы разделов на работающей системе

Я сделал сценарий, чтобы помочь решить эту проблему, без ГАРАНТИИ . (но я тестировал на своей виртуальной машине)

Выполнение следующего скрипта с поврежденным HD при первом параметре: $ ./repart.sh sda

 #!/bin/bash HARDDISK=$1 PARTITIONS=$(ls -d /sys/block/${HARDDISK}/${HARDDISK}?/) echo "unit: sectors" for i in $PARTITIONS; do DEVICE=$(basename $i) START=$(cat $i/start) SIZE=$(cat $i/size) echo "/dev/$DEVICE : start=$START, size=$SIZE, type=XX" done 

Вывод – формат sfdisk. Но осторожно , этот файл должен быть изменен для использования. В расширенном типе раздела = 5 увеличьте размер, используя все логическое пространство плюс пробел между началом расширенного и началом первого логического раздела.

 unit: sectors /dev/sda1 : start=63, size=2040192, type=XX /dev/sda2 : start=2040255, size=20482875, type=XX /dev/sda3 : start=22523130, size=19197675, type=XX /dev/sda4 : start=41720805, size=2, type=XX /dev/sda5 : start=41720868, size=208782, type=XX 

Вы должны изменить тип , от XX до числа типов разделов. Поместите загрузочный раздел в первую очередь.

 unit: sectors /dev/sda1 : start=63, size=2040192, type=83, bootable /dev/sda2 : start=2040255, size=20482875, type=83 /dev/sda3 : start=22523130, size=19197675, type=fd /dev/sda4 : start=41720805, size=208845, type=5 /dev/sda5 : start=41720868, size=208782, type=82 

Применить изменения

 cat repart.sfdisk | sfdisk -f /dev/sda 

Перечитать таблицы разделов

 partprobe /sbin/blockdev --rereadpt 

Переустановите grub

 grub-install /dev/sda 

Вы пробовали тестдиск ? Он может сканировать диск и восстанавливать потерянные таблицы разделов даже после перезагрузки.

Он доступен для пакета Debian и, предположительно, для Ubuntu. Возможно, другие дистрибутивы.

Если вы загружаете gparted CD, вероятно, стоит проверить, не установлен ли он на этом.

Interesting Posts

Разблокирует ли Linux корневой раздел, когда раздел составляет около 80%?

Установка CVS на Scientific Linux

Как воспроизвести мультимедийный файл с последовательностью команд controllerа?

Не удается подключиться к другому пользователю, кроме root через SSH

файл cat для многоадресной рассылки

Рекурсивная функция bash (итератор каталогов)

Как выбрать главы учебных пособий в Uemacs

Могут ли две асинхронные команды подзаголовки безопасно записываться в общий stdout?

добавление переменной в файл в Bash не работает

Как я могу сделать PuTTY совместимым с Solaris?

Как разрешить удаленные подключения mysql через определенный интерфейс

Как заставить rx_bytes и tx_bytes выполнить сброс?

Как я могу сделать awk на Busybox обрабатывать весь вход с символом NULL между ними как одну запись?

Отформатировать содержимое файла с помощью Perl

Сортировка и резервное копирование файлов log4j

Linux и Unix - лучшая ОС в мире.