ПРОГРАММНЫЙ RAID

Thank you for reading this post, don't forget to subscribe!

В высо­ко­на­гру­жен­ных про­из­вод­ствен­ных сер­ве­рах жест­кие дис­ки и SSD под­клю­че­ны не по отдель­но­сти, а объ­еди­не­ны в спе­ци­аль­ные мас­си­вы, внут­ри кото­рых дан­ные физи­че­ски хра­нят­ся на несколь­ких дис­ках одно­вре­мен­но, что обес­пе­чи­ва­ет луч­шую сохран­ность дан­ных при выхо­де дис­ков из строя, а так­же уве­ли­чи­ва­ет ско­рость запи­си, так как дан­ные мож­но запи­сы­вать не на один диск, а сра­зу на несколь­ко обхо­дя огра­ни­че­ние ско­ро­сти каж­до­го дис­ка. Такие мас­си­вы назы­ва­ют­ся RAID.

Для созда­ния RAID мас­си­вов исполь­зу­ют­ся аппа­рат­ные спе­ци­аль­ные кон­трол­ле­ры. Одна­ко создать RAID мас­сив мож­но и без тако­го кон­тро­ле­ра. Такие мас­си­вы назы­ва­ют­ся про­грамм­ны­ми. В этой ста­тье мы рас­смот­рим как создать про­грамм­ный RAID Linux.

Аббре­ви­а­ту­ра RAID рас­шиф­ро­вы­ва­ет­ся как Redundant Array of Inexpensive Disks. С помо­щью этой тех­но­ло­гии вы може­те пре­вра­тить несколь­ко реаль­ных жест­ких дис­ков в один вир­ту­аль­ный диск с уве­ли­чен­ным объ­е­мом и ско­ро­стью пере­да­чи дан­ных. Но объ­ем полу­чен­но­го дис­ка и пара­мет­ры его рабо­ты уже зави­сят от выбран­но­го режи­ма рабо­ты RAID. Доступ­ны такие режимы:

  • RAID 0 - поз­во­ля­ет уве­ли­чить ско­рость запи­си. Все дис­ки мас­си­ва будут исполь­зо­вать­ся для запи­си дан­ных, поэто­му их ско­ро­сти будут скла­ды­вать­ся. Напри­мер, если у вас есть три дис­ка объ­е­мом 512 Гб и ско­ро­стью запи­си 200 Мб в секун­ду, то объ­еди­нив их в RAID 0 вы полу­чи­те вир­ту­аль­ный диск объ­е­мом 1,5 Тб и мак­си­маль­ной ско­ро­стью запи­си 600 Мб в секунду.
  • RAID 1 - этот режим уве­ли­чи­ва­ет сохран­ность дан­ных. Во вре­мя запи­си одни и те же дан­ные пишут­ся парал­лель­но на под­клю­чён­ные дис­ки. В резуль­та­те у вас будет несколь­ко копий одних и тех же дан­ных. Если один из дис­ков мас­си­ва вый­дет из строя, систе­ма про­дол­жит рабо­тать, так как дан­ные есть ещё и на дру­гом дис­ке. Напри­мер, если вы объ­еди­ни­те два дис­ка по 1 Тб в RAID 1, то полу­чи­те один вир­ту­аль­ный диск с объ­е­мом 1 Тб.
  • RAID 10 - объ­еди­ня­ет в себе два преды­ду­щих вари­ан­та. Он может состо­ять как мини­мум из четы­рех дис­ков. В таком слу­чае сна­ча­ла созда­ют­ся два мас­си­ва RAID 1, а поверх них созда­ет­ся мас­сив RAID 0 для уве­ли­че­ния производительности.

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

СОЗДАНИЕ ПРОГРАММНОГО RAID В LINUX

ШАГ 1. УСТАНОВКА MDADM

Для управ­ле­ния про­грамм­ны­ми RAID мас­си­ва­ми в Linux исполь­зу­ет­ся ути­ли­та mdadm. Для того что­бы уста­но­вить её в Ubuntu или Debian выпол­ни­те такую команду:

sudo apt install mdadm

Для уста­нов­ки ути­ли­ты в CentOS/Fedora/RedHat необ­хо­ди­мо выполнить:

sudo yum install mdadm

ШАГ 2. ПОДГОТОВКА ДИСКОВ

Посмот­реть спи­сок дис­ков, под­клю­чён­ных к систе­ме мож­но с помо­щью коман­ды lsblk:

