Я просто случайно стер все разделы не с того диска.
/dev/sda
— это загрузочный диск, и /dev/sdb
это новый диск, который я пытаюсь настроить как зеркало RAID.
Я случайно ошибся и в итоге удалил таблицу разделов на /dev/sda
, а не на /dev/sdb
.
Система все еще работает, поэтому она использует кэшированную где-то таблицу разделов.
Могу ли я восстановить таблицу разделов или хотя бы просмотреть ее, чтобы можно было воссоздать разделы именно там, где они были?
fdisk /dev/sda -l
не создает разделов.
Да, я чувствую себя умным.
решение1
Ядро постоянно хранит таблицу разделов в кэше (если явно не указано перезагрузить, а это невозможно сделать, если некоторые разделы используются). Поэтому вы в безопасности, пока не перезагрузитесь (или не укажете ядру работать с данными, которые не отражают истинное содержимое диска; например, если вы уже активировали mdraid, он мог уже записать свои метаданные на диск).
Если у вас естьдо настоящего временирезервную копию вашего загрузочного сектора (первые 512 байт), вы можете восстановить ее ( cat boot-sector-backup >/dev/sda
— убедитесь, что размер восстанавливаемого файла составляет ровно 512 байт). Ваша установка загрузчика могла создать резервную копию загрузочного сектора, но если она была обновлена или вы переразметили разделы с тех пор, она не будет актуальной. Не восстанавливайте резервную копию, которая может быть устаревшей.
Информация ядра о разделах доступна через /sys/class/block/sda/sda*
. В каталоге для каждого раздела ( sda1
, sda2
, и т.д.):
start
содержит смещение начала раздела в секторах по 512 байт.size
содержит размер раздела в секторах по 512 байт (за исключением расширенного раздела).
Если у вас есть разделы с номерами 5 и выше, то они являются логическими разделами (см.В чем разница между «расширенным» разделом и «логическим» разделом?), содержащийся внутри расширенного раздела. Существует один расширенный раздел (или ни одного), и это один из разделов 1–4. Файл size
не содержит размер расширенного раздела, поэтому сначала нужно его определить; он должен быть достаточно большим для всех логических разделов и не должен включать в себя какие-либо основные разделы (другие разделы с номерами 1–4).
Запустите fdisk /dev/sda
. Используйте u
для переключения единиц измерения на секторы. Создайте разделы ( n
) с правильным смещением и размером (как указано в подсказке, укажите +
перед количеством секторов, когда дело доходит до размера), начиная с расширенного раздела.
Используйте p
для проверки правильности таблицы разделов. Если некоторые из этих разделов не являются разделами данных Linux, используйте t
для установки их типа ( 82
для подкачки Linux, c
для раздела Windows FAT32, 7
для раздела Windows NTFS). Если у вас есть загрузочный раздел DOS/Windows, установите его флаг загрузки ( a
).
Еще раз проверьте, что вывод выглядит правильно, затем нажмите w
, чтобы сохранить новую таблицу на диск.
Сохраните содержимое /sys/class/block/sda/ in a tar archive on a USB stick. Then reboot from a removable media. **After rebooting, if the partition table you created is not correct, you risk massive data corruption**. So from the removable media, run
fsck -n (don't forget the
-n ) to check the consistency of the filesystems on each partition (don't use
mount`, что сработает только в том случае, если смещение будет правильным, и может повредить диск (даже в режиме только для чтения, поскольку он запишет журнал), если смещение будет правильным, а размер - нет).
Если fsck не находит файловой системы, вы неправильно указали смещение раздела. Если fsck сообщает об ошибках, скорее всего, вы неправильно указали размер раздела.Пока вы не записали данные на диск, вы все равно можете исправить таблицу разделов.. Если у вас нет раздела на смонтированном диске, нажатие w
заставит fdisk
ядро перечитать таблицу разделов. Как только вы правильно разместите разделы, вы сможете перезагрузиться в свою обычную систему и продолжить как обычно.
решение2
гчастьдолжно помочь вам, даже если вы перезагрузились.