
在安裝我的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
停用交換分割區lvreduce
cs-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
現在可用空間可以分配給
/var
:lvextend -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 就可以了。