Решил выложить очередной внутренний туториал в паблик, так как операция повторяется не часто, а в сети сведения разрозненные. Скорее всего она не покажется интересной, если вы на неё попали не из поисковой системы по ключевым словам.
Будем добавлять диски в RAID-массив Smart Array и расширять его без перемонтирования разделов под Linux. В этом howto затронем темы ssacli/hpacucli, parted, growfs, и остальные в попытке увеличить свой диск.

Тут и далее HPE тождественно HP, ибо сначало оно было HP, а потом стало HPE.
Что мы имеем:
Операционная система Linux (в нашем случае актуальная LTS от Ubuntu, но это не слишком принципиально).
Сервер HPE с контроллером Smart Array, в нашем случае это P431, но подобные действия работают схожим образом на широкой линейке контроллеров от HPE.
Экспандер с дисками, не принципиально внутренний бэкплейн или внешняя полка, лишь бы их видел контроллер.
Собранный массив и действующая примонтированная файловая система на нём, в нашем случае это RAID-6 и XFS, но может быть и иная конфигурация. Если у вас JBOD и софтовый массив, то эта статья не про ваш случай.
Вышеперечисленная конфигурация — довольно стандартное решение для хранения большого объёма данных, к доступу к которым не предъявляются повышенные требования по производительности. В нашем случае речь идёт о внешней полке DAS, забитой дисками, к которой подключили по цепочке ещё одну полку и добавили в неё дополнительные диски. Все диски живут в одном массиве с избыточностью в два диска, он же RAID-6, который реализуется аппаратно на контроллере Smart Array.
В массиве создан один логический диск, он имеет разметку GPT с одним разделом, отформатированным в XFS, который примонтирован как точка монтирования /mnt/storage
. У нас всё это используется для складирования бэкапов, то есть туда постоянно что-то пишется и мы не хотим прерывать этот процесс на время работ, которые могут затянуться на длительное время (буквально дни) при большом количестве дисков.
Коротко процедура состоит из следующих этапов:
физическое добавление дисков
доступ к утилите администрирования
добавление физических дисков в логический
расширение раздела
PROFIT!
В целом, вроде всё понятно, а теперь детали.
Добавление дисков
Полагаю, это будет самым простым этапом. Стоит напомнить только, что для расширения массива подойдут накопители такого же или большего объёма, относительно тех, что составляют действующий массив. Но это вроде понятно.
Если используется внешняя SAS/FC-полка то надо не забывать, что там есть multipath, позволяющий достичь некоторой отказоустойчивости. FC в данном топике не обсуждается, как и NVMe, так что не лишним будет напомнить, что multipath есть только в SAS-интерфейсе, в SATA такого нет и отвал живого кабеля приведёт к нехорошим последствиям, поэтому рекомендовано для внешних полок использовать именно SAS-диски, не обязательно быстрые, но именно с SAS интерфейсом. Это касается и HDD и SSD. На всякий случай приложу типичную схему подключения полок:

Утилита администрирования
У HPE есть довольно мощная утилита администрирования своих дисковых контроллеров Smart Array через CLI. А ещё она пакетирована под популярные дистрибутивы, в том числе и под deb based (в которые входит и наша Ubuntu). Не пытайтесь найти это самостоятельно на сайте HPE, это может быть опасно для психики. Надо добавить репозиторий согласно этой инструкции (внутри и для DEB и для RPM), привожу примеры в популярных форматах для Ubuntu:
hpe-mcp.list:
deb [arch=amd64 signed-by=/usr/share/keyrings/hpe-mcp.gpg] http://downloads.linux.hpe.com/SDR/repo/mcp {{ distribution_release }}/current non-free
hpe-mcp.source (Deb822):
Types: deb
URIs: http://downloads.linux.hpe.com/SDR/repo/mcp
Suites: {{ distribution_release }}/current
Components: non-free
Architectures: amd64
Signed-By: /usr/share/keyrings/hpe-mcp.gpg
X-Repolib-Name: hpe-mcp
Как несложно догадаться, темплейт {{ distribution_release }}
надо подменить на codename дистрибутива.
Ключи подписи репозиториев указаны по ссылке выше, но я лично вытаскиваю в кейринг /usr/share/keyrings/hpe-mcp.gpg
следующие:
https://downloads.linux.hpe.com/SDR/hpPublicKey2048_key1.pub
https://downloads.linux.hpe.com/SDR/hpePublicKey2048_key1.pub
https://downloads.linux.hpe.com/SDR/hpePublicKey2048_key2.pub
После всех манипуляций нужно поставить пакет ssacli
, который как раз содержит нужную нам утилиту. Она имеет достаточно богатый функционал, инлайн справка довольно тяжёлая, но чит-листы по ней вполне можно найти в поиске по вебу.
NB! Есть две утилиты со схожим наименованием: hpacucli
и ssacli
, в целом, вторая наследник первой, работают схожим образом, имеют общий синтаксис, но более свежая поддерживает большее число контроллеров. При прочих равных рекомендуется использовать именно ssacli
.
Расширение логического диска массива
Начнём с того, что оценим, что у нас есть на текущий момент. С помощью утилиты parted
посмотрим текущее состояние раздела:
# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 60.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2621kB 60.0TB 60.0TB xfs External
Подтвердили: устройство sdb
, разметка GPT, текущий объём — 60TB, файловая система XFS.
Ищем наш контроллер. Мы знаем, что у нас их два, нужно найти верный:
# ssacli ctrl all show
Smart Array P420i in Slot 0 (Embedded) (sn: 001438025ECCA60)
Smart Array P431 in Slot 2 (sn: PCZED0ARH4201R)
Утилита оперирует понятиями "слот" при указании контроллера. Нужный нам контроллер в слоте под номером 2. Посмотрим как этот контроллер видит диски:
# ssacli ctrl slot=2 pd all show
Smart Array P431 in Slot 2
Array A
physicaldrive 1E:1:1 (port 1E:box 1:bay 1, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:2 (port 1E:box 1:bay 2, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:3 (port 1E:box 1:bay 3, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:4 (port 1E:box 1:bay 4, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:5 (port 1E:box 1:bay 5, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:6 (port 1E:box 1:bay 6, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:7 (port 1E:box 1:bay 7, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:9 (port 1E:box 1:bay 9, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:10 (port 1E:box 1:bay 10, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:11 (port 1E:box 1:bay 11, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:12 (port 1E:box 1:bay 12, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:1 (port 1E:box 2:bay 1, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:8 (port 1E:box 1:bay 8, SAS HDD, 6 TB, OK, spare)
Unassigned
physicaldrive 1E:2:2 (port 1E:box 2:bay 2, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:3 (port 1E:box 2:bay 3, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:4 (port 1E:box 2:bay 4, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:5 (port 1E:box 2:bay 5, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:6 (port 1E:box 2:bay 6, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:7 (port 1E:box 2:bay 7, SAS HDD, 6 TB, OK)
Выяснили: пачка дисков в массиве и шесть дисков не назначены. Теперь посмотрим как выглядят логические диски этого контроллера:
# ssacli ctrl slot=2 ld all show
Smart Array P431 in Slot 2
Array A
logicaldrive 1 (54.6 TB, RAID 6, OK)
В массиве один логический диск и это наш пациент. На всякий случай посмотрим ещё на состояние массива, вдруг там есть нераспределённое место:
# ssacli ctrl slot=2 array a show
Smart Array P431 in Slot 2
Array: A
Interface Type: SAS
Unused Space: 0 MB (0.0%)
Used Space: 65.5 TB (100.0%)
Status: OK
MultiDomain Status: OK
Array Type: Data
Spare Type: dedicated
Smart Path: disable
Всё распределено и вроде как в порядке, пора подкинуть диски. Это выполняется одной командой, перечисляем идентификаторы слотов дисков, руководствуясь предыдущими листингами. Я предпочитаю указывать через запятую, мне кажется, что так надёжнее:
# ssacli ctrl slot=2 ld 1 add drives=1E:2:2,1E:2:3,1E:2:4,1E:2:5,1E:2:6,1E:2:7
Если всё хорошо, утилита ничего не скажет. Для отчаянных и ленивых есть опция не перечислять диски, а вместо этого указать ключ add drives=all
, которая заджойнит в массив все неназначенные диски.
С этого момента можно оставить задачу в покое на продолжительный срок, так как экспанд массива занимает продолжительное время. Сколько? Считайте сами, так как можно увидеть прогресс в процентах с точностью до двух знаков после запятой, сделать замер с определённым интервалом и произвести подсчёт estimated time с помощью несложной арифметической операции. В моём случае это заняло примерно пару дней на моей конфигурации:
# ssacli ctrl slot=2 ld all show
Smart Array P431 in Slot 2
Array A
logicaldrive 1 (54.6 TB, RAID 6, Transforming, 0.01% complete)
A few days later:
# ssacli ctrl slot=2 ld all show
Smart Array P431 in Slot 2
Array A
logicaldrive 1 (54.6 TB, RAID 6, Transforming, 81.65% complete)
Осталось совсем чуть-чуть, по завершении мы увидим результат:
# ssacli ctrl slot=2 ld all show
Smart Array P431 in Slot 2
Array A
logicaldrive 1 (54.6 TB, RAID 6, OK)
Собственно, трансформация кончилось, но "где деньги, Лебовски"? На самом деле этот вопрос мы будем задавать себе ещё несколько раз, так как почти ничего не бывает автоматически. Посмотрим на статус не логического диска, а массива, которому он принадлежит и увидим что добавленные диски отразились как неиспользованное пространство:
# ssacli ctrl slot=2 array a show
Smart Array P431 in Slot 2
Array: A
Interface Type: SAS
Unused Space: 38631161 MB (37.5%)
Used Space: 61.4 TB (62.5%)
Status: OK
MultiDomain Status: OK
Array Type: Data
Spare Type: dedicated
Smart Path: disable
На всякий случай проверим, что все диски уже в массиве:
# ssacli ctrl slot=2 pd all show
Smart Array P431 in Slot 2
Array A
physicaldrive 1E:1:1 (port 1E:box 1:bay 1, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:2 (port 1E:box 1:bay 2, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:3 (port 1E:box 1:bay 3, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:4 (port 1E:box 1:bay 4, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:5 (port 1E:box 1:bay 5, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:6 (port 1E:box 1:bay 6, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:7 (port 1E:box 1:bay 7, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:9 (port 1E:box 1:bay 9, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:10 (port 1E:box 1:bay 10, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:11 (port 1E:box 1:bay 11, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:12 (port 1E:box 1:bay 12, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:1 (port 1E:box 2:bay 1, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:2 (port 1E:box 2:bay 2, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:3 (port 1E:box 2:bay 3, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:4 (port 1E:box 2:bay 4, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:5 (port 1E:box 2:bay 5, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:6 (port 1E:box 2:bay 6, SAS HDD, 6 TB, OK)
physicaldrive 1E:2:7 (port 1E:box 2:bay 7, SAS HDD, 6 TB, OK)
physicaldrive 1E:1:8 (port 1E:box 1:bay 8, SAS HDD, 6 TB, OK, spare)
Востребуем пространство, назначив логическому диску:
# ssacli ctrl slot=2 ld 1 modify size=max forced
Если всё хорошо, команда ничего не отдаст. Флаг forced
позволит совершить операцию на примонтированном в операционной системе блочном устройстве без лишнего интерактива. Проверим как теперь выглядят массив и логический диск:
# ssacli ctrl slot=2 array a show
Smart Array P431 in Slot 2
Array: A
Interface Type: SAS
Unused Space: 0 MB (0.0%)
Used Space: 98.2 TB (100.0%)
Status: OK
MultiDomain Status: OK
Array Type: Data
Spare Type: dedicated
Smart Path: disable
# ssacli ctrl slot=2 ld all show
Smart Array P431 in Slot 2
Array A
logicaldrive 1 (87.3 TB, RAID 6, OK)
На этом часть с расширением на массиве закончена. Пора переходить к разделам и операционной системе.
Расширение раздела
Для начала можно открыть parted
и убедиться, что новое пространство... не появилось:
# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 60.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
17.4kB 2621kB 2604kB Free Space
1 2621kB 60.0TB 60.0TB xfs External
Видимо, операционная система ничего не знает о новой геометрии блочного устройства, принудим её к получению новой информации тривиальной командой, а потом посмотрим что у нас об этом скажет ядро:
# echo 1 > /sys/block/sdb/device/rescan
# dmesg
...
[1383976.667022] sd 3:1:0:0: [sdb] 187535656112 512-byte logical blocks: (96.0 TB/87.3 TiB)
[1383976.667031] sd 3:1:0:0: [sdb] 4096-byte physical blocks
[1383976.667142] sdb: detected capacity change from 117209785520 to 187535656112
Ага, объём блочного устройства изменился в нашу пользу, смотрим снова в parted
, который сообщит что он обнаружил новое место, позволим ему его учитывать:
# parted /dev/sdb
GNU Parted 3.4
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p free
Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 70325870592 blocks) or continue with the current setting?
Fix/Ignore? fix
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 96.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
17.4kB 2621kB 2604kB Free Space
1 2621kB 60.0TB 60.0TB xfs External
60.0TB 96.0TB 36.0TB Free Space
Настала пора расширить раздел. У нас всего один раздел с индексом 1, свободное место образовалось сразу за ним. Это очень простой случай и мы назначаем разделу 1 всё свободное место, подтвердив, что мы это делаем онлайн (без отмонтирования раздела):
(parted) resizepart 1 100%
Warning: Partition /dev/sdb1 is being used. Are you sure you want to continue?
Yes/No? y
(parted) p free
Model: HP LOGICAL VOLUME (scsi)
Disk /dev/sdb: 96.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
17.4kB 2621kB 2604kB Free Space
1 2621kB 96.0TB 96.0TB xfs External
Осталось немного. Нужно пофиксить файловую систему, в нашем случае XFS, чтобы новое место стало доступным для использования. Для этого воспользуемся утилитой xfs_growfs
, которая примет новое количество блоков и место появится в операционной системе:
# xfs_growfs -d /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=103, agsize=228925312 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=23441956369, imaxpct=5
= sunit=128 swidth=640 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 14651222786 to 23441956369
Как не сложно догадаться, для иных файловых систем есть свои версии утилит growfs
. А для любителей LVM существует утилиты lvextend
/lvresize
со схожим функционалом.
Финализируем видимость пространства с помощью df
:
# df -h /dev/sdb1
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 88T 44T 45T 50% /mnt/storage
Итак, мы увеличили свой массив за счёт добавления новых дисков и не разу не прервали его работу. Что дальше? А дальше можно продолжить забивать его мусором, подкинув потом ещё одну полку по цепочке SAS-шины. Только не надо забывать, что статистически риск отказа растёт при добавлении каждого диска, вплоть до того, что избыточность в два диска не вывезет.
А можно заменить по очереди все существующие в массиве диски на новые большего объёма и расширить пространство за счёт этого — только потом придётся думать, куда девать старые диски, скорее всего только в утиль.
Если хочется новых приключений, можно переехать на софтовое решение, манипулирующее физическими дисками aka JBOD, начиная от Linux MD, ZFS и заканчивая чем-то типа Ceph, жизнь может после этого стать куда более увлекательной.
Комментарии (3)
werter_l
13.02.2025 20:311 Cпасибо.
2 Нафиг-нафиг, завтра оно сдохнет, а в ЗИПах 99%, что его нет (
Для такого только jbod\it mode\hba mode и софтовый рейд.
Зы. А если оно еще и на матплате распаяно, а не дискретное, то совсем все плохо (
CherryPah
add drives=all unassigned. Гулять так на все =)
Вот где-то тут я не выдержал, переложил данные и просто пересоздал массив xD. Понятно что не всегда такое возможно, но тем кто решит пройти расширение на лету - помните что few days тут не опечатка
Там вообще весь сайт опасен для психики, но со временем привыкаешь и даже начинаешь понимать
их логикукак искать нужное, логику понять все равно не удается. Ну и репо иногда приходится подбирать методом научного поиска, мне так и не удалось убедить XCP-NG что он XenServer, а вот древняя rpmка от какой-то древней центоси подошла, ну и несколько зависимостей тоже пришлось руками.Скорость не падала не смотрели?
Спасибо, хорошая готовая шпаргалка, в закладки
Press
ssacli ctrl slot=2 pd 1E:1:1,1E:1:4,1E:1:5,1E:1:7,1E:1:10,1E:1:11,1E:1:12 modify led=on
Pas Автор
Да, вполне годится на то, чтобы закинуть в хаутушку. Повторяю процедуру раз в год-полтора, всё время приходится вспоминать. Спасибо.
Скорость оcобо не упала, заметили, что дампы может чуть дольше по времени делаться стали. Там довольно узкое горлышко сама шина 2 * x4 SAS, полагаю что на текущей нагрузке особо не заметили. Вот что удалось вытащить из графаны: