Ubuntu服务器在使用过程中创建的新用户,每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间,所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下,会很快的填满/home目录,导致服务器的硬盘空间不够用。
本篇博客通过添加额外的硬盘,实现对/home目录的扩容。 注意:本篇博客内容不采用换一块更大硬盘替代/home的方式,而是在保留原有/home的基础上,进一步拓展/home的空间。例如,服务器原有的/home目录大小为1TB,本博客会添加一块额外的2TB硬盘,组成一个3TB的更大的/home目录,并且不会损失原有的/home文件内容。
说明:本教程使用的系统为Ubuntu22.04。因为/home目录是Ubuntu系统日常使用过程中的系统目录,所以在当前开机状态下操作该目录是不被允许的,个人推荐使用一个Ubuntu系统的安装U盘,从U盘启动Ubuntu系统。具体从制作U盘和启动系统的过程自行百度。
ff@EVA-01:~$ sudo apt install lvm2
# 备份数据
ff@EVA-01:~$ sudo rsync -aAXHv --progress /home/ /mnt/backup/
# 创建第一个卷组
ff@EVA-01:~$ sudo pvcreate /dev/sda5
# 创建第二个卷组
ff@EVA-01:~$ sudo pvcreate /dev/sdb
Cannot use /dev/sdb: device is partitioned
这个错误是因为硬盘中额外的独立分区,或者旧系统的磁盘签名,需要将其全部抹除。对于硬盘中的额外分区,可以使用fdisk(以sdb空间为例):
# 以sdb为例
ff@EVA-01:~$ sudo fdisk /dev/sdb
使用 d 命令删除分区
使用 w 命令保存更改并退出
如果删除全部分区后依然出现上述错误,那需要抹除各种签名:
# 抹除所有的硬盘信息
ff@EVA-01:~$ sudo wipefs -a /dev/sdb
ff@EVA-01:~$ sudo pvdisplay
ff@EVA-01:~$ sudo vgcreate cat_home /dev/sda5 /dev/sdb
ff@EVA-01:~$ sudo lvcreate -n homelv -l 100%VG cat_home
逻辑卷的地位和我们前面获得的 /sda5,/sdb的地位相同,可以作为硬盘的盘符了,此时的 homelv 可以简单理解为是一个已经合并好的,大小为3TB的新硬盘空间。
ff@EVA-01:~$ sudo mkfs.ext4 /dev/cat_home /homelv
ff@EVA-01:~$ sudo lvdisplay
效果类似下图:
--- Logical volume ---
LV Path /dev/cat_home/homelv
LV Name homelv
VG Name cat_home
LV UUID 81f8L6-fFxb-H0TR-LJXu-Ifwl-fRQO-5kxD6v
LV Write Access read/write
LV Creation host, time ubuntu, 2023-12-29 14:50:52 +0800
LV Status available
# open 1
LV Size <2.42 TiB
Current LE 633119
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
ff@EVA-01:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name cat_home
PV Size 684.63 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 175265
Free PE 0
Allocated PE 175265
PV UUID cnlg0m-8G3T-Jab4-mEwR-AnKI-Uq1t-FALf30
--- Physical volume ---
PV Name /dev/sdb
VG Name cat_home
PV Size <1.75 TiB / not usable <4.34 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 457854
Free PE 0
Allocated PE 457854
PV UUID XeW7Hr-4ajr-HRKo-ezxZ-GyNX-a0lp-6Utfj5
ff@EVA-01:~$ sudo mount /dev/cat_home/homelv /mnt/new_home
ff@EVA-01:~$ sudo rsync -aAXHv --progress /mnt/backup/ /mnt/new_home/
# 卸载已挂载的盘符
ff@EVA-01:~$ sudo umount /home
ff@EVA-01:~$ sudo umount /mnt/backup/
ff@EVA-01:~$ sudo umount /mnt/new_home/
# 挂载原系统的/etc目录所在的磁盘
ff@EVA-01:~$ sudo mount /dev/sda1 /mnt/oldsys
# 挂载原系统的/etc目录所在的磁盘
ff@EVA-01:~$ sudo vim /mnt/oldsys/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda3 during installation
UUID=26a27c3d-b23f-484a-9a2b-1cb624d834a5 / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda2 during installation
UUID=7fabb7a1-c63f-407a-afb7-4272b9c51dea /boot ext4 defaults 0 2
# /boot/efi was on /dev/sda1 during installation
UUID=7576-5283 /boot/efi vfat umask=0077 0 1
# /home was on /dev/cat_home/homelv
/dev/cat_home/homelv /home ext4 defaults 0 2
# /home/A_DataSets0 was on /dev/sdc1 during installation
UUID=3632d36e-8b9a-4fc9-a202-3caddd5c3700 /home/A_DataSets0 ext4 defaults 0 2
# /home/A_DataSets1 was on /dev/sdd1 during installation
UUID=f439163a-4bd5-423b-888a-128564bc70cb /home/A_DataSets1 ext4 defaults 0 2
# swap was on /dev/sda4 during installation
UUID=3b0f58aa-e365-447a-98ba-e8ebc467985c none swap sw 0 0
/dev/disk/by-uuid/08bb9073-dd08-4689-9f3a-d71b5e9c4a0b /home/A_DataSets2 auto nosuid,nodev,nofail,x-gvfs-show 0 0
/dev/disk/by-uuid/e58b8ffb-fc27-47c6-9e41-1e9d809da14b /home/A_DataSets3 auto nosuid,nodev,nofail,x-gvfs-show 0 0
(来自一名励志用“普通话”讲技术的菜狗子~)