User Tools

Site Tools


topic:mdadm_raid1

Работа с mdadm

Mdadm это утилита предназначенная для управления софтовыми raid-массивами в Linux.

С помощью mdadm можно сделать:

  • Создать (–create, -C) raid-массив и внести информацию о массиве в суперблок (Про суперблок на wiki, Про суперблок на opennet) каждого диска.
  • Собрать (–assemble, -A) ранее созданный raid-массив опираясь на информацию из супеблоков.
  • Построить (–build, -B) raid-массив не используя информацию суперблоков. Это устаревший режим работы mdadm, использовать его не надо (Про --build).
  • Мониторить состояние массива (-F, –follow, –monitor).
  • Менять (–grow, -G) состав массива, добавлять и убирать диски, менять размер.
  • Добавить один диск (-I, –incremental), что бы восстановить работоспособность массива.

Создание raid1 массива

Есть задача сделать софтовый raid1 из двух дисков.

Подготовка дисков

Находим диски которые планируется объединить в raid1, это /dev/sdb и /dev/sdс.

root@blackpc:~# fdisk -l
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
...

Disk /dev/sdb: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

С помощью программы fdisk меняем тип дисков /dev/sdb и /dev/sdс на FD (Linux raid auto).

root@blackpc:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-625142447, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-625142447, default 625142447): 625140000

Created a new partition 1 of type 'Linux' and of size 298,1 GiB.

Command (m for help): 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 or  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 ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS    
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE 
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT            

Command (m for help): t
Selected partition 1
Partition type (type L to list all types): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.

Command (m for help): p
Disk /dev/sdb: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfed3067a

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 625140000 625137953 298,1G fd 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.

В результате вывод fdisk будет примерно таким:

root@blackpc:~# fdisk -l
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
...

Disk /dev/sdb: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfed3067a

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 625140000 625137953 298,1G fd Linux raid autodetect

Disk /dev/sdc: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf813c784

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdc1        2048 625140000 625137953 298,1G fd Linux raid autodetect

Объединение дисков в массив

Для создание raid1 даем команду:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1, где:

где:

  • –create - ключ создания массива.
  • –verbose - показать подробнее процесс создания.
  • /dev/md0 - имя софтового рейда.
  • –level=1 - уровень массива
  • –raid-devices=2 - количество дисков.
  • /dev/sdb1 /dev/sdc1 - сами диски.

Вывод команды.

root@blackpc:~# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 312437888K
mdadm: automatically enabling write-intent bitmap on large array
Continue creating array? 
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Проверяем состояние массива и ждем когда он соберется.

root@blackpc:~# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0]
      312437888 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  3.3% (10455168/312437888) finish=54.6min speed=92170K/sec
      bitmap: 3/3 pages [12KB], 65536KB chunk

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

root@blackpc:~# watch -n 5 cat /proc/mdstat

В итоге примерно за час рейд собрался, все хорошо.

root@blackpc:~# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0]
      312437888 blocks super 1.2 [2/2] [UU]
      bitmap: 0/3 pages [0KB], 65536KB chunk

unused devices: <none>

Создаем и форматируем раздел на массиве

Далее с /dev/md0 действуем как с обычным диском, сначала создаем раздел на нем, потом форматируем, потом монтируем.

Сначала смотрим вывод fdisk.

root@blackpc:~# fdisk -l
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
...
Disk /dev/md0: 298 GiB, 319936397312 bytes, 624875776 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Создаем на /dev/md0 новый праймари раздел.

root@blackpc:~# fdisk /dev/md0

Welcome to fdisk (util-linux 2.27.1).
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.
Created a new DOS disklabel with disk identifier 0xe4109a7a.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-624875775, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-624875775, default 624875775): 

Created a new partition 1 of type 'Linux' and of size 298 GiB.

Command (m for help): p
Disk /dev/md0: 298 GiB, 319936397312 bytes, 624875776 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe4109a7a

Device     Boot Start       End   Sectors  Size Id Type
/dev/md0p1       2048 624875775 624873728  298G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Форматируем /dev/md0p1 в ext4.

root@blackpc:~# mkfs.ext4 -v /dev/md0p1
mke2fs 1.42.13 (17-May-2015)
fs_types for mke2fs.conf resolution: 'ext4'
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19529728 inodes, 78109216 blocks
3905460 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
2384 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: deae21b6-b555-461a-a8b7-f684361cc671
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616

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

Правим fstab для автомонтирования.

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
...
/dev/md0p1      /mnt/data1      ext4    defaults        0       0

Ломаем и чиним массив

Тестово выдернем один диск из компьтера и посмотрим что будет.
Диски стоят в корзинах, но они не хотсвап.

После того как достали диск, через некоторое время, в выводе mdstat диск sdc1 пропал.

root@blackpc:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1]
      312437888 blocks super 1.2 [2/1] [_U]
      bitmap: 2/3 pages [8KB], 65536KB chunk

Вставлем диск обратно, но т.к. он не хотсват, до перезагрузки диск в системе не появится.
После презагрузки добавляем диск в массив и массив начинает ребилдиться.

root@blackpc:~# mdadm /dev/md0 --re-add /dev/sdb1
mdadm: re-added /dev/sdb1

root@blackpc:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[0] sdc1[1]
      312437888 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.0% (177344/312437888) finish=139.6min speed=37269K/sec
      bitmap: 2/3 pages [8KB], 65536KB chunk

unused devices: <none>

Состояние массива после ребилда. все хорошо.

root@blackpc:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[0] sdc1[1]
      312437888 blocks super 1.2 [2/2] [UU]
      bitmap: 2/3 pages [8KB], 65536KB chunk

unused devices: <none>

Полезные материалы

topic/mdadm_raid1.txt · Last modified: 2021/08/12 08:35 (external edit)

Page Tools