Увеличение / изменение размера RAID при обновлении видимого размера дисков

Для этого вам нужны регулярные выражения Perl. С grep , который поддерживает флаг -P :

grep -oP '(?<=a)a' file | wc -l

Это положительный просмотр назад . Он соответствует одному a , которому предшествует другой a .


Если вы предпочитаете perl (или ваш grep не поддерживает флаг -P ):

perl -ne 'while(m/(?<=a)a/g){$a++}END{print "$a\n"}' file

Пример:

$ cat file
aa
aaa
aaaa

Первая строка должно быть 1 совпадение, второе - два, а третье - одно дерево; все вместе 6:

$ grep -oP '(?<=a)a' file | wc -l
6

10
20.09.2012, 05:39
2 ответа

Я поковырялся в /sys и приблизился к ответу.

# cd /sys/block/md0/md
# cat component_size
2147479552

Это согласуется с тем, что мы видели раньше. Но это:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

похоже, объясняет, почему RAID видит неправильный размер: Большинство дисков отображаются как 2 ТБ, а 2 диска, которые были заменены, отображаются как 3 ТБ. Все диски одной модели, так что давайте посмотрим, сможем ли мы изменить воспринимаемый размер:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

Вуаля. Component_size все еще мал, хотя:

# cat component_size
2147479552

Возможно, его можно изменить с помощью mdadm:

# mdadm --grow /dev/md0 --size=max

К сожалению, это блокирует mdadm и последующий доступ к /dev/md0 блокируется. Как и доступ к component_size:

# cat component_size   # This blocks

Хреново. Но хорошо то, что в syslog написано:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

Файловая система на /dev/md0 все еще работает.

После перезагрузки мне пришлось снова выполнить 'mdadm --grow /dev/md0 --size=max'. Затем дождаться завершения resync. И снова доступ к /dev/md0 был заблокирован. Поэтому еще одна перезагрузка, затем xfs_growfs /dev/md0, после чего изменение размера было завершено.

5
29.04.2021, 00:55

Я думаю, что во время создания размер устройства был зарегистрирован где-то в метаданных. Смена контроллера не изменит метаданные.

Удалите запасной диск из md, затем добавьте его в RAID-массив как новый диск. Вероятно, придется удалить метаданные (проверьте на странице руководства --zero-superblock или сотрите весь диск). Если это сработает для одного диска, повторите процедуру для всех оставшихся дисков. Затем выполните команду --grow.

Не извлекайте дополнительные диски до завершения синхронизации!!!

3
29.04.2021, 00:55

Теги

Похожие вопросы