👁 215

Пошаговое руководство: настройка программного линейного RAID 0 в Linux

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

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

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

Создание линейного массив RAID

Я добавил два виртуальных диска (/dev/sdb и /dev/sdc) к моей виртуальной машине для демонстрации этой статьи. Пока на этих дисках нет доступных разделов.

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    4G  0 disk
sdc               8:32   0    4G  0 disk
sr0              11:0    1 1024M  0 rom

Важные правила разметки

Вот некоторые моменты, которые следует помнить при разбиении.

  • Если вам не требуется автоопределение и вы планируете использовать целые диски в качестве членов массива, вам не нужно разделять диски-участники по отдельности.
  • Установите для разделов тип Linux Raid Auto (0xFD), если вы хотите, чтобы ядро автоматически запускало массивы во время загрузки. В противном случае оставьте их как Linux (0x83).
  • Массивы RAID-0 и линейные RAID-массивы могут содержать разделы разного размера без потери места на диске. Помните, что когда меньшие диски, принадлежащие RAID-0, заполняются, чередуются только оставшиеся диски. Таким образом, вы можете увидеть переменную производительность на RAID-0 с дисками-участниками разного размера по мере заполнения массива.
  • Использование согласованных дисков настоятельно рекомендуется при работе с любым нелинейным RAID-массивом.

Разметка с помощью fdisk

Вам не нужно разбивать диски перед их использованием в массиве, но разбиение на разделы дает несколько преимуществ.

  • Разбиение на разделы необходимо, если вы хотите, чтобы ядро автоматически запускало массивы, потому что драйвер md использует тип раздела для идентификации дисков-членов.
  • Устройства md не поддерживают разбиение на разделы напрямую, но в некоторых случаях наличие файловой системы, охватывающей весь массив, нежелательно. Использование программного RAID для системных разделов означает, что необходимы разделы меньшего размера. В конце концов, вы же не хотите, чтобы /var или /boot охватывали весь массив.

Далее мы начнем создавать разделы на наших дисках /dev/sdb и /dev/sdc с помощью fdisk.

[root@node1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbea244e4.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-8388607, default 2048): ⇐ Я нажал Enter, оставив значение по умолчанию
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): ⇐ Я нажал Enter, оставив значение по умолчанию
Using default value 8388607
Partition 1 of type Linux and of size 4 GiB is set

Command (m for help): tИзменить тип раздела
Selected partition 1
Hex code (type L to list all codes): lСписок доступных типов разделов

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): fdИзмените тип раздела выбранного раздела на fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): wСохраните изменения
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Далее мы повторим те же шаги для /dev/sdc

[root@node1 ~]# fdisk /dev/sdс
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbea244e4.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-8388607, default 2048): ⇐ Я нажал Enter, оставив значение по умолчанию
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): ⇐ Я нажал Enter, оставив значение по умолчанию
Using default value 8388607
Partition 1 of type Linux and of size 4 GiB is set

Command (m for help): tИзменить тип раздела
Selected partition 1
Hex code (type L to list all codes): lСписок доступных типов разделов

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): fdИзмените тип раздела выбранного раздела на fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): wСохраните изменения
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Обновите таблицу разделов в ядре

[root@node1 ~]# partprobe

Теперь проверьте доступные разделы на вашем узле и проверьте изменения. Итак, теперь у нас есть два новых раздела /dev/sdb1 и /dev/sdc1 для настройки программного рейда линейного режима.

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    4G  0 disk
└─sdb1            8:17   0    4G  0 part
sdc               8:32   0    4G  0 disk
└─sdc1            8:33   0    4G  0 part
sr0              11:0    1 1024M  0 rom

Создайте линейный программный RAID

Чтобы создать программный рейд в линейном режиме, выполните приведенную ниже команду.

[root@node1 ~]# mdadm -Cv -llinear -n2 /dev/md0 /dev/sd{b,c}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

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

# mdadm --create --verbose --level=linear --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1

Здесь,

-C, --create
Create a new array.

-v, --verbose
Be more verbose.

-l, --raid-level
Select the RAID level: linear, 0, 1, 4, or 5.

-n, --raid-disks
Set the number of member disks in the array.

mdadm автоматически активирует вновь созданные линейные массивы рейдов. Информация о массиве и его дисках теперь доступна через псевдофайл /proc/mdstat.

[root@node1 ~]# cat /proc/mdstat
Personalities : [linear]
md0 : active linear sdc1[1] sdb1[0]
      8380416 blocks super 1.2 0k rounding

unused devices: <none>

Создаем файловую систему

Затем создайте файловую систему на новом программном RAID-массиве. Мы создадим файловую систему ext4 на нашем линейном рейд-массиве.

[root@node1 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2095104 blocks
104755 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2145386496
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Создаем точку монтирования

Создайте точку монтирования для доступа к программному рейд-массиву.

[root@node1 ~]# mkdir /linear_raid

Затем смонтируйте массив рейдов в созданный каталог.

[root@node1 ~]# mount /dev/md0 /linear_raid/

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

[root@node1 ~]# df -h /linear_raid/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        7.8G   36M  7.3G   1% /linear_raid

Затем добавьте запись для массива в файл /etc/fstab, чтобы он автоматически монтировался при перезапуске системы.

[root@node1 ~]# tail -n 1 /etc/fstab
/dev/md0     /linear_raid     ext4    defaults     0 0

Проверьте изменения программного рейда

После перезагрузки проверьте статус рейда

[root@node1 ~]# cat /proc/mdstat
Personalities : [linear]
md0 : active linear sdc1[1] sdb1[0]
      8380416 blocks super 1.2 0k rounding

unused devices: <none>
[root@node1 ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jun 10 16:28:24 2019
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jun 10 16:32:08 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : node1.golinuxcloud.com:0  (local to host node1.golinuxcloud.com)
              UUID : cdde32cb:6150eddb:35ab33ee:faba0154
            Events : 17

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

Если есть вопросы задавайте их в комментариях. Понравилась статья? Расскажите о ней друзьям в социальных сетях.