Я стер таблицу разделов 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 условий:
- Вы не перезагрузили свой компьютер.
- На момент замены таблицы диск использовался.
Как это работает, ядро хранит схему раздела в памяти. Если раздел используется, ему нужно знать, где начинается раздел, поэтому оно откажется перезагружать новую таблицу, пока она не перестанет использоваться.
Как это сделать:
Перейдите в /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, но я думаю, вам не повезло.