前言

CentOS 7 安装之后,默认使用 LVM (逻辑卷管理)管理磁盘,默认的 home 逻辑卷很大,但是 root 逻辑卷相对较小,有时需要调整一下分区,将 home 逻辑卷的空间挪一部分到 root 逻辑卷,由于使用 LVM,使调整变得非常简单。

环境说明

CentOS 7(Minimal Install)
#cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

本例服务器用户如下

User

Home

Descprition

root

/root

root 用户目录

admin

/home/admin

admin 用户目录

调整逻辑卷

查看逻辑卷大小

调整需要先 umount home 分区,所以需要使用 root 用户登录

#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 1.3G 49G 3% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/mapper/cl-home 75G 33M 75G 1% /home
/dev/sda1 1014M 211M 804M 21% /boot
tmpfs 100M 0 100M 0% /run/user/0

可以看到 root 逻辑卷(cl-root)的大小是 50G,home 逻辑卷(cl-root)的大小是 75G。

备份 /home 下的文件

#cd ~
#cp -r /home ~/homebak

卸载 /home

#umount /home

注意

如果出现 home 存在进程,则需要先终止 home 下的进程,再卸载 /home

#umount /home
mount: /home: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

可以使用 lsof 或 fuser 命令查看,并终止进程,本例使用 fuser 命令。

CentOS 7(Minimal Install)默认没有安装 fuser 命令,需要安装一下。

#yum installpsmisc
#fuser -mvik /home/
USER PID ACCESS COMMAND
/home: root kernel mount /home
root 1072 ..c.. bash
Kill process 1072 ? (y/N) y#umount /home

此时再查看 cl-home 已经卸下了

#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 1.3G 49G 3% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 211M 804M 21% /boot
tmpfs 100M 0 100M 0% /run/user/0

删除 home 的逻辑卷

#lvremove /dev/mapper/cl-home
Do you really want to remove active logical volume cl/home? [y/n]: y
Logical volume "home" successfully removed

增加 root 逻辑卷的大小

扩展 root 所在的逻辑卷,本例中 home 逻辑卷大小有 75G,本例移动 40G 到 root 逻辑卷。

#lvextend -L +40G /dev/mapper/cl-root
Size of logical volume cl/root changed from 50.00 GiB (12800 extents) to 90.00 GiB (23040 extents).
Logical volume cl/root successfully resized.

可以看到 root 逻辑卷大小有 50G 增加到 90G。

之后需要扩展 /root 文件系统:

#xfs_growfs /dev/mapper/cl-root
meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 23592960

重建 home 的逻辑卷

75 - 40 = 35, 还有 35G 可用,全部用于 home 逻辑卷。

#lvcreate -L 35G -n home cl
Volume group "cl" has insufficient free space (8959 extents): 8960 required.

具体可能发现会差一点,如上显示:只有 8959,不够 8960。

剩余可以具体查看一下

#vgdisplay
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <127.00 GiB
PE Size 4.00 MiB
Total PE 32511
Alloc PE / Size 23552 / 92.00 GiB
Free PE / Size 8959 / <35.00 GiB
VG UUID 6Rgcnh-0WVI-eyLd-clZ8-fkWA-qYe1-CW3QbJ

可以看到 Free PE 是可用的大小,算起来比较费劲,如果真要算:8959 * 4 = 35836M。

可以使用 百分比 设置全部使用

#lvcreate -l 100%FREE -n home cl
Logical volume "home" created.

之后创建文件系统

#mkfs.xfs /dev/mapper/cl-home
meta-data=/dev/mapper/cl-home isize=512 agcount=4, agsize=2293504 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=9174016, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=4479, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

挂载 /home

#mount /dev/mapper/cl-home /home

此时 /home 文件夹下是空的

恢复 home 下的文件

将开始备份的 ~/homebak 下的文件恢复

#mv ~/homebak/admin/ /home/

设置文件和目录的权限

注意

请根据实际情况设置,本例以 admin 用户为例

修改文件所属的用户组和用户

chown -R admin:admin /home/admin/#ll /home/

total 0

drwx------. 2 admin admin 62 Apr 28 09:13 admin

一般还需要修改安全上下文,具体如下

设置 /home 目录的安全上下文

#chcon -t home_root_t /home

设置 admin 用户家目录 /home/admin 下文件和目录的安全上下文

#chcon -t user_home_t -R /home/admin/;

设置 /home/admin 家目录的安全上下文

#chcon -t user_home_dir_t /home/admin/ ;

此时权限设置完毕,admin 可以登录了。

查看最终结果

#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 90G 1.3G 89G 2% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 1014M 211M 804M 21% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/cl-home 35G 33M 35G 1% /home

参考资料