Бывает задача: «каталог лежит в корне, надо чтобы он был отдельно, гигов на пять». Вот как это делается .
Зачем вообще
В типовой разметке корень у нас 2 ГБ. Если каталог живёт внутри него и растёт — он отъедает место у системы, и в один прекрасный день / забивается под ноль. Отдельный том эту связь разрывает: каталог пухнет сколько хочет в своих границах, корню всё равно. Плюс размер потом меняется одной командой.
Процедура универсальная — в примере /srv, но с тем же успехом это /var/lib, /opt или что угодно ещё.
Понадобится: root на хосте, доступ к vSphere, минут 20 вместе с перезагрузкой.
Сначала посмотреть, что там вообще
bash
findmnt -T /srv # покажет, на каком томе каталог сейчасdu -sh /srv # сколько данных переноситьlsblkvgs # есть ли свободное место в группе
Если findmnt показал lv_root — да, каталог в корне, работаем. Признак тот же в lsblk: точки /srv в списке смонтированного просто нет.
Смотрим VFree в vgs. Если места хватает — сразу к созданию тома. Обычно не хватает, тогда расширяем диск.
Расширяем диск
Добавляем в vSphere нужный объём к sda (мы добавляли 5 ГБ), потом говорим системе перечитать размер:
bash
echo 1 > /sys/block/sda/device/rescanlsblk /dev/sda
Стал 65G вместо 60G — отлично. Не стал — значит либо в vSphere изменения не применились, либо рескан не прошёл, и дальше идти смысла нет.
Нарезаем новый раздел
Тянуть существующий sda2 под живой системой не хочется, поэтому просто делаем новый раздел в свободном хвосте:
bash
fdisk /dev/sda
Внутри по порядку: n → p → 3 → Enter → Enter → t → 3 → 8e → p (глянуть, что получилось) → w.
Код 8e — это Linux LVM для таблицы dos. Если в шапке fdisk написано gpt, код будет 31.
Красное предупреждение про «repartitioning is probably a bad idea» пугает только первый раз — оно вылезает всегда, когда на диске есть смонтированные ФС. Существующие разделы мы не трогаем, всё нормально.
Дальше подцепляем:
bash
partx -a --nr 3 /dev/sdalsblk /dev/sda # sda3 должен появитьсяpvcreate /dev/sda3vgextend vg_sys /dev/sda3vgs # VFree подрос
Создаём том
ФС берём такую же, как на остальных томах — проверить можно через findmnt -no FSTYPE /. У меня везде ext4.
bash
lvcreate -L 5G -n lv_srv vg_sysmkfs.ext4 -L srv /dev/vg_sys/lv_srv
Переносим данные
Сначала убедиться, что в каталог никто не пишет прямо сейчас. Если там данные работающего сервиса — остановить его, иначе копия получится неконсистентной.
bash
ls -la /srvlsof +D /srv 2>/dev/nullmkdir -p /mnt/srv_newmount /dev/vg_sys/lv_srv /mnt/srv_newrsync -aAXH --numeric-ids /srv/ /mnt/srv_new/du -sh /srv /mnt/srv_new/ # цифры должны совпастьumount /mnt/srv_new
Флаги не для красоты: -A тянет ACL, -X — расширенные атрибуты вместе с метками SELinux, -H — жёсткие ссылки, --numeric-ids не даёт перепутать UID при разных базах пользователей.
Подменяем каталог
bash
mv /srv /srv.oldmkdir /srvecho '/dev/mapper/vg_sys-lv_srv /srv ext4 defaults 0 2' >> /etc/fstabsystemctl daemon-reloadmount -afindmnt -T /srv # теперь должен быть vg_sys-lv_srvdf -h /srv
Если на хосте SELinux в enforcing — добавьте restorecon -Rv /srv.
Обязательно перезагрузиться
Это не паранойя: единственный способ проверить, что строка в fstab написана правильно и том поднимется сам. Иначе сюрприз всплывёт через полгода при плановом ребуте, и уже никто не вспомнит почему.
bash
reboot# после стартаfindmnt -T /srv
Показывает lv_srv — всё, задача закрыта.
Убираем за собой
Старый каталог — это наш откат, поэтому удаляем его только когда всё точно работает и сервисы проверены:
bash
ls -la /srv /srv.old # сверить, что содержимое совпадаетrm -rf /srv.olddf -h / # корень разгрузился
Если что-то пошло не так
Пока /srv.old на месте, откат занимает полминуты:
bash
umount /srvrmdir /srvmv /srv.old /srvsed -i '/vg_sys-lv_srv/d' /etc/fstab
ссылка на оригинал статьи https://habr.com/ru/articles/1067494/