Как прочитать таблицу разделов 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

изменить IP-адрес

Самый простой способ отправить почту с вложением изображения из командной строки с помощью gmail?

Как я могу использовать mutt с локальным хранилищем, IMAP и мгновенным нажатием новой электронной почты?

xrdp: Super_L не работает

Как скопировать файл с одного сервера на другой с помощью промежуточного сервера?

Проверьте, нет ли часов на машинах, где я могу только отправлять задания

проблема с паролем при подаче удаленного файла в diff

Знаки акцентов i3wm / debian

Как найти версию Java в установленной папке Java?

Вопросы использования sort и comm

Заменять локальные значения sudo по умолчанию с помощью sss или ldap

Выполнение параллельных команд

NGINX: контролировать доступ к местоположению с помощью auth_basic и auth_ldap?

Использование top для просмотра процессов, выполняемых пользователем от имени sudo

Какая программа читает и выполняет /usr/share/alsa/alsa.conf и связанные с ней сценарии?

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