lsblk

В этой ста­тье я пока­жу как объ­еди­нить три дис­ка в RAID на при­ме­ре дис­ков /dev/sda/dev/sdb и /dev/sdc. Сна­ча­ла необ­хо­ди­мо опре­де­лить­ся сто­ит ли раз­ме­щать RAID непо­сред­ствен­но на дис­ки или на раз­де­лы. Луч­ше выбрать раз­де­лы, так как это дает боль­ше гиб­ко­сти и без­опас­но­сти. Во пер­вых, опе­ра­ци­он­ная систе­ма может пере­за­пи­сать супер­блок RAID если он раз­ме­щён пря­мо на дис­ке. Во вто­рых, если вы выде­ля­е­те весь диск под RAID, то у вас могут воз­ник­нуть про­бле­мы при замене дис­ка. Дис­ки оди­на­ко­во­го объ­е­ма, обыч­но, немно­го отли­ча­ют­ся у раз­ных про­из­во­ди­те­лей. Поэто­му для заме­ны вам при­дет­ся искать точ­но такой же диск с точ­но таким же реаль­ным объ­е­мом. Если же у вас будет раз­дел, вы про­сто смо­же­те создать раз­дел нуж­но­го объема.

Сна­ча­ла нуж­но создать таб­ли­цу раз­де­лов на всех выбран­ных дисках:

sudo parted /dev/sda mklabel msdos
sudo parted /dev/sdb mklabel msdos
sudo parted /dev/sdc mklabel msdos

Если на дис­ке уже суще­ству­ет таб­ли­ца раз­де­лов про­грам­ма пре­ду­пре­дит о том, что созда­ние новой сотрёт все дан­ные с дис­ка. После созда­ния таб­ли­цы раз­де­лов сле­ду­ет создать по раз­де­лу на каж­дом дис­ке. Напри­мер, созда­дим раз­де­лы раз­ме­ром 460 гига­байт. Для это­го мож­но вос­поль­зо­вать­ся той же коман­дой parted:

sudo parted /dev/sda mkpart primary ext4 2048 460Gb
sudo parted /dev/sdb mkpart primary ext4 2048 460Gb
sudo parted /dev/sdc mkpart primary ext4 2048 460Gb

Теперь дис­ки гото­вы к раз­ме­ще­нию на них RAID:

ШАГ 3. СОЗДАНИЕ RAID 0

Для созда­ния RAID мас­си­ва надо выпол­нить коман­ду mdadm с опци­ей --create, ука­зать режим рабо­ты мас­си­ва, коли­че­ство дис­ков и сами дис­ки. Син­так­сис коман­ды такой:

$ sudo mdadm --create /dev/имя_массива --level=режим_работы --raid-devices=количество_устройств спи­сок устройств

Напри­мер:

sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

После выпол­не­ния этой коман­ды вы уви­ди­те раз­дел raid в lsblk. С этим раз­де­лом мож­но рабо­тать как с любым обыч­ным раз­де­лом в вашей системе.

ШАГ 4. ТЕСТИРОВАНИЕ RAID 0

Давай­те для при­ме­ра отфор­ма­ти­ру­ем полу­чен­ный раз­дел в фай­ло­вую систе­му Ext4, смон­ти­ру­ем и попро­бу­ем запи­сы­вать туда файлы:

sudo mkfs -t ext4 /dev/md0
sudo mount /dev/md0 /mnt

Затем мож­но тести­ро­вать ско­рость с помо­щью dd:

sudo dd if=/dev/zero of=/mnt/file bs=1G count=5

при запи­си 5 Гб дан­ных мы полу­ча­ем ско­рость 400 Мб/сек, это уже на уровне обыч­но­го SSD.

ШАГ 5. ИНФОРМАЦИЯ О RAID

Най­ти инфор­ма­цию обо всех создан­ных в систе­ме RAID мас­си­вах вы може­те в фай­ле /proc/mdstat:

cat /proc/mdstat

Имен­но так мож­но посмот­реть RAID Linux. Посмот­реть более деталь­ную инфор­ма­цию о мас­си­ве /dev/md0 мож­но с помо­щью самой ути­ли­ты mdadm:

sudo mdadm --detail /dev/md0

Здесь в том чис­ле отоб­ра­жа­ет­ся состо­я­ние RAID Linux. Посмот­реть деталь­ную инфор­ма­цию о каж­дом устрой­стве, кото­рое вхо­дит в RAID мож­но с помо­щью опции --examine:

