Расширить раздел /var на Centos Stream 8

Расширить раздел /var на Centos Stream 8

Во время установки моей ОС Centos Stream 8 я указал размер /var в 10 ГБ, думая, что этого будет более чем достаточно, но после того, как я начал использовать Docker, я обнаружил, что он занимает слишком много места на разделе /var, как показывает команда df:

[root@compute-07 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs              28G     0   28G   0% /dev
tmpfs                 28G     0   28G   0% /dev/shm
tmpfs                 28G  179M   28G   1% /run
tmpfs                 28G     0   28G   0% /sys/fs/cgroup
/dev/mapper/cs-root  371G  8.2G  363G   3% /
/dev/mapper/cs-home  100G  2.0G   98G   2% /home
/dev/mapper/cs-var    10G  9.0G  1.1G  90% /var
/dev/sda2            2.0G  412M  1.6G  21% /boot
/dev/sda1            2.0G  7.3M  2.0G   1% /boot/efi
/dev/mapper/cs-tmp    10G  105M  9.9G   2% /tmp
tmpfs                5.5G   16K  5.5G   1% /run/user/42
overlay               10G  9.0G  1.1G  90% 

/var/lib/docker/overlay2/77f74478297ca61595f0003d35c7323ec627adb44d94cef92c2b4a3c97319a66/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/5eeb399ce4a3c0d8065d63123985269a359fa66f4d20a8486326e466a48a0128/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/08d42ca66e3a5974bc305b502bca2aa4d22aa7ddcab6ea14c6af300b3abb3a70/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/1a45cb32b127fdf8f5c1483385139a865fdc69260ec20f3dcd4c56ad6890f909/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/ebb9af8edee824a4013dcd526e33e22272283bdee508fd43208fade557def728/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/41d55822108d04c85f348dc134fe6929b0e67f6b3bd7e0af147633bfd3a252c1/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/5cf3e8e06e9b4c2e6ed65164d91aed19f63d55e91524d6563e9f16b6709d29be/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/1d1eda94e68596b00d0cabcc75a7c91999a1c845ebd02c733bb9f00ac66a26f0/merged
overlay               10G  9.0G  1.1G  90% /var/lib/docker/overlay2/bc9e9a28c6761ad89a9457110642156ebd2b4d77de841f2a3ac9ffbaa90e4b63/merged

tmpfs                5.5G     0  5.5G   0% /run/user/0

Это вывод команды lsblk, так как /var находится в отдельном разделе, а / и /home — в другом, я не смог найти способ изменить его размер или создать другой раздел, а затем связать его с /var.

[root@compute-07 ~]# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 558.4G  0 disk 
├─sda1        8:1    0     2G  0 part /boot/efi
├─sda2        8:2    0     2G  0 part /boot
└─sda3        8:3    0 554.4G  0 part 
  ├─cs-root 253:0    0 370.4G  0 lvm  /
  ├─cs-swap 253:1    0    64G  0 lvm  [SWAP]
  ├─cs-tmp  253:2    0    10G  0 lvm  /tmp
  ├─cs-home 253:3    0   100G  0 lvm  /home
  └─cs-var  253:4    0    10G  0 lvm  /var
sr0          11:0    1  1024M  0 rom  

Есть ли способ изменить размер этого раздела без потери данных?

решение1

Нет. На самом деле, большая часть пространства в системе всегда используется там, /varгде обычноварiable данные живут — базы данных, Docker, журналы и т. д., в то время как Linux /,редкозанимает более 10 ГиБ пространства при правильном управлении системой.

Не только ваш LVM неоптимален: я бы поместил всю установку Debian с некоторыми службами в пространство, которое вы тратите впустую в вашем ESP и /boot. (У меня была привычка создавать виртуальные машины с 4 ГБ, выделенными для системы. Более чем достаточно.)

Итак, лучшим решением было бы уменьшить размер вашей слишком большой корневой файловой системы, но это невозможно сделать онлайн. Вам нужно загрузить какой-нибудь спасательный носитель, активировать вашу VG, а затем уменьшить файловую систему и логический том, и это может занять значительное время, учитывая размер раздела. Также можно все испортить. Если вы торопитесь, вы можете сделать хитрость: создать какой-нибудь каталог в корне, переместить в него данные Docker и смонтировать его обратно туда, где находятся данные Docker в var. Вам нужно остановить Docker и все контейнеры на некоторое время. Что-то вроде этого:

systemctl stop docker.service
mkdir /var-lib-docker
mv /var/lib/docker/* /var-lib-docker
mount --bind /var-lib-docker /var/lib/docker
systemctl start docker.service

Таким образом, Docker будет использовать пространство в слишком большой корневой файловой системе, оставаясь доступным в обычном месте. В вам /etc/fstabнужно добавить следующую запись, чтобы эта конфигурация пережила перезагрузку:

/var-lib-docker /var/lib/docker none bind 0 0

Но помните, что это довольно некрасивый хак, который может выиграть вам немного времени, но также и создать некоторые проблемы, поэтому ищите возможность освободить место в корне и распределить его /varправильно.

И пусть это будет уроком: никогда не выделяйте все доступное пространство с самого начала. Оставляйте часть (большую его часть) нераспределенной. Вы всегда можете легко добавить пространство и сделать это онлайн, в то время как его возвращение очень сложно, требует много времени и подвержено ошибкам, и это требует простоя. Лучше всего управлять пространством так, чтобы вам никогда не пришлось его возвращать.

решение2

В качестве альтернативыэтот ответ

Ваша система использует логические тома LVM.

В группе томов может остаться неиспользуемое пространство, которое можно назначить для расширения var.

В случае, если неиспользованного места не осталось или его слишком мало, вы можетеуменьшить или удалить подкачку LVMи освободившееся при этом место использовать для расширения /var.

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

Подход к этому будет примерно таким (команды не проверены, поэтому не копируйте их полностью, но принцип должен быть верным)

  • Создайте временный или постоянный файл подкачки в вашей слишком большой корневой файловой системе в качестве замены, пока вы переводите раздел подкачки в автономный режим.

    • dd if=/dev/zero of=/swap-file count=65536 bs=1M
    • mkswap /swap-file
    • swapon /swap-file
  • swapoff /dev/mapper/cs-swap чтобы отключить раздел подкачки

  • lvreducecs-swap с последующим повторным форматированием оставшегося раздела подкачки LVM mkswapи повторной активацией меньшего пространства подкачки с помощьюswapon

  • или удалить его прямо сlvremove

Используйте только что созданное свободное пространство LVM для расширения тома /var LVM и расширения файловой системы.

lvextend -l +100%FREE --resizefs /dev/mapper/cs-var

решение3

Ваш dfи lsblkне говорите нам, какие у них файловые системы. Чтобы уменьшить том (раздел или LV), файловая система на нем должна быть сначала уменьшена. Обычный выбор для rootfs, ext4, может быть уменьшен в автономном режиме. Однако выбор файловой системы по умолчанию для CentOS (и RHEL-подобных дистрибутивов) — XFS, и в настоящее время ее уменьшение невозможно.

Как уже отмечали другие в своих ответах, ваш rootfs use 8.2 GB несложно сделать резервную копию. Поэтому в зависимости от типа вашей файловой системы rootfs у вас есть следующие варианты:

Если это ext4, вы можете сжать его на месте:

  • Перезагрузите другую систему, например ArchISO, поскольку ext4 можно сжать только в автономном режиме.

  • Убедитесь, lvsчто отображается ваш раздел, затемe2fsck -f /dev/mapper/cs-root

  • resize2fs -M -p /dev/mapper/cs-root

    • В качестве альтернативы, если вы знаете желаемый размер rootfs, вы можете указать его вместо использования -M:

      resize2fs -p /dev/mapper/cs-root 15G

      Обратите внимание, что лучше оставить немного места для уменьшения базового тома.

  • Освободите место у РНlvreduce -L 16G cs/root

  • Измените размер файловой системы обратно до размера тома:resize2fs -p /dev/mapper/cs-root

  • Теперь свободное место можно раздать /var:lvextend -l +100%FREE cs/var

Однако если это XFS, лучшим вариантом будет сделать резервную копию rootfs и создать ее заново:

  • Загрузите ArchISO, как описано выше.
  • rsync -avHAXx /your-rootfs /somewhere(Убедитесь, /somewhereчто он находится на другом томе — легко найти 8,2 ГБ свободного места — ваш раздел подкачки, скорее всего, слишком большой)
  • lvremoveкорневой том и пересоздайте его с соответствующим размером. На этот раз рекомендую отформатировать в ext4.
  • rsync -avHAXx /somewhere /your-rootfsчтобы скопировать все обратно.
  • При необходимости обновите конфигурацию GRUB — насколько мне известно, идентификатор LV часто записывается grub.cfgв качестве подсказки, но я не знаком с CentOS (в Debian это было бы просто update-grub).
  • Распределите свободное пространство в VG, как указано выше.

Другие замечания, на которые я хотел бы обратить внимание:

  • Ваш системный раздел EFI (ESP) слишком большой. Для типичного сервера Linux 256 МБ будет более чем достаточно (я использую 128 МБ на своем сервере Ubuntu). Он должен содержать только двоичный файл GRUB и очень простую версию grub.cfg.
  • /bootне обязательно должен находиться на своем собственном томе. GRUB может прекрасно читать LVM и вашу файловую систему rootfs.
  • В зависимости от конструкции вашего сервера, он, /rootскорее всего, также будет слишком большим (я использую 16 ГБ для своего сервера Proxmox VE — я не планирую размещать данные на хосте).
  • Вам действительно нужно 64 ГБ подкачки? Обычно мне хватает 8 ГБ.

Связанный контент