1. Linux 下的 /home 目录与 / 目录
一般情况下进入 Linux
系统下的 /
目录,会看到如下目录列表。
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到其中包含 home
目录,home
目录下将会为每个用户创建一个属于自己的用户目录,也称为用户自己的 “家目录”。更多根目录的信息可查看笔者的这篇博客 《Linux文件系统目录结构详解》。
2. 系统分区情况
在安装 Linux
操作系统过程中,常常可能会将 /home
目录与 /
目录挂载到不同的磁盘或不同的分区中,就会造成两者空间并不能公用,即当 /home
目录存满时,根目录富于的磁盘空间不能给 /home
使用;同样的,当 /home
目录分配的磁盘较大时,而根目录则常常会因为安装太多软件导致磁盘占满,而这时看着使用率只有 20%~50%
的 /home
目录则分外眼红。
为了解决这样的尴尬情况,那么就将 /home
目录和 /
根目录的空间合并起来就皆大欢喜啦。
3. 合并 /home 和 / 目录
- (1) 查看当前磁盘分配情况
[root@localhost /]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 63G 0 63G 0% /dev
tmpfs tmpfs 63G 0 63G 0% /dev/shm
tmpfs tmpfs 63G 18M 63G 1% /run
tmpfs tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 70G 4.9G 66G 7% /
/dev/nvme0n1p2 xfs 1020M 256M 765M 26% /boot
/dev/mapper/cl-home xfs 379G 2.7G 376G 1% /home
/dev/nvme0n1p1 vfat 599M 7.3M 592M 2% /boot/efi
tmpfs tmpfs 13G 56K 13G 1% /run/user/1000
这里需要注意的是,/home
目录的总空间大小,笔者这里的是 379 G
。
- (2) 将当前
/home
目录备份,并删除/home
分区
进入/
目录
[root@localhost /]# cd /
将 /home
目录备份
[root@localhost /]# tar -zcvf home.tar.gz /home
卸载 /home
目录
[root@localhost /]# umount /home
若提示 umount: /home: target is busy.
,则说明有其他进程正在使用,确定主要程序已关闭的情况下还提示该信息,则执行下面步骤:
[root@localhost /]# fuser -m /dev/mapper/cl-home
该命令会打印出正在使用该磁盘的进程 ID
,如下
/dev/dm-2: 2876m 2889c 2892c 2944c 2949cm 2983c 2988c 3042cm 3047c 3050c 3140cm 3226c 3230cm 3231cm 3233c 3235c 3247c 3253cm 3257cm 3264cm 3274c 3289cm 3297c 3302c 3306c 3311c 3317cm 3319c 3320c 3321c 3322cm 3329cm 3333cm 3335cm 3337c 3343cm 3346cm 3348cm 3349c 3352cm 3354cm 3359cm 3362cm 3365cm 3410cm 3418cm 3422cm 3423cm 3426c 3435cm 3476cm 3495c 3501c 3514cm 3531cm 3590c 4003cm 4041c 4051cm 4065c
然后从前往后逐个 kill
掉该进程 :
[root@localhost /]# kill -9 2876
[root@localhost /]# fuser -m /dev/mapper/cl-home
/dev/dm-2: 2889c 2892c 2944c 2949cm 2983c 2988c 3042cm 3047c 3050c 3140cm 3226c 3230cm 3231cm 3233c 3235c 3247c 3253cm 3257cm 3264cm 3274c 3289cm 3297c 3302c 3306c 3311c 3317cm 3319c 3320c 3321c 3322cm 3329cm 3333cm 3335cm 3337c 3343cm 3346cm 3348cm 3349c 3352cm 3354cm 3359cm 3362cm 3365cm 3410cm 3418cm 3422cm 3423cm 3426c 3435cm 3476cm 3495c 3501c 3514cm 3531cm 3590c 4003cm 4041c 4051cm 4065c 7826m
[root@localhost /]# kill -9 2889
[root@localhost /]# fuser -m /dev/mapper/cl-home
/dev/dm-2: 2892c 2944c 2983c 2988c 3042cm 3047c 3247c 3253cm 3257cm 3264cm 3274c 3289cm 3297c 3302c 3306c 3311c 3418cm 3435cm 3476cm 3501c 3514cm 3531cm 4041c 4051cm 4065c
[root@localhost /]# kill -9 2889
[root@localhost /]# fuser -m /dev/mapper/cl-home
/dev/dm-2: 2892c 2944c 2983c 2988c 3042cm 3047c 3247c 3253cm 3257cm 3264cm 3274c 3289cm 3297c 3302c 3306c 3311c 3418cm 3435cm 3476cm 3501c 3514cm 3531cm 4041c 4051cm 4065c
[root@localhost /]# kill -9 2892
[root@localhost /]# fuser -m /dev/mapper/cl-home
/dev/dm-2: 2944c 2983c 2988c 3042cm 3047c 3247c 3253cm 3257cm 3264cm 3274c 3289cm 3297c 3302c 3306c 3311c 3418cm 3435cm 3476cm 3501c 3514cm 3531cm 4041c 4051cm 4065c
[root@localhost /]# kill -9 2944
[root@localhost /]# fuser -m /dev/mapper/cl-home
基本上 kill
掉前几个(3
或 5
个)基本其它的也就都相继消失了。
然后再执行 umount home
,就可以成功卸载 /home
目录的挂载了。
[root@localhost /]# umount /home
再将 /home
目录的磁盘分区移除:
[root@localhost /]# lvremove /dev/cl/home
Do you really want to remove active logical volume cl/home? [y/n]: y
Logical volume "home" successfully removed.
- (3) 扩展
/
根目录
使用lvextend
命令将/
目录所在的物理分区扩容:
[root@localhost /]# lvextend -L +379G /dev/cl/root
[注]:这里的增加的容量应该不能超过之前 /home 挂载点的大小,一般选择全部分配过去。
执行 xfs_growfs
命令扩展 xfs
[root@localhost /]# xfs_growfs /dev/cl/root
4. 恢复 /home 目录原有内容
将之前打包备份的 /home
目录重新解压出来
[root@localhost /]# tar -zxvf home.tar.gz
这时候查看 home
目录已经恢复到原来的样子了
[root@localhost /]# ll home
5. 删除 /etc/fstab 中 /home 的启动挂载点
打开并修改 /etc/fstab
文件,将开机自动挂载的 /home
节点删除,注意这一步很关键,如若未删除,则会导致开机自动进入救援模式(emergency mode)
,不过也不是没有办法,在救援模式中,输入 root
密码,进入救援模式,再修改 /etc/fstab
文件保存退出也可以,但何必留此后患,自找麻烦呢。
[root@localhost ~]# vim /etc/fstab
将 home
挂载点注释或删除,保存并退出即可。
#
# /etc/fstab
# Created by anaconda on Fri Jan 1 04:35:40 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=bbcc2133-84d1-4b8c-aca4-064f18929e67 /boot xfs defaults 0 0
UUID=699D-E50D /boot/efi vfat umask=0077,shortname=winnt 0 2
#/dev/mapper/cl-home /home xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
6. 查看新的磁盘分配情况
再次查看磁盘分配和使用情况,就已经发现,没有了 /home
目录的占用,而在 /
目录下增加了 /home
原有的磁盘空间。
[root@localhost /]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 63G 0 63G 0% /dev
tmpfs tmpfs 63G 0 63G 0% /dev/shm
tmpfs tmpfs 63G 18M 63G 1% /run
tmpfs tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 448G 7.6G 441G 2% /
/dev/nvme0n1p2 xfs 1020M 256M 765M 26% /boot
/dev/nvme0n1p1 vfat 599M 7.3M 592M 2% /boot/efi
tmpfs tmpfs 13G 0 13G 0% /run/user/0
tmpfs tmpfs 13G 0 13G 0% /run/user/42