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 掉前几个(35 个)基本其它的也就都相继消失了。
然后再执行 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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