Производить конвертацию мы будем на сервере HP Proliant DL160 G8 с обычным разбиением по разделам (не lvm). Т.е. диски sda1...sda8, каждый из которых примонтирован в определенный каталог. В случае с lvm процесс немного легче и удобнее. Статья должна подойти для любого hp-сервера, в котором используется официальная утилита hpacucli. В данном примере у нас CentOS 6.5, но подойдет любой Linux, поддерживаемый hpacucli.
В процессе конвертации для добавления места в CentOS придется отмонтировать каталог, в который мы будем добавлять свободное место (последний в таблице разделов parted — sda8), а также сделать reboot, если только все разделы sda1..sda8 не используются ни одним процессом.
Добавляем диски
Проверяем какой у нас RAID, сколько в нем дисков, а также сколько дисков не использовано:
#hpacucli ctrl all show config
В нашем случае команда покажет 4 диска в RAID 10 и 4 незадействованных диска, которые мы только что вставили.
Добавляем незадействованные диски в RAID 10:
#hpacucli ctrl slot=2 ld 1 add drives=allunassigned
Конвертация RAID 10 в RAID 6
Конвертируем командой:
#hpacucli ctrl slot=2 ld 1 modify raid=6
Проверяем, что теперь мы имеем RAID 6 из 8ми дисков:
#hpacucli ctrl all show config
Smart Array P420 in Slot 2 (sn: PDSXK0BRH5S1AY)
array A (SAS, Unused Space: 1525708 MB)
logicaldrive 1 (558.7 GB, RAID 6 (ADG), OK)
physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 300 GB, OK)
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 300 GB, OK)
physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SAS, 300 GB, OK)
physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 300 GB, OK)
physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 300 GB, OK)
physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 300 GB, OK)
physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SAS, 300 GB, OK)
physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 300 GB, OK)
Расширяем полученный RAID до максимального размера:
#hpacucli ctrl slot=2 ld 1 modify size=max
<code>array A (SAS, Unused Space: 0 MB)
Добавление места в CentOS
Заставляем CentOS пересканировать RAID:
#echo 1 > /sys/block/sda/device/rescan
Смотрим, что физически место появилось:
#fdisk -l
Добавление свободного места к последнем разделу в таблице разделов
Посмотрим текущую таблицу разделов, переведя единицы измерения в сектора:
#parted /dev/sda
(parted) unit s
(parted) print
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sda: 3515228764s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 2048s 1026047s 1024000s primary ext4 boot
2 1026048s 84912127s 83886080s primary ext4
3 84912128s 168798207s 83886080s primary ext4
4 168798208s 1171743323s 1002945116s extended
5 168800256s 252686335s 83886080s logical ext4
6 252688384s 294631423s 41943040s logical ext4
7 294633472s 303022079s 8388608s logical linux-swap(v1)
8 303025152s 1171743323s 868718172s logical ext4
Видим, что последний раздел 8й. Запоминаем начало 8го раздела (303025152s). Смотрим, куда он примонтирован:
#mount |grep sda8
/dev/sda8 on /var/lib type ext4 (rw)
Ищем, не использует ли кто-нибудь каталог /var/lib:
#lsof /var/lib
Выключаем все сервисы/процессы, которые показала эта утилита.
Теперь можно отмонтировать каталог:
#umount /var/lib
Если у нас только один раздел, на котором располагается корень системы, то нам не повезло, и придется загружаться в rescue режиме, после чего можно продолжать дальше.
Добавить место мы можем только в последний (8й) раздел.
Сначала увеличим 4й extended раздел, т.к. все разделы, номера которых больше четырех, по сути содержатся внутри 4го:
#parted
(parted) resize 4 168798208s -1s
Удаляем 8й раздел (с данными ничего не случится) и создаем новый, используя запомненный номер сектора начала этого раздела.
<code>(parted) rm 8
(parted) mkpart logical ext4 303024128s -1s
Теперь чтобы CentOS увидел измененную таблицу разделов, если ни один процесс не использует разделы sda1..sda8, то просто делаем partprobe /dev/sda, иначе (что более вероятно) просто перезагружаем сервер.
После этого увеличиваем файловую систему раздела (если нам удалось избежать ребута, то нужно не забыть примонтировать раздел обратно командой mount /dev/sda8 /var/lib):
#resize2fs /dev/sda8
Проверяем:
#df -h
/dev/sda8 1.5T 229M 1.4T 1% /var/lib
P.S.
Зачем мы конвертировали RAID 10 в RAID 6?
Потому что он значительно быстрее для 8-ми дисков. Этот факт проверен и протестирован мной лично.
Полезные ссылки:
Hpacucli Utility for Linux — All Commands Guide.
Автор: bi4o4ek