Я пытаюсь смоделировать плановое обновление системы хранения. Для этого я воссоздал установку с меньшими дисками в виртуальной машине.
Подготовка
Отправной точкой является LV с raid5, 2 полосами на 3 PV и кэшированием на одном PV, настроенный следующим образом:
pvcreate / dev / sdd / dev / sde / dev / sdf vgcreate vg01 / dev / sdd / dev / sde / dev / sdf lvcreate -n origin_lv -l 8180 -i 2 --type raid5 vg01 \ / dev / sdd / dev / sde / dev / sdf
что приводит к VG с raid5 на 3 устройствах. Затем я сделал это, чтобы создать тома кеша:
pvcreate /dev/sdc1
vgextend vg01 /dev/sdc1
lvcreate -n origin_lv_cache -L 10G vg01 /dev/sdc1
pvcreate /dev/sdc2
vgextend vg01 /dev/sdc2
lvcreate -n origin_lv_cache_meta -L 1G vg01 /dev/sdc2
это для создания пула кешей:
lvconvert \
--type cache-pool \
--poolmetadata vg01/origin_lv_cache_meta \
vg01/origin_lv_cache
и прикрепил его к исходному LV:
lvconvert \
--type cache \
--cachepool vg01/origin_lv_cache \
vg01/origin_lv
>>>> output: "Logical volume vg01/origin_lv is now cached"
Затем я использую luksFormat и mkfs, в результате чего получается отлично монтируемая файловая система.
Эта проблема
Теперь я хочу добавить емкость. Для этого я пробовал следующее:
lvconvert --splitcache vg01/origin_lv
убрать кеширование. Это синхронизирует все, от кеша до фактического LV, тогда я могу сделать это:
pvcreate /dev/sdg
vgextend vg01 /dev/sdg
чтобы добавить новый PV, затем:
lvconvert --stripes 3 vg01 / origin_lv [все предыдущие устройства] [новое устройство]
в результате, как и ожидалось, у LV будет на 50% больше места. Теперь я попытался повторно подключить кеш и даже удалить тома кеша и воссоздать их, но когда я пытаюсь повторно подключить его к фактическому LV, я получаю следующее:
lvconvert \
--type cache-pool \
--poolmetadata vg01/origin_lv_cache_meta \
vg01/origin_lv_cache
вывод:
Do you want wipe existing metadata of cache pool vg01/origin_lv_cache? [y/n]: y
LV origin_lv, segment 1 invalid: reshape for cache segment.
Internal error: LV segments corrupted in origin_lv.
Однако я могу монтировать и читать / записывать базовый LV просто отлично, просто не получается повторно подключить кеш.
любые идеи, что мне здесь не хватает?
Как оказалось, fsresize не знает о базовом статусе синхронизации. Использование lvs для проверки статуса синхронизации и ожидание 100% синхронизации, затем изменение размера работало нормально.