Назад | Перейти на главную страницу

Сборка и перенос на программный рейд (mdadm) на GPT-диске, теперь невозможно собрать массив

mdadm, проблемы с gpt, нераспознанные разделы.

Упрощенный вопрос: как заставить mdadm распознавать разделы GPT?

Я пытался преобразовать / скопировать свою ОС Ubuntu 11.10 с одного диска на программный рейд 1. Я делал то же самое в прошлом, но в этом случае я добавлял диск, который был настроен для GPT, и я пытался работайте с этим, не вдаваясь в подробности.

В настоящее время у меня есть не загружающийся массив mdadm RAID 1 из / dev / md127 (его назначила ОС, и он продолжает работать). Я загружаюсь с живых USB-ключей, в настоящее время компакт-диск аварийного восстановления системы от sysresccd. Хотя gdisk и parted могут видеть все разделы, большинство утилит ОС не видят, включая mdadm. Моя основная цель - просто сделать массив рейдов доступным, чтобы я мог получить данные и начать все заново (без использования GPT).

/dev/md127

/dev/sda
 /dev/sda1 <- GPT type partition
  /dev/sda1 <- exists within the GPT part, member of md127
  /dev/sda2 <- exists within the GPT part, empty

/dev/sdb
 /dev/sdb1 <- GPT type partition
  /dev/sdb1 <- exists within the GPT part, member of md127

История:

ПУНКТ A: Исходная ОС была установлена ​​на sda (на самом деле / ​​dev / sda6). Я использовал Live USB Ubuntu, чтобы добавить sdb. Я получил предупреждение от fdisk о GPT, поэтому я использовал gdisk для создания раздела raid (sdb1) и mdadm для создания зеркала raid1 с отсутствующим диском. У меня было много проблем с этой работой (включая невозможность установить grub), но в конце концов я получил ее для загрузки с помощью grub на sda и / dev / md127 на sdb. Итак, в точке A я скопировал свою ОС с sda6 на md127 на sdb. Затем я загрузился в режим восстановления и попытался загрузить загрузчик на sdb, но это не удалось. Затем я обнаружил свою ошибку: я установил рейд на sdb вместо sdb1, по существу перезаписав раздел sdb1.

ПУНКТ Б: Теперь у меня было две копии моих данных - одна на md127 / sdb, а другая на sda. Я уничтожил данные на sda и создал новую таблицу GPT на sda. Затем я создал sda1 для массива raid и sda2 для рабочего раздела. Я добавил sda1 в массив raid и позволил ему восстановиться. md127 теперь охватывает / dev / sdb и / dev / sda1 как полностью активные и синхронизированные.

ПУНКТ C: Я снова перезагрузился в linux rescue и все еще мог получить доступ к массиву raid. Затем я удалил / dev / sdb из массива и создал / dev / sdb1 для рейда. Я добавил в массив sdb1 и дал ему синхронизироваться. Я смог без проблем смонтировать / dev / md127 и получить к нему доступ. После его завершения и / dev / sda1, и / dev / sdb1 были разделами GPT и активно синхронизировались.

ТОЧКА D (текущая): я снова перезагрузился, чтобы проверить, загрузится ли массив и загрузится ли grub. Я загрузился с живого флеш-накопителя и обнаружил, что больше не могу собирать массив raid. mdadm не видит требуемых разделов.

--
root@freshdesk /root % uname -a
Linux freshdesk 3.0.24-std251-amd64 #2 SMP Sat Mar 17 12:08:55 UTC 2012 x86_64 AMD Athlon(tm) II X4 645 Processor AuthenticAMD GNU/Linux



===
/proc/partitions and parted look good:
root@freshdesk /root % cat /proc/partitions
major minor  #blocks  name

   7        0     301788 loop0
   8        0  976762584 sda
   8        1  732579840 sda1
   8        2  244181703 sda2
   8       16  732574584 sdb
   8       17  732573543 sdb1
   8       32    7876607 sdc
   8       33    7873349 sdc1


