LINUX.ORG.RU
решено ФорумAdmin

Восстановить LVM PV, затёрный созданием таблицы разделов


0

1

Внезапно я оказался криворуким мудаком: вместо флешки случайно создал пустую таблицу разделов на диске (точнее, софтварном raid-1) и неформатированный раздел, целиком отданом под PV без таблицы разделов. При этом все LV, которые лежат на этом диске, смонтированы, и данные вроде бы не пострадали (но проверить весь терабайт, естественно, ещё не успел, да и не знаю, как это сделать, не пересматривать и не переслушивать же всю коллекцию). На них ничего не пишется, перемонтировал в ro, тоже нормально прошло. Перезагружаться как-то страшно.

Как бы узнать, насколько оно пострадало, и пострадало ли? Как вообще быть в таких ситуациях?

Или пора паниковать и срочно искать, куда скопировать уцелевшее? Можно разобрать рейд и копировать на освободившийся винт, но долго, и может быть я зря беспокоюсь?

98% вероятности что ничего не пострадало, потому что перед собственно данными в LVM идёт заголовок, если не ошибаюсь размером порядка пары мегабайт. Новая таблица разделов туда с лихвой влезает. По идее можно было бы попробовать воссоздать структуру LVM повозившись с «dmsetup table», но я думаю что в твоей ситуации не время осваивать что-то новое и экспериментировать, лучше действительно взять другой винт и скопировать всё туда, терабайт за ночь наверное и скопируется.

pupok ★★
()
Ответ на: комментарий от pupok

>повозившись с «dmsetup table»

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

rusty_angel
() автор топика
Ответ на: комментарий от rusty_angel

> А чуть подробнее

все эти LVM, LUKS и soft-RAID — суть элементарные надстройки над Device Mapper. Хоть ты и затёр заголовок LVM, виртуальные dm-устройства в памяти ядра ещё живы (пока не перегрузишься). Если играться с dmsetup можно выудить всю информацию об этих dm-устройствах (они живут в /dev/mapper) и попытаться сочинить новую LVM чтобы для новой LVM эти низкоуровневые устройства совпадали со старыми. Если твои LV состоят из одного PV — скорее всего это будут линейные dm, но картина может быть и более запутаной. В общем man dmsetup, но IMHO напрямую с dmsetup никто не работает, для этого и придумали LVM и т.д.

pupok ★★
()
Ответ на: комментарий от annoynimous

> Вроде бы информация о том, что диск/раздел является physical volume в lvm хранится в _конце_ диска.

нет, таки в начале, причем в текстовом виде. Где-то даже видел как кто-то обычным текстовым редактором в этом заголовке ковырялся чтобы имена PV/VG/LV менять.

pupok ★★
()
Ответ на: комментарий от pupok

Ага, то есть может получиться обойтись vgcfgrestore? А то я решил, что без особой низкоуровневой магии уже не обойтись.

rusty_angel
() автор топика
Ответ на: комментарий от rusty_angel

man vgcfgrestore

vgcfgrestore allows you to restore the metadata of VolumeGroupName from a text backup file produced by vgcfgbackup.

на сколько я понимаю vgcfgbackup ты не запускал...

pupok ★★
()
Ответ на: комментарий от no-dashi

> Для md это верно, а для LVM - не факт.

для mdadm ver 0.9 в начале, для mdadm ver 1.2 в конце, для LVM в начале.

pupok ★★
()
Ответ на: комментарий от pupok

Ага. Во-первых, запускал, естественно. Во-вторых, оно само, кажется, делается не то с какой-то регулярностью, не то каждый раз, когда что-то в конфиге меняется (при создании LV, например)

rusty_angel
() автор топика
Ответ на: комментарий от rusty_angel

но это не всё. Сами PV — это разделы HD, а таблицу разделов ты ведь тоже уничтожил. И пока таблица разделов не восстановлена, запускать vgcfgrestore категорически не стоит.

pupok ★★
()
Ответ на: комментарий от rusty_angel

Вот именно по этому лучше создавать таки таблицу разделов с единственным разделом а уже его запихивать в raid1.

CyberTribe ★★
()

В общем, делать надо так:

— Найти бекап (скорее всего, что-то есть в /etc/lvm/backup или /etc/lvm/archive, но лучше самому заранее озаботиться), из него вытащить UUID потерянного PV

— заново создать PV, данные это не затрёт, только метаданные в начале диска: pvcreate -u $uuid /dev/$disk

— восстановить конфиг с помощью vgcfg restore -f $backup_file $vg_name

— перезагрузиться.

rusty_angel
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.