Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
howto:sysadmin:mdraid [2019/10/26 19:19] 127.0.0.1 внешнее изменение |
howto:sysadmin:mdraid [2021/03/30 22:54] (текущий) |
||
---|---|---|---|
Строка 64: | Строка 64: | ||
====== Производительность ====== | ====== Производительность ====== | ||
[[https://romanrm.net/mdadm-raid|Хорошая статья]] | [[https://romanrm.net/mdadm-raid|Хорошая статья]] | ||
+ | |||
+ | |||
+ | |||
+ | ====== mdraid ====== | ||
+ | |||
+ | == Создать raid-5 на 4 разделах == | ||
+ | /dev/sdh1, /dev/sdi1, ... . | ||
+ | |||
+ | mdadm --create /dev/mdX --raid-devices=4 --level=5 /dev/sd{h,i,j,k}1 | ||
+ | |||
+ | |||
+ | == Ограничить скорость resync == | ||
+ | <file /etc/sysctl.d/mdadm.conf> | ||
+ | dev.raid.speed_limit_max = 51200 | ||
+ | </file> | ||
+ | |||
+ | Применить настройку без перезагрузки: | ||
+ | sysctl --system | ||
+ | ===== Остановить Resync ===== | ||
+ | |||
+ | Бывает полезно, когда нужно совместить resync с последующим копированием данных на свежесозданный массив. | ||
+ | - Создаём массив; | ||
+ | - останавливаем синхронизацию; | ||
+ | - копируем данные. | ||
+ | - Не забываем включить обратно чтобы синхронизировать оставшееся место. | ||
+ | |||
+ | echo frozen > /sys/block/md2/md/sync_action | ||
+ | echo none > /sys/block/md2/md/resync_start | ||
+ | | ||
+ | echo idle > /sys/block/md2/md/sync_action | ||
+ | | ||
+ | echo repair > /sys/block/md2/md/sync_action | ||
+ | | ||
+ | |||
+ | ===== Настроить файловую систему ext4 ===== | ||
+ | При создании этой файловой системы можно указать параметры нижележащего raid, чтобы метаданные файловой системы более равномерно распределялись между дисками. Программа mkfs подбирает оптимальные значения этих параметров, но при расширении raid (или конвертации raid5 в raid6) эти параметры следует изменить вручную. | ||
+ | |||
+ | |||
+ | **stride=stride-size** | ||
+ | Configure the filesystem for a RAID array with stride-size filesystem blocks. This is the number of blocks read or written to disk before moving to next disk. This mostly affects placement of filesystem metadata like bitmaps at mke2fs(2) time to avoid placing them on a single disk, which can hurt the performance. It may also be used by block allocator. | ||
+ | |||
+ | **stripe_width=stripe-width** | ||
+ | Configure the filesystem for a RAID array with stripe-width filesystem blocks per stripe. This is typically be stride-size * N, where N is the number of data disks in the RAID (e.g. RAID 5 N+1, RAID 6 N+2). This allows the block allocator to prevent read-modify-write of the parity in a RAID stripe if possible when the data is written. | ||
+ | |||
+ | |||
+ | Файловую систему перед этим рекомендуется отмонтировать. | ||
+ | <code> | ||
+ | chunk size = 512kB | ||
+ | block size = 4kB (recommended for large files, and most of time) | ||
+ | stride = chunk / block = 128 | ||
+ | N = (n disks in raid6) - 2 | ||
+ | #or N = (n disks in raid5) - 1 | ||
+ | stripe-width = stride * N = 512 | ||
+ | |||
+ | tune2fs -E stride=128,stripe-width=512 /dev/mdX | ||
+ | </code> | ||
+ | |||
+ | ===== Конвертировать raid на блочных устройствах в raid на разделах ===== | ||
+ | Пример: | ||
+ | Массив создан на блочных устройствах: | ||
+ | |||
+ | md1 : active raid5 sdb[4] sde[2] sdc[0] sdd[1] | ||
+ | 23435249664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] | ||
+ | |||
+ | Это доставляет неудобства, т.к. теперь в массив можно добавить только диски в точности такого же или большего размера (если новый диск на пару мегабайт меньше, он не добавится). | ||
+ | |||
+ | Чтобы исправить проблему, достаточно было бы уменьшить размер рейда на несколько мегабайт, а затем по очереди "вынуть" из массива по одному диску, создать на них partition и добавить его обратно в массив. | ||
+ | |||
+ | Сорян, но в mdraid это невозможно. Даже если уменьшить раздел командой ''%%mdadm --grow%%'', всё равно диск не добавится с ошибкой "not large enough to join array". И не важно, какая версия метаданных, 0.9 или 1.2. Единственный выход -- перенести куда-то данные, создать партишены и пересоздать на них raid. | ||
+ | |||
+ | ===== Переименовать mdadm-раздел ===== | ||
+ | Допустим, у насть есть раздел /dev/md3 с именем ''computername:3'' и мы хотим переименовать его в othername:1. Ситуация усложняется тем, что на разделе находится lvm-том ''vg'' с разделом /home. | ||
+ | |||
+ | 1. Выкидываем всех пользователей из системы и отмонтируем /home. | ||
+ | umount /home | ||
+ | 2. Останавливаем udev. | ||
+ | service udev stop | ||
+ | 3. Останавливаем lvm-том. | ||
+ | dmsetup remove vg-home | ||
+ | 4. Смотрим, на каких дисках собран md-раздел. | ||
+ | Допустим это /dev/sdX3, /dev/sdY3 | ||
+ | 5. Останавливаем mdadm-диск. | ||
+ | mdadm --stop /dev/md3 | ||
+ | 6. Запускаем диск со сменой имени. | ||
+ | mdadm --assemble /dev/md1 --name othername:1 --update=name /dev/sd{X,Y}3 | ||
+ | 7. Обновляем имя в файле ''/etc/mdadm/mdadm.conf'' | ||
+ | mdadm --detail --scan | ||
+ | 8. Обновляем initramfs. | ||
+ | update-initramfs -u | ||
+ | |||