(parted) print all
Model: ATA ST31000528AS (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size   File system  Name                Flags
 1      1049kB  750GB   750GB  ext4
 2      750GB   1000GB  250GB               Linux/Windows data


Model: ATA SAMSUNG HD753LJ (scsi)
Disk /dev/sdb: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End    Size   File system  Name        Flags
 1      1049kB  750GB  750GB  ext4         Linux RAID  raid


Model: SanDisk SanDisk Cruzer (scsi)
Disk /dev/sdc: 8066MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      31.7kB  8062MB  8062MB  primary  fat32        boot, lba


===
# no sda2, and I double the sdb1 is the one shown in parted
root@freshdesk /root % blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: UUID="75dd6c2d-f0a8-4302-9da4-792cc7d72355" TYPE="ext4"
/dev/sdc1: LABEL="PENDRIVE" UUID="1102-3720" TYPE="vfat"
/dev/sdb1: UUID="2dd89f15-65bb-ff88-e368-bf24bd0fce41" TYPE="linux_raid_member"

root@freshdesk /root % mdadm -E /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

# this is probably a result of me attempting to force the array up, putting superblocks on the GPT partition
root@freshdesk /root % mdadm -E /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 2dd89f15:65bbff88:e368bf24:bd0fce41
  Creation Time : Fri Mar 30 19:25:30 2012
     Raid Level : raid1
  Used Dev Size : 732568320 (698.63 GiB 750.15 GB)
     Array Size : 732568320 (698.63 GiB 750.15 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 127

    Update Time : Sat Mar 31 12:39:38 2012
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 1
  Spare Devices : 1
       Checksum : a7d038b3 - correct
         Events : 20195


      Number   Major   Minor   RaidDevice State
this     2       8       17        2      spare   /dev/sdb1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       0        0        1      faulty removed
   2     2       8       17        2      spare   /dev/sdb1


===

root@freshdesk /root % mdadm -A /dev/md127 /dev/sda1 /dev/sdb1
mdadm: no recogniseable superblock on /dev/sda1
mdadm: /dev/sda1 has no superblock - assembly aborted
    root@freshdesk /root % mdadm -A /dev/md127  /dev/sdb1
mdadm: cannot open device /dev/sdb1: Device or resource busy
mdadm: /dev/sdb1 has no superblock - assembly aborted

mdadm не распознает разделы, в отличие от ядра Linux. Программному массиву RAID не нужно знать или заботиться о том, какой тип разделов использует диск, потому что он просто использует блочные устройства, которые ядро ​​предоставляет для разделов. Я использую массивы mdadm на дисках GPT на нескольких компьютерах, и они отлично работают.

Описанная вами схема разделов не имеет смысла:

/dev/sda
 /dev/sda1 <- GPT type partition
  /dev/sda1 <- exists within the GPT part, member of md127
  /dev/sda2 <- exists within the GPT part, empty

/dev/sdb
 /dev/sdb1 <- GPT type partition
  /dev/sdb1 <- exists within the GPT part, member of md127

В частности, похоже, вы говорите, что sda2 расположен в sda1. Разделы не существуют внутри других разделов, и GPT является характеристикой всего дискового устройства, а не раздела. Я думаю, что вы на самом деле имеете в виду:

/dev/sda <- GPT disk
 /dev/sda1 <- member of md127
 /dev/sda2 <- empty

/dev/sdb <- GPT disk
 /dev/sdb1 <- member of md127

Однако ваш blkid вывод говорит, что /dev/sda1 в настоящее время содержит файловую систему Ext4, а не суперблок RAID - это не членом md127. Непонятно, как эта файловая система попала туда, поскольку вы сказали, что используете ее в качестве компонента RAID, но поскольку ваша история длинная и полна поворотов, я подозреваю, что могли быть моменты, когда происходили вещи, о которых вы не подозревали. получилось. Мое предложение на данный момент:

  • Соберите массив в деградированном режиме, используя только /dev/sdb1. Убедитесь, что он содержит ваши данные; если нет, проверьте, есть ли /dev/sda1 каким-то образом содержит неповрежденную файловую систему с вашими данными, иначе я надеюсь, что у вас есть резервная копия.
  • Сделайте резервную копию всех ваших данных, если у вас их еще нет.
  • Полностью протереть /dev/sda: dd if=/dev/zero of=/dev/sda bs=1M. Затем используйте gdisk для воссоздания разделов.
  • Создайте новый деградированный массив, используя только раздел на sda. Создайте в нем файловую систему и скопируйте в нее свои данные.
  • Разберите массив, использующий sdb1, и полностью стереть /dev/sdb: dd if=/dev/zero of=/dev/sdb bs=1M. Затем используйте gdisk для воссоздания раздела.
  • Добавить /dev/sdb1 в новый массив и позвольте ему синхронизироваться.

Что касается установки GRUB, это зависит от того, поддерживает ли ваш компьютер EFI (и используете ли вы его для загрузки). Если вы используете EFI, вам нужно где-то создать системный раздел EFI; он должен быть примерно 100 МБ в формате FAT32. Затем вы должны установить версию GRUB для EFI. Я не буду вдаваться в подробности по этому поводу; Загрузка EFI - это тема для отдельного вопроса.

Если ты не используя EFI для загрузки, вам необходимо создать раздел «BIOS Boot» где-нибудь на диске, на который вы будете устанавливать GRUB. (Это код типа раздела ef02 в gdisk.) Перегородка может быть крошечной; 1 МБ - это достаточно. GRUB будет использовать это для хранения загрузочного кода, который он бы записали в секторы с 1 по 62 на MBR-диске. (На диске MBR эти секторы обычно нераспределены, поскольку первый раздел обычно начинается с сектора 63, но на диске GPT таблица разделов находится в этой области.) GRUB должен автоматически заметить, что диск, на который вы его устанавливаете, содержит загрузочный раздел BIOS и помещает его загрузочный код туда, а не в секторы 1-62.