Linux将硬盘2容量分配给硬盘1的根目录(扩容)
原因与需求:最近随着用户在服务器上上传的数据集增加,原来的根目录下450G左右的容量已经占用了82%,接近预警线了。而机器实际还有一块6T的机械硬盘(/dev/sda)挂载在了/mnt/sda目录下。于是想把机械的容量转移到根目录下。使用df -Th
命令可以看到目前机器的硬盘容量分配情况。
需要注意的是,我们机器上的硬盘已经进行了分区格式化并且已经挂载在一个目录下了的。如果是新硬盘插上之后是需要先分区(fdisk /dev/硬盘名
),再格式化(mkfs.ext4 /dev/区块名
)才能挂载的。
-
基本概念:linux文件系统基本概念:物理卷(Physical Volume, PV),卷组(Volume Group, VG),逻辑卷(Logical volume, LV),这三个从下至上演变成我们熟悉的文件。最后一层逻辑卷可以挂载到某个文件夹,其大小也就决定了这个文件夹的容量大小,最底层的物理卷就是硬盘的分区,而卷组则是可以将硬盘分区组合起来称为一个更大容量的空间,这样不同硬盘的分区也是可以一起用的。
这三个’空间‘也对应着三组命令,即我们常见的PV、VG、LV命令。
-
我们的目标是对根目录/进行扩容,其做法是:如果卷组中有多余的空间,直接使用
lvextend
命令扩容;如果卷组中没有多余空间,则需要先从物理卷中添加分区进入对应的卷组中。-
从上面的结果看到根目录对应的文件系统是
dev/mapper/cl-root
,这说明根目录对应的逻辑卷(lv)名称是’root‘,该逻辑卷下面的卷组(vg)是’cl‘。使用vgdisplay
查看卷组容量情况:
可以看到卷组此时并没有多余的空间,查看物理卷的分配情况:
pvdisplay
这个时候看到,对应底层的物理卷就是机器上的固态硬盘,这个硬盘没有分区,且所有的容量都已经分配了,而且机械硬盘没有制作成物理卷。
于是接下来的思路就是:
- 将机械硬盘制作为物理卷。
- 将制作的物理卷添加到cl这个卷组中,这样,卷组中就多出来机械硬盘的空间了。
- 将cl卷组中的空闲空间交给root这个逻辑卷即可。
-
将机械硬盘制作为物理卷
-
由于机械硬盘(/etc/sda)已经被挂载到/mnt/sda目录,需要先卸载才能制作为物理卷:
-
卸载:
umount /mnt/sda
-
创建物理卷:
pvcreate /dev/sda
需要抹除原来的ext4签名才能创建成功。
-
查看现在系统中的物理卷情况:
可以看到多出来一个物理卷/dev/sda。
-
-
使用卷组命令将新的物理卷添加到对应的cl卷组中:
vgextend cl /dev/sda
再次查看卷组容量发现已经多出来的5.46T空闲容量。
-
使用lv命令从卷组空闲容量分配到逻辑卷root中:
lvextend -L +5T /dev/cl/root
执行结束之后还需要重新计算磁盘大小才能使用:
resize2fs /dev/cl/root
ext4使用的重新计算命令是resize2f,xfs文件系统的调整命令是xfs_growfs(只能增大)。
再次使用
df -h
命令即可看到根目录的容量已经增大。
-
-
另记:还有一种不那么麻烦的方式是直接更改机械硬盘的挂载目录,但根目录这种敏感的目录不建议操作。以
/home
目录为例,将机械硬盘挂载到/home
下可以先将原来的/home
目录备份,然后直接使用mount /etc/sda /home
命令挂载,之后再将原来的文件复制进新的/home
,设置开机自动挂载即可。这里仅提供思路。