sudo mdadm --examine /dev/sda1 /dev/sdb1 /dev/sdc1

ШАГ 6. СОХРАНЕНИЕ RAID МАССИВА

В прин­ци­пе, уже сей­час RAID мас­сив рабо­та­ет и про­дол­жит рабо­тать после пере­за­груз­ки, пото­му что mdadm про­ска­ни­ру­ет все дис­ки, най­дёт мета­дан­ные мас­си­ва и постро­ит его. Но неиз­вест­но какое имя про­грам­ма при­сво­ит полу­чен­но­му мас­си­ву и неиз­вест­но все ли пара­мет­ры будут вос­ста­нов­ле­ны вер­но. Поэто­му кон­фи­гу­ра­цию мас­си­ва луч­ше сохра­нить. Для это­го исполь­зуй­те такую команду:

sudo mdadm --detail --scan --verbose | sudo tee -a /etc/mdadm/mdadm.conf

Затем нуж­но пере­со­здать initramfs с под­держ­кой это­го массива:

sudo update-initramfs -u

С полу­чен­ным мас­си­вом мож­но обра­щать­ся как с обыч­ным раз­де­лом дис­ка. Напри­мер, для того что­бы авто­ма­ти­че­ски мон­ти­ро­вать его в систе­му добавь­те такую строч­ку в /etc/fstab:

sudo vi /etc/fstab

/dev/md0 /mnt/ ext4 defaults 0 0

На этом созда­ние raid мас­си­ва linux завершено.

ШАГ 7. ПЕРЕИМЕНОВАНИЕ RAID МАССИВА

Если вы не выпол­ни­те преды­ду­щий пункт и пере­за­гру­зи­те ком­пью­тер, то може­те полу­чить RAID мас­сив с име­нем md127 вме­сто md0, такое имя так­же может быть при­сво­е­но вто­ро­му RAID мас­си­ву. Для того что­бы пере­име­но­вать мас­сив, его при­дет­ся пере­со­брать. Для это­го сна­ча­ла оста­но­ви­те суще­ству­ю­щий массив:

sudo mdadm --stop /dev/md127

Затем выпол­ни­те коман­ду пере­име­но­ва­ния. Син­так­сис у неё такой:

$ sudo mdadm --assemble --update=name --name=номер /dev/md_номер спи­сок устройств

Напри­мер:

sudo mdadm --assemble --update=name --name=0 /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1

После это­го сле­ду­ет повто­рить преды­ду­щий шаг для уже пра­виль­но­го сохра­не­ния RAID устройства.

ШАГ 8. УДАЛЕНИЕ RAID МАССИВА

Если вы не хоти­те что­бы ваши дис­ки и даль­ше были объ­еди­не­ны в RAID, его мож­но уда­лить. Для это­го выпол­ни­те такую команду:

sudo mdadm --remove /dev/md0

Она уда­лит все мета­дан­ные с дис­ков /dev/md0. Даль­ше оста­нет­ся толь­ко уда­лить или заком­мен­ти­ро­вать сек­цию дан­но­го RAID мас­си­ва в /etc/mdadm/mdadm.conf

sudo vi /etc/mdadm/mdadm.conf

ШАГ 10. СОЗДАНИЕ МАССИВА RAID 1

Теперь вы зна­е­те как создать raid linux на при­ме­ре RAID 0. Давай­те ещё раз­бе­рем­ся с RAID 1. Для созда­ния RAID 1 исполь­зу­ет­ся такая же коман­да как и для RAID 0, но ука­зы­ва­ет­ся дру­гой уро­вень рабо­ты массива:

sudo mdadm --create /dev/md0 --level=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

Затем вы може­те убе­дит­ся что RAID создан посмот­рев инфор­ма­цию о нём:

sudo mdadm --detail /dev/md0

Ну и с помо­щью lsblk мож­но оце­нить раз­мер устройства:

lsblk

Как и ожи­да­лось, раз­мер не уве­ли­чил­ся, посколь­ку копии дан­ных будут запи­сы­вать­ся на все три дис­ка. Теперь давай­те посмот­рим на скорость:

Ско­рость запи­си дан­ных такая же как и у одно­го дис­ка. Это цена сохран­но­сти дан­ных. Если вы отклю­чи­те один из дис­ков, то все дан­ные всё рав­но будут вам доступны.