RAID массивы в Линукс
RAID массив в Линукс может пригодиться для резервирования данных на нескольких носителях, в случае поломки одного из дисков второй сохранит информацию и при этом можно продолжать пользоваться компьютером, но лучше сразу бежать в магазин за новым диском, особенно если одной серии от одного производителя в паре стоят, вероятность поломки второго сильно возрастает, лучше вовремя отслеживать состояние дисков и вовремя заменять через утилиту GSmartControl или в моём скрипте md есть пункт с тестированием, он автоматически выявляет важное и сообщит красным об ошибках.
Так же есть сценарии когда за счёт RAID (Redundant Array of Independent Disks — избыточный массив независимых дисков) увеличивают производительность, но особого смысла для дома в этом нет, по следующим причинам: нет сильных нагрузок; SSD диски становятся всё доступнее; стоимость — для обычного RAID1 (зеркальный дисковый массив) понадобиться минимум 2 диска, а для схемы RAID10 (RAID1+0) уже от 4-х штук: по 2 с чередованием (без отказоустойчивости) и эти пары объединяются зеркально в RAID 1 для отказоустойчивости. В принципе, если финансы жмут карманы, можно вытворять что угодно, вплоть до строительства RAID схем на базе собранных RAID массивов.
Схемы расписывать не буду, погуглите, тема хорошо освещена в наши дни..
Какие Raid бывают?
Бывают аппаратные и программные, аппаратные могут быть реализованы за счёт отдельных карт к которым подключаются диски и он там сам жужжит после настройки, система видит всё как 1 диск, сам синхронизируется в случае замены диска итд.. В принципе это удобно, но есть негативные стороны, например:
- Из-за паники ядра, рэйд карта может превратить данные в кашу, программный же просто пересинхронизируется..
- Ситуация когда сломался контроллер и второго такого же не найти — данные до свидания.
- Может произойти отказ при переносе на другое оборудование, даже с учётом что карта та же (в сети полно кошмаров об аппаратных рэйдах, кому интересно почитайте).. Если и брать такой то очень дорогой, где-нибудь за $1000..
- Попадаются серии карт которые изобилуют проблемами. Особенно дешёвые..
- Цена такой карточки зачастую космическая, даже самого низкого уровня..
Далее идут аппаратные за счёт контролеров на материнских платах , их народ всячески хает, называет «фэйковым недорэйдом» с отсутствием мозгов.. Ну и само собой понятно, если нормальный аппаратный стоит пару десятков тысяч, то тут целая материнская плата за условные 5 тысяч..
Подобрались к самому вкусному — программному RAID массиву mdadm (manage MD devices он же Linux Software Raid), в этом случае операционная система тратит немного ресурсов на ввод/вывод управляя записью и чтением с нескольких устройств. Затраты эти минимальны и не ощущаются, даже если поставить рэйд и поверх LVM например (LVM это ещё один возможный уровень абстракции, он может понадобиться если необходимо собрать 1 виртуальный диск из нацати маленьких/разных, я его не рассматриваю, ибо это головняк, в котором нет необходимости в обычной ситуации. Да и часть управляющих серверами считает LVM пережитком прошлого, объёмы дисков огромные нынче.)
Самое важное, что отсутствуют проблемы с переносом с одной машины на другую, пару манипуляций в консоли и всё опять работает!
Производительность что аппаратного, что софтварного рэйд массива примерно одинакова.
Про диски
Диски лучше брать одного размера. По умолчанию рэйд соберётся по наименьшему диску..
В случае переноса массива на больший диск проще создать дополнительный массив и скопировать данные, затем разрушить старый массив и переименовать если необходимо новый. Диски разных производителей одного объёма обычно одинаковые по размеру..
В Линуксе дисковые, флеш итп. устройства называются как sda, sdb, sdc итд. А вот дисковые разделы в устройстве (логические тома) как sda1, sda2 итд. В теории можно собирать рэйды из устройств sda, sdb, sdc . но по факту это сегодня не работает с современной разметкой диска GPT — mdadm бьёт основную таблицу.. Дополнительно можно словить проблемы из-за разного размера дисков, которая обходится если создавать из логических томов / разделов просто оставив 100 Мб в конце не размеченными и скопировав разметку на другие диски.
Диски могут монтироваться в одну из директорий(папок): media, dev или mnt. В нашем случае в директория dev и путь к устройству выглядит как /dev/sda. Точка подключения — доступа к данным /media/имя-пользователя/имя-диска(метка тома-LABEL / UUID).
Диски именуются в зависимости от типа их подключения: SATA — sda, а IDE — hda.. т.е. sda — SATA DISK A.
Следует упомянуть про HDD диски (которые крутятся) — чем ближе раздел к началу диска, тем больше скорость считывания, из-за скорости вращения, т.е. разделы загрузки, раздел подкачки (сейчас на файл перешли) имеет смысл в начале создавать.. SSD диски — без разницы, у них фиксированная скорость доступа — вращения нет. В целом своп или файл подкачки сегодня только ноутбукам необходим для режима сна, памяти уже много ставят, достаточно выделять размер оперативной памяти + 2Гб. В ином случае можно выделить ~2 Гб (в сборках K/Ubuntu выделяют 1,5Гб).
Что произойдет если кончатся буквы в /dev/sd[a-z]?
Если диски закончатся, начнётся именование как /dev/[sdaa,sdab,sdac]
Линукс поддерживает более 2304 дисков..
Для более глубокого понимания прочитайте раздел файловая система в Линукс
Важно! Перед любой манипуляцией с уже собранным RAID массивом необходимо убедиться что не идёт синхронизация или пересборка — смотрим состояние массива, в консоли пишем:
Если нет надписей типа [==>. ] resync = 16.0% или recovery = 16.0%. Значит операций не идёт, можно действовать..
Если произошёл сбой по какой-то причине, дождитесь восстановления массива, затем уже помечайте сбойным и вытаскивайте/заменяйте диск..
Следить в реальном времени за синхронизацией массива можно командой
watch cat /proc/mdstat # обновлять раз в 5 секунд watch -n 5 cat /proc/mdstat # Ctrl+C для выхода
Подразумеваю, что для управления будет использоваться мой bash скрипт управления RAID массивами md, по этой причине сценариев расписывать не буду, всё сделает автоматика, она так же следит за синхронизацией и всем остальным, остаётся только кнопки нажимать..
Как определить какой диск вытаскивать, RAID массив на каком порте?
SATA порт в принципе не определить, система может не передавать на каком порте висит диск и он может быть непоследователен udev(менеджер устройств) не обязан соблюдать последовательность и диски могут быть помечены как угодно. Посему будем определять какой диск вытащить по серийному номеру.. Для этого необходимо определить какой диск сбойный, затем узнать его серийный номер..
# Если нет lsblk sudo apt install -y util-linux lsblk -I 8 -dpo NAME,SIZE,MODEL,REV,SERIAL,VENDOR /dev/sda sudo hdparm -i /dev/sd[a,b,c,d] | grep Serial sudo hdparm -i /dev/sda | grep Serial
Скрипт md на многих стадиях выдаёт всю необходимую информацию..
Серийный номер на жёстком диске обычно спереди на корпусе наклеен, либо сверху на наклейку смотрите.. Таким образом и определяем какой вытащить..
В серверах попроще, там сбойные контроллер подсветит светодиодом на корпусе салазок или ещё где.. И диски обычно серийником наружу с торца стоят.
RAID
Redundant Array of Independent Disks (RAID) is a storage technology that combines multiple disk drive components (typically disk drives or partitions thereof) into a logical unit. Depending on the RAID implementation, this logical unit can be a file system or an additional transparent layer that can hold several partitions. Data is distributed across the drives in one of several ways called #RAID levels, depending on the level of redundancy and performance required. The RAID level chosen can thus prevent data loss in the event of a hard disk failure, increase performance or be a combination of both.
This article explains how to create/manage a software RAID array using mdadm.
RAID levels
Despite redundancy implied by most RAID levels, RAID does not guarantee that data is safe. A RAID will not protect data if there is a fire, the computer is stolen or multiple hard drives fail at once. Furthermore, installing a system with RAID is a complex process that may destroy data.
Standard RAID levels
There are many different levels of RAID; listed below are the most common.
RAID 0 Uses striping to combine disks. Even though it does not provide redundancy, it is still considered RAID. It does, however, provide a big speed benefit. If the speed increase is worth the possibility of data loss (for swap partition for example), choose this RAID level. On a server, RAID 1 and RAID 5 arrays are more appropriate. The size of a RAID 0 array block device is the size of the smallest component partition times the number of component partitions. RAID 1 The most straightforward RAID level: straight mirroring. As with other RAID levels, it only makes sense if the partitions are on different physical disk drives. If one of those drives fails, the block device provided by the RAID array will continue to function as normal. The example will be using RAID 1 for everything except swap and temporary data. Please note that with a software implementation, the RAID 1 level is the only option for the boot partition, because bootloaders reading the boot partition do not understand RAID, but a RAID 1 component partition can be read as a normal partition. The size of a RAID 1 array block device is the size of the smallest component partition. RAID 5 Requires 3 or more physical drives, and provides the redundancy of RAID 1 combined with the speed and size benefits of RAID 0. RAID 5 uses striping, like RAID 0, but also stores parity blocks distributed across each member disk. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 5 can withstand the loss of one member disk.
Note: RAID 5 is a common choice due to its combination of speed and data redundancy. The caveat is that if one drive were to fail and another drive failed before that drive was replaced, all data will be lost. Furthermore, with modern disk sizes and expected unrecoverable read error (URE) rates on consumer disks, the rebuild of a 4TiB array is expected (i.e. higher than 50% chance) to have at least one URE. Because of this, RAID 5 is no longer advised by the storage industry.
RAID 6 Requires 4 or more physical drives, and provides the benefits of RAID 5 but with security against two drive failures. RAID 6 also uses striping, like RAID 5, but stores two distinct parity blocks distributed across each member disk. In the event of a failed disk, these parity blocks are used to reconstruct the data on a replacement disk. RAID 6 can withstand the loss of two member disks. The robustness against unrecoverable read errors is somewhat better, because the array still has parity blocks when rebuilding from a single failed drive. However, given the overhead, RAID 6 is costly and in most settings RAID 10 in far2 layout (see below) provides better speed benefits and robustness, and is therefore preferred.
Nested RAID levels
RAID 1+0 RAID1+0 is a nested RAID that combines two of the standard levels of RAID to gain performance and additional redundancy. It is commonly referred to as RAID10, however, Linux MD RAID10 is slightly different from simple RAID layering, see below. RAID 10 RAID10 under Linux is built on the concepts of RAID1+0, however, it implements this as a single layer, with multiple possible layouts. The near X layout on Y disks repeats each chunk X times on Y/2 stripes, but does not need X to divide Y evenly. The chunks are placed on almost the same location on each disk they are mirrored on, hence the name. It can work with any number of disks, starting at 2. Near 2 on 2 disks is equivalent to RAID1, near 2 on 4 disks to RAID1+0. The far X layout on Y disks is designed to offer striped read performance on a mirrored array. It accomplishes this by dividing each disk in two sections, say front and back, and what is written to disk 1 front is mirrored in disk 2 back, and vice versa. This has the effect of being able to stripe sequential reads, which is where RAID0 and RAID5 get their performance from. The drawback is that sequential writing has a very slight performance penalty because of the distance the disk needs to seek to the other section of the disk to store the mirror. RAID10 in far 2 layout is, however, preferable to layered RAID1+0 and RAID5 whenever read speeds are of concern and availability / redundancy is crucial. However, it is still not a substitute for backups. See the wikipedia page for more information.
Warning: mdadm cannot reshape arrays in far X layouts which means once the array is created, you will not be able to mdadm —grow it. For example, if you have a 4x1TB RAID10 array and you want to switch to 2TB disks, your usable capacity will remain 2TB. For such use cases, stick to near X layouts.
RAID level comparison
RAID level | Data redundancy | Physical drive utilization | Read performance | Write performance | Min drives |
---|---|---|---|---|---|
0 | No | 100% | nX |
Best; on par with RAID0 but redundant