在 Centos Stream 8 上擴展 /var 分區

在 Centos Stream 8 上擴展 /var 分區

在安裝我的centos Stream 8作業系統期間,我為/var設定了10GB的大小,認為這已經足夠了,但是在我開始使用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變數可用的資料存在-資料庫、Docker、日誌等,而 Linux 的/很少當系統管理得當時,使用超過 10 GiB 的空間。

不僅您的 LVM 不是最理想的:我會將整個 Debian 安裝以及一些服務放入您在 ESP 和/boot. (我習慣創建虛擬機器並為系統分配 4GiB。綽綽有餘。)

那麼,最好的解決方案是減少過大的根檔案系統,但這無法在線上完成。您需要啟動一些救援介質,啟動 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 的發行版)的預設 FS 選擇是 XFS,目前無法縮小。

正如其他人在回答中指出的那樣,您的 rootfs 使用 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

      請注意,最好留出一些空間來縮小底層體積。

  • 從 LV 回收空間lvreduce -L 16G cs/root

  • 將檔案系統大小調整回磁碟區大小:resize2fs -p /dev/mapper/cs-root

  • 現在可用空間可以分配給/varlvextend -l +100%FREE cs/var

但是,如果是 XFS,最好的選擇是備份 rootfs 並重新建立它:

  • 像上面一樣啟動 ArchISO。
  • rsync -avHAXx /your-rootfs /somewhere(確保/somewhere在另一個磁碟區上 - 很容易找到 8.2 GB 的空閒空間 - 您的交換磁碟區很可能太大)
  • lvremove根卷並以適當的大小重新創建它。這次我建議格式化為ext4。
  • rsync -avHAXx /somewhere /your-rootfs將東西複製回來。
  • 如果需要,請更新您的 GRUB 配置 - AFAICT LV ID 通常會作為提示寫入grub.cfg,但我不熟悉 CentOS(在 Debian 上就很簡單update-grub)。
  • 如上所述在 VG 中指派可用空間。

我想指出的其他注意事項:

  • 您的 EFI 系統分割區 (ESP) 太大。對於典型的 Linux 伺服器,256 MB 應該足夠了(我在 Ubuntu 伺服器上使用 128 MB)。它只需要保存 GRUB 二進位檔案和一個非常基本的grub.cfg.
  • /boot不必依靠自己的體積生存。 GRUB 可以很好地讀取 LVM 和 rootfs 檔案系統。
  • 根據您的伺服器設計,您的伺服器/root也可能過大(我的 Proxmox VE 伺服器使用 16 GB - 我不打算將資料放在主機上)。
  • 您真的需要 64 GB 交換空間嗎?通常我只要 8 GB 就可以了。

相關內容