Неудача RAID 5 после отключения нескольких дисков

Вопрос или проблема

Я использую программный RAID 5 на Linux, и в процессе изменения конфигурации (с 4 до 6 устройств) несколько дисков неожиданно отключились. Сами диски в порядке, но RAID-массив находится в состоянии, которое mdadm не может исправить самостоятельно, и я не знаю, как его восстановить. Я не пробовал потенциально разрушительные методы восстановления, и маловероятно (хотя и не полностью исключено), что массив был записан в момент отключения; вероятно, файловая система на нем даже не была смонтирована, так что у меня большие надежды на восстановление при правильном подходе 🙂

(прежде чем спросите, да, я большой дурак и у меня нет резервных копий)

# uname -a
Linux Cyberdyne-Debian 6.1.0-25-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.106-3 (2024-08-26) x86_64 GNU/Linux
# mdadm --version
mdadm - v4.2 - 2021-12-30 - Debian 4.2-5

mdadm --examine для всех участников:

/dev/sda1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906762752 sectors (1862.89 GiB 2000.26 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
  Used Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : 6dd3585e:6db7833e:96bd1cdb:5a0519f4

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341967360 (1279.80 GiB 1374.17 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:02:41 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 41297aaf - correct
         Events : 66589

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 5
   Array State : A.A.AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906762752 sectors (1862.89 GiB 2000.26 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
  Used Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : 72f87daa:888164f8:dfc7f0cf:31ee54cd

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341967360 (1279.80 GiB 1374.17 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:02:41 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 153f5ceb - correct
         Events : 66589

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : A.A.AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906762752 sectors (1862.89 GiB 2000.26 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
  Used Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : 34816406:8ac2790b:9cdd3d47:13e87a09

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341967360 (1279.80 GiB 1374.17 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:02:41 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 37ae3651 - correct
         Events : 66589

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 4
   Array State : A.A.AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : 2f6b8a7e:0b60a5fc:04649248:dd5a054e

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341967360 (1279.80 GiB 1374.17 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:02:41 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : e6ddaefc - correct
         Events : 66589

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : A.A.AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdf1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906762752 sectors (1862.89 GiB 2000.26 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
  Used Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 06fac7a7:849c3cb6:b07bb763:077bf0a1

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341975040 (1279.81 GiB 1374.18 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:01:39 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 38c5f5ec - correct
         Events : 66590

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AAAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdg1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x45
     Array UUID : 35ecd13e:77bd06bd:de30f190:6b7f03b8
           Name : Cyberdyne-Debian:1  (локально для хоста Cyberdyne-Debian)
  Creation Time : Вт Сен 17 22:47:41 2024
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 3906762752 sectors (1862.89 GiB 2000.26 GB)
     Array Size : 9766737920 KiB (9.10 TiB 10.00 TB)
  Used Dev Size : 3906695168 sectors (1862.86 GiB 2000.23 GB)
    Data Offset : 264192 sectors
     New Offset : 259072 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 5b7b7ef7:7329c7b5:1aa7aad3:3d1188e5

Internal Bitmap : 8 sectors from superblock
  Reshape pos'n : 1341975040 (1279.81 GiB 1374.18 GB)
  Delta Devices : 2 (4->6)

    Update Time : Вт Сен 24 10:01:39 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 3b91c5ce - correct
         Events : 66590

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAAAAA ('A' == active, '.' == missing, 'R' == replacing)

Я нашел решение. Сначала я создал накладки для членов RAID, как описано здесь, но я сделал это ДВА ЖЕ РАЗА для каждого члена RAID. На каждой группе накладок я запустил mdadm --create --assume-clean. Одну — только с начальными 4 членами и параметрами до изменения конфигурации, а другую — со всеми 6 членами и параметрами после изменения конфигурации (учитывая новое смещение данных).

На данный момент у меня есть один массив, у которого начало оригинального массива целостно, но конец поврежден (после изменения конфигурации), и другой массив, у которого начало повреждено, а конец целостен (до изменения конфигурации), поэтому мне нужно склеить оба массива в точке пересечения, что можно сделать с помощью dmsetup.

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

Это заняло некоторое время и усилия, но все сработало.

Ответ или решение

Ваша ситуация с RAID 5 после неожиданного отключения нескольких дисков действительно сложна, но вы уже на правильном пути к восстановлению данных. Давайте рассмотрим несколько шагов, которые могут помочь в восстановлении вашего массива RAID.

1. Проверка состояния массивов

Как вы уже указали в выводе команд mdadm --examine, некоторые устройства находятся в активном состоянии, а другие могут быть помечены как отсутствующие. Это указывает на то, что в массиве RAID произошел сбой, и необходимо принять меры.

2. Создание наложений (Overlays)

Вы правильно решили использовать наложения для обеспечения безопасного доступа к данным на дисках. Создание наложений для каждого диска позволяет вам использовать их как "только для чтения". Это значительно снизит риск повреждения данных на оригинальных дисках.

3. Воссоздание массивов

Как вы уже описали, вы создали два отдельных массива с помощью команды mdadm --create --assume-clean. Это верный подход. Один массив должен представлять первоначальное состояние RAID (с 4 дисками), а другой — новое состояние (с 6 дисками). Обратите внимание на параметры, которые вы задаете, включая data offset, возникающие в результате изменений конфигурации массива.

4. Строка состояний и сшивание массивов

Теперь, когда у вас есть два работоспособных массива с разными состояниями данных, вы можете перейти к следующему этапу — сшиванию данных из двух массивов.

Сшивание массивов с помощью DM

Используйте dmsetup для создания виртуального устройства, которое объединит данные из двух массивов. Это делается путем определения диапазона секторов, который вы хотите объединить, учитывая фактическое состояние данных.
Пример команд:

# Создание логического устройства для первого массива
sudo dmsetup create original --table "0 $(<размер_вашего_первого_массива>) linear /dev/имя_диска_оригинального_массива 0"

# Создание логического устройства для второго массива
sudo dmsetup create new --table "0 $(<размер_вашего_второго_массива>) linear /dev/имя_диска_нового_массива 0"

# Объединение обоих массивов
sudo dmsetup create combined --table "0 <размер_первого> linear /dev/имя_диска_оригинального_массива 0; <размер_первого> <размер_второго> linear /dev/имя_диска_нового_массива <начальный_сектор>"

5. Восстановление данных

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

sudo mount /dev/mapper/combined /mnt

После этого проверьте данные и при необходимости выполните дополнительные действия по восстановлению.

6. Резервное копирование

Как только восстанавливаете данные, обязательно создайте резервные копии! Это чрезвычайно важно, чтобы избежать подобных ситуаций в будущем.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...