LINUX.ORG.RU

удаление/восстановление суперблоков RAID

 ,


2

3

Допустим есть RAID состоящий из двух разделов sda1, sdb1.

Удаление массива осуществляется затиркой суперблоков:
# mdadm --zero-superblock /dev/sda1
# mdadm --zero-superblock /dev/sdb1

Как сделать резервную копию суперблоков, на случай их восстановления?

Ответ на: комментарий от anonymous

то что dd это понятно, а конкретнее сколько бит и сколько раз?

предполагаю, что будет примерно так, но лучше бы знать это точно:
dd if=/dev/sda1 of=~/backup.img bs=512 count=1

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

В man md есть размеры и расположение суперблоков.

anonymous
()

в мане такое есть

mdadm --grow /dev/md4 --level=6 --backup-file=/root/backup-md4
The array /dev/md4 which is currently a RAID5 array will be converted to RAID6. There should normally already be a spare drive attached to the array as a RAID6 needs one more drive than a matching RAID5.

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

Про опцию --backup-file в мане написано следующее:

This is needed when --grow is used to increase the number of raid-devices in a RAID5 if there are no spare devices available. See the section below on RAID_DEVICE CHANGES. The file should be stored on a separate device, not on the raid array being reshaped.

Все что понял, что эта опция используется совместно с опцией --grow, при расширении или уменьшении массива, вроде подстраховки. Но как это поможет при затирке суперблоков на разделах?

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

то что dd это понятно, а конкретнее сколько бит и сколько раз?

Зависит от версии метаданных. В одних версиях расположены в начале диска, в других - в конце

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

Version : 1.2

Вроде как сначала. Так как должна выглядеть команда, чтобы скопировать только суперблок и ничего лишнего?

man md мне ничего не дал.

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

man md мне ничего не дал.

Попробуй читать, а не ждать, пока он сам тебе что-то даст. Раздел «MD METADATA».

anonymous
()
Ответ на: комментарий от Deleted

по вашей ссылке:

Version 1.2 - 4K from the beginning of the device

man md раздел «MD METADATA» дал следующее:

The new format — known as version 1 — has a superblock that is normally 1K long, but can be longer. It is normally stored between 8K and 12K from the end of the device, on a 4K boundary, though variations can be stored at the start of the device (version 1.1) or 4K from the start of the device (version 1.2). This metadata format stores multibyte data in a processor-independent format and supports up to hun‐dreds of component devices (version 0.90 only supports 28).

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

Получается команда выглядит следующим образом?
dd if=/dev/sda of=~/backup.img bs=4096 count=1

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

Положение суперблока определяется относительно блочного устройства. Этим устройством может быть как диск без таблицы разделов (/dev/sda), так и раздел (/dev/sda1), в зависимости от того, поверх чего создавался массив.

Для метаданных версии 1.2 команда должна выглядеть примерно так:

dd if=/dev/sda skip=4 count=1 bs=1024 of=~/backup.img

Т.е. в начале блочного устройства идет отступ в 4 килобайта, потом 256 байт суперблока, а потом еще 768 байт суперблока для секции «Device-Roles», в которой реально используется 2*N байт (N — количество устройств в массиве), а остальное просто зарезервировано для ровного счета. С метаданными версии 1.1 тоже самое, только без отступа в 4К в начале, т.е. в команде не нужно указывать skip=4.

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

Огромное спасибо за подробный ответ! Завтра попробую убить и восстановить массив - о результатах отпишусь.

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

Использовал след. массив:

sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jul  2 17:56:41 2016
     Raid Level : raid1
     Array Size : 41908224 (39.97 GiB 42.91 GB)
  Used Dev Size : 41908224 (39.97 GiB 42.91 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Thu Jul 14 08:20:51 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : server:system  (local to host server)
           UUID : 685ff3d0:89c5ec63:0c6e1281:fe6c5b5b
         Events : 130

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

Сделал резервную копию суперблоков:

sudo dd if=/dev/sdb1 of=~/sdb1.superblock skip=4 bs=1024 count=1
sudo dd if=/dev/sdc1 of=~/sdc1.superblock skip=4 bs=1024 count=1

Остановил массив, затер суперблоки:

sudo mdadm --stop /dev/md0
sudo mdadm --zero-superblock /dev/sdb1
sudo mdadm --zero-superblock /dev/sdc1

проверил командой:

sudo mdadm --assemble --scan
cat /proc/mdstat
массив не собрался - все ок.

восстанавливал суперблоки командой:

sudo dd if=~/sdb1.superblock of=/dev/sdb1 seek=4
sudo dd if=~/sdc1.superblock of=/dev/sdc1 seek=4

проверил командой:

sudo mdadm --assemble --scan
cat /proc/mdstat
массив собрался - все ок.

Всем спасибо!

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

Спасибо за результат.

Вопрос. При восстановлении, не нужно указывать bs=1024: sudo dd if=~/sdb1.superblock of=/dev/sdb1 seek=4 bs=1024 ?

Deleted
()
Ответ на: комментарий от outsider

вот мне и стало инетесно, оно действительно так заработало (и что же тогда там в md за алгоритм поиска метаданных!), или опечатка. Значит меня не проглючило. Пусть ТС скажет

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

Посмотрел по истории команд. Действительно, bs не указал, но массив почему то собрался. Думаю, что bs надо указывать однозначно. Почему сработало без bs - объяснений у меня нет...

Повторил опыт два раза (без bs) - массив не собрался.
Повторил опыт с опцией bs - массив собрался.

Отсюда, единственно-правильная команда восстановления суперблока:

sudo dd if=~/sdb1.superblock of=/dev/sdb1 seek=4 bs=1024

sukhorukov
() автор топика

А можно вопрос?

Ты вот прямо заинтриговал такой последовательностью действий.

А вопрос такой: чего и куда ты собрался восстанавливать при разрушении массива?

justAmoment ★★★★★
()
Ответ на: А можно вопрос? от justAmoment

Например, для меня, это возможно после неудачного dd if=/dev/null of=/dev/sda count=1 вместо какой-нибудь sdg-флешки.

Опять же, на системе, где есть mdraid и, особенно, несколько их, можно ненароком сделать mdadm --zero-superblock не на то устройство.

Вообще, я сторонник исчерпывающих бекапов. Никогда не знаешь, чего пригодится восстанавливать. Поэтому, вероятно, неплохо бекапить метаданные всяких luks и mdraid. И файловые системы целиком, не выбирая только ~/Documents

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: А можно вопрос? от justAmoment

Я также как и PtiCaх сторонник исчерпывающих бекапов. Как известно мир делится на тех кто не делает бекапы, и тех кто уже делает, исчерпывающие бекапы...)

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