在安装我的 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
有什么办法可以在不丢失任何数据的情况下调整此分区的大小。
不,实际上,系统中的大部分空间总是被
/var
通常可变数据所在的地方使用——数据库、 Docker、日志等,而 Linux 的,如果系统管理得当/
,很少使用超过 10 GiB 的空间.不仅你的 LVM 不是最理想的:我会把整个 Debian 安装和一些服务放入你在 ESP 和
/boot
. (我习惯于创建为系统分配 4GiB 的 VM。绰绰有余。)好吧,最好的解决方案是减少超大的根文件系统,但这无法在线完成。您需要启动一些应急媒体,激活您的 VG,然后减少文件系统和逻辑卷,考虑到分区的大小,这可能会消耗大量时间。也有可能把事情搞砸。如果你赶时间,你可以改变一下:在根目录下创建一些目录,将 Docker 数据移入其中,然后将其绑定挂载到 Docker 数据所在的 var 中。您需要暂时停止 Docker 和所有容器。是这样的:
这样,Docker 将使用超大根文件系统上的空间,同时在通常的位置可用。在
/etc/fstab
你需要添加以下条目,所以这个配置将在重启后继续存在:但请记住,这是一种非常丑陋的 hack,它可以为您争取一些时间,但也会带来一些问题,因此请寻找机会从根目录回收空间并将其分配给
/var
适当的位置。让这成为教训:永远不要从一开始就分配所有可用空间。保留其中的一些(大部分)未分配。您始终可以轻松地添加空间并在线执行此操作,但回收它非常困难、耗时且容易出错,并且需要停机。最好管理空间,这样您就永远不需要回收它。
作为这个答案的替代方案
您的系统正在使用 LVM 逻辑卷。
卷组中可能还有一些未使用的空间,您可以将其分配给 extend 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 卷并扩展文件系统系统
你的
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 并重新创建它:
rsync -avHAXx /your-rootfs /somewhere
(确保/somewhere
在另一个卷上 - 很容易找到 8.2 GB 的备用空间 - 您的交换卷很可能过大)lvremove
根卷并以适当的大小重新创建它。这次我建议格式化为ext4。rsync -avHAXx /somewhere /your-rootfs
把东西复制回去。grub.cfg
,但我不熟悉 CentOS(在 Debian 上它只是update-grub
)。我想指出的其他注意事项:
grub.cfg
./boot
不必依赖自己的卷。GRUB 可以很好地读取 LVM 和您的 rootfs 文件系统。/root
也可能超大(我的 Proxmox VE 服务器使用 16 GB - 我不打算将数据放在主机上)。