Я стер таблицу разделов с помощью gparted. Есть ли способ восстановить мой раздел?

Я стер таблицу разделов с помощью gparted. Есть ли способ восстановить мой раздел?

Я стер таблицу разделов NTFS (Windows) с помощью gparted, нажав «Устройство->Создать таблицу разделов...», а затем «Применить». Есть ли способ восстановить мой раздел NTFS?

Я попробовал использовать эту команду gpart /dev/sda и получил следующий результат:

Begin scan...
End scan.

Checking partitions...
Ok.

Guessed primary partition table:
Primary partition(1)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(2)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(3)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(4)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Что означает этот вывод? Есть ли способ восстановить?

решение1

Возможность восстановления таблицы разделов существует, но для этого необходимо соблюдение 2 условий:

  1. Вы не перезагрузили свой компьютер.
  2. На момент замены таблицы диск использовался.

Как это работает, ядро ​​хранит схему раздела в памяти. Если раздел используется, ему нужно знать, где начинается раздел, поэтому оно откажется перезагружать новую таблицу, пока она не перестанет использоваться.

Как это сделать:

Перейдите в /sys/block/sda. Внутри вы увидите каталог для каждого раздела ( sda1, sda2, и т.д.). Внутри каждого из них есть файл с именем startи size(so /sys/block/sda/sda1/start). Если вы пересоздадите свою таблицу разделов, используя эти точно такие же начальные расположения и размеры, то все будет в порядке.

Обратите внимание, что он не сохраняет тип раздела. Linux не заботится об этой информации. Поэтому после пересоздания вам придется вспомнить, какой тип раздела был установлен (NTFS или какой-то другой).


Пример

Оригинальный диск:

# fdisk -l /dev/sdc

Диск /dev/sdc: 8006 МБ, 8006926336 байт, 15638528 секторов
Единицы = сектора 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт/512 байт
Идентификатор диска: 0x000ce29c

   Устройство Загрузка Начало Конец Блоки Идентификатор Система
/dev/sdc1 2048 2099199 1048576 83 Линукс
/dev/sdc2 2099200 15638527 6769664 83 Линукс
# монтирование | grep sdc
/dev/sdc2 на /mnt/tmp тип xfs (rw)
# кот /mnt/tmp/world
привет

Очистка таблицы разделов

# fdisk /dev/sdc
Добро пожаловать в fdisk (util-linux 2.22.2).

Изменения останутся только в памяти, пока вы не решите их записать.
Будьте осторожны перед использованием команды записи.


Команда (m для помощи): d
Номер раздела (1-4): 1
Раздел 1 удален

Команда (m для помощи): d
Выбранный раздел 2
Раздел 2 удален

Команда (m для помощи): p

Диск /dev/sdc: 8006 МБ, 8006926336 байт, 15638528 секторов
Единицы = сектора 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт/512 байт
Идентификатор диска: 0x000ce29c

   Устройство Загрузка Начало Конец Блоки Идентификатор Система

Команда (m для помощи): w
Таблица разделов была изменена!

Вызов ioctl() для повторного чтения таблицы разделов.

ВНИМАНИЕ: Повторное чтение таблицы разделов завершилось ошибкой 16: Устройство или ресурс занят.
Ядро все еще использует старую таблицу. Новая таблица будет использоваться в
при следующей перезагрузке или после запуска partprobe(8) или kpartx(8)
Синхронизация дисков.

Обратите внимание, что он все еще смонтирован и доступен:

# кот /mnt/tmp/world
привет

Получить смещения

# cd /sys/class/block/sdc

# лс
выравнивание_смещение устройство@ события_опрос_мсек питание/ ведомые устройства/
bdi@ discard_alignment ext_range очередь/ sdc1/ статистика
возможности событий держатели/ диапазон sdc2/ подсистема@
dev events_async inflight съемный размер uevent

# cat sdc1/старт
2048

# cat sdc1/размер
2097152

# cat sdc2/старт
2099200

# cat sdc2/размер
13539328

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

# fdisk /dev/sdc
Добро пожаловать в fdisk (util-linux 2.22.2).

Изменения останутся только в памяти, пока вы не решите их записать.
Будьте осторожны перед использованием команды записи.


Команда (m для помощи): n
Тип раздела:
   p первичный (0 первичный, 0 расширенный, 4 свободный)
   е расширенный
Выбрать (по умолчанию p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый сектор (2048-15638527, по умолчанию 2048): 2048
Последний сектор, +sectors или +size{K,M,G} (2048-15638527, по умолчанию 15638527): +2097151
Раздел 1 типа Linux и размером 1 ГиБ установлен

Команда (m для помощи): n
Тип раздела:
   p первичный (1 первичный, 0 расширенных, 3 свободных)
   е расширенный
Выбрать (по умолчанию p): p
Номер раздела (1-4, по умолчанию 2): 2
Первый сектор (2099200-15638527, по умолчанию 2099200): 2099200
Последний сектор, +sectors или +size{K,M,G} (2099200-15638527, по умолчанию 15638527): +13539327
Раздел 2 типа Linux и размером 6,5 ГиБ установлен

Команда (m для помощи): p

Диск /dev/sdc: 8006 МБ, 8006926336 байт, 15638528 секторов
Единицы = сектора 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт/512 байт
Идентификатор диска: 0x000ce29c

   Устройство Загрузка Начало Конец Блоки Идентификатор Система
/dev/sdc1 2048 2099199 1048576 83 Линукс
/dev/sdc2 2099200 15638527 6769664 83 Линукс

Команда (m для помощи): w
Таблица разделов была изменена!

Вызов ioctl() для повторного чтения таблицы разделов.

ВНИМАНИЕ: Повторное чтение таблицы разделов завершилось ошибкой 16: Устройство или ресурс занят.
Ядро все еще использует старую таблицу. Новая таблица будет использоваться в
при следующей перезагрузке или после запуска partprobe(8) или kpartx(8)
Синхронизация дисков.

!!Обратите внимание, что при указании последнего сектора мы используем размер - 1.!!

Проверка

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

# размонтировать /mnt/tmp/

# частьпроба /dev/sdc

# монтируем /dev/sdc2 /mnt/tmp

# кот /mnt/tmp/world
привет

решение2

Вы можете попробовать использоватьтестдискдля восстановления таблицы разделов. Testdisk прочитает поверхность диска и попытается определить, где начинаются и заканчиваются разделы.

решение3

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

решение4

Если вы случайно знаете размеры диска NTFS, вы «возможно» сможете сбросить их с помощью fdisk или parted, но я думаю, вам не повезло.

Связанный контент