1. 背景
Suse Linux本身非常少见,在实际项目中用过最多的是CentOs和RedHat版本的Linux,Linux各个发行版只是微小差异,命令基本上一样。有一个数仓的测试环境中,总磁盘大小为1T,根目录/挂载了300G,剩下的600多G挂载到了/home目录下,磁盘空间分配非常不合理,根目录磁盘已经被Oracle的数据库占满了,而/home目录只使用了几十个G,根目录占满之后,数仓的调度几乎无法运行,有些时候连接Oracle都成问题。甲方又不给增加容量,还要我们自己去扩容。
2. 操作步骤
2.1 备份home目录
服务器的根目录已经100%,根本没有办法存放备份文件,不过我自己的机器发现/run目录下有空间可以存放,备份文件存放在/run目录有方向,后面的操作步骤可能要重启才能完成,重启之后/run目录底下的备份文件自动删除了,可能再也无法恢复,因此备份之后,最后拷贝一份到别的机器上。
tar cvf /run/home.tar /home
2.2 卸载home目录
要先终止所有使用/home文件系统的进程,也可以自己手动停止。
fuser -km /home
我的由于docker是在home底下的,因此我手动停止了docker
service docker stop
卸载home目录
umount /home
2.3 删除逻辑分区
lvremove /dev/mapper/system-home
其中system-home主要取决于你的磁盘逻辑分区卷的名称,一般情况centos-home之类的,我的suse的linux默认的名称是system-xxx的名称,下图已经完成了扩容的,只是展示一下逻辑分区的名称,开始的时候有一个
/dev/mapper/system-home逻辑卷挂载到/home目录下
(base) localhost:~ # df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 4.5G 3.3G 58% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/system-root 788G 277G 477G 37% /
/dev/sda1 500M 5.2M 495M 2% /boot/efi
tmpfs 1.6G 0 1.6G 0% /run/user/461
tmpfs 1.6G 0 1.6G 0% /run/user/0
选择y,如果没有弹出选择项或报错,证明还有程序未停止,需要用到/home目录,这个只能自己猜测可能是那个进程了。
(base) localhost:~ # lvremove /dev/mapper/system-home
Do you really want to remove and DISCARD active logical volume system/home? [y/n]: y
Logical volume "home" successfully removed
2.4 扩大根目录所在逻辑卷
服务器的/dev/mapper/system-root的逻辑挂载在/根目录,既然要扩容,我就把已经删除/dev/mapper/system-home的磁盘空间全部扩展给了/dev/mapper/system-root,一般需要根据自己的实际情况进行调整,命令如下:
(base) localhost:~ # lvextend -L +606G /dev/mapper/system-root
Rounding size to boundary between physical extents: 606 GiB.
Size of logical volume system/root changed from 801.12 GiB (205088 extents) to 806.69 GiB (206512 extents).
Logical volume system/root successfully resized.
lvextend逻辑扩展命令,+606G 则表示在原有基础上扩大606G ,/dev/mapper/system-root是需要扩大的逻辑卷名称
2.5 查看逻辑卷类型
后面要根据逻辑卷类型选择不同的命令,因此首先要查看逻辑卷类型,根据类型执行扩容命令,相当于格式化
(base) localhost:~ # df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 18M 7.8G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/system-root ext4 892G 312G 541G 37% /
/dev/sda1 vfat 500M 5.2M 495M 2% /boot/efi
overlay overlay 892G 312G 541G 37% /var/lib/docker/overlay2/d64369565a31e8f9c46905d2ae8d6d4856e1188f0e3ef9a26e9ec1e527af881f/merged
overlay overlay 892G 312G 541G 37% /var/lib/docker/overlay2/af28b27b6eb4cd23c9c636f3ca5626f2c626c9f2be1d8311b93ef2c3ccf7ff1d/merged
overlay overlay 892G 312G 541G 37% /var/lib/docker/overlay2/ca4ce43a1c24873f6eafe9a6b256c223f0622989050c150bbe33dfbd36588e0f/merged
overlay overlay 892G 312G 541G 37% /var/lib/docker/overlay2/d1ec937a44b57d702284d26c17c2757f58d995ce6e63b70751a93b0f0c47efd6/merged
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/3ed03aee3cd32a20b9c898ca8da9e67258a5f4a1866d982c66886a4c79e8faca/mounts/shm
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/64d5077f1266ba607620eb7de0b3ede2b17577eff894576e2b615b0cf234187d/mounts/shm
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/c031ddedbc5dcd36b8dbc6d7c77007566d8eb35d23e556a8c5c8a64fa3370a7d/mounts/shm
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/dd58a8469740466b13584f04229220cfaf362a705d777e5df1b1219dcbecf80a/mounts/shm
tmpfs tmpfs 1.6G 8.0K 1.6G 1% /run/user/0
(base) localhost:~ #
上面显示/dev/mapper/system-root为ext4的类型
2.6 执行扩容
我这边的逻辑卷的类型为ext4,命令如下:
resize2fs /dev/mapper/system-root
(base) localhost:~ # resize2fs /dev/mapper/system-root
resize2fs 1.43.8 (1-Jan-2018)
Filesystem at /dev/mapper/system-root is mounted on /; on-line resizing required
old_desc_blocks = 101, new_desc_blocks = 114
The filesystem on /dev/mapper/system-root is now 237682688 (4k) blocks long.
如是xfs类型,命令就不一样了。命令可能是
xfs_growfs /dev/mapper/system-root 这个没有测试过
2.7 恢复home目录
因为是测试环境,我没有选择重建home的分区,把所有磁盘空间都分配给了/根目录。
tar xvf /run/home.tar -C /
上面的命令只是恢复了home目录,千万要记住/run/home.tar执行命令过程中需要重启,一定要拷贝到其他地方去,不然重启之后,home.tar文件就不存在了,无法恢复
2.8 检查开机启动挂载的目录
到2.7解决基本已经完成了根目录的扩容了,但不是万事大吉,重启可能无法正常进入到系统,原因可能有很多,我也不能打包票说大家碰到的问题都一样。我碰到的问题时无法正常登录系统,是因为已经删除/dev/mapper/system-home的挂载信息还在/etc/fstab里面,机器重启之后,会读取/etc/fstab配置,自动挂载磁盘。
因此需要删除掉已经删除的逻辑卷/dev/mapper/system-home,删除之后下图所示:
(base) localhost:~ # vi /etc/fstab
/dev/system/swap swap swap defaults 0 0
/dev/system/root / ext4 defaults 0 1
UUID=3960-7C74 /boot/efi vfat codepage=936 0 2
~
上面主要删除已经不存在逻辑卷配置。如果是因为逻辑卷不存在,导致挂载问题,无法直接进入系统,则不要慌,可能还是可以通过root来登录的,只是挂载失败,导致无法直接进入系统。一般根据提示进行操作即可。