相关工具
- LVM
- 可以实现动态扩容
- 是虚拟的,想要物理扩容需要通过另一个启动盘使用
gparted
调整/
的大小 lvextend
命令可以通过apt-get install lvm2
安装
- fdisk
- 用于分区管理
fdisk -l
可列出分区表fdisk /dev/sda
可管理sda
的分区,常用命令包括n
新建分区,d
删除分区,t
更改分区格式,p
打印分区表(记得先打印分区表,搞清楚目标分区的编号)
硬盘管理
- 块设备:给机器插上新的硬盘。
- 硬盘分区:把块设备分成多个分区(1个分区用尽整块磁盘也可以,无所谓),每个分区的大小也是固定的。
- 创建物理卷(PV):按照LVM的规则,把每个硬盘分区创建为一个物理卷(physical volume)。
- 创建卷池(VG):新建的物理卷就像一桶矿泉水,把它们加入到一个VG大池子里面,这样池子里的水(硬件空间)就会变多。
只有在同一卷池里的空间,才能用lvextend
扩容 - 创建逻辑卷(LV):想要划分一块硬盘空间拿来使用,只需要从VG里面取一瓢水出来即可,这个划分出来的硬盘空间叫做一个LV(logical volume)。
- 文件系统:现在可以对LV制作文件系统,比如:ext4格式。
- 挂载目录:现在可以把在做好文件系统的LV挂载到某个目录,就可以访问了。
中间三个是 LVM 新增的,其他部分是传统硬盘管理的内容。LVM 教程详见 博客。
根目录扩容
1. 了解 ubuntu server 的分区结构
可以使用 lsblk
工具查看,并把握 /
目录相关的 LVM 信息,比如卷池名 ubuntu--vg
,逻辑卷名 ubuntu--vg-ubuntu--lv
通过 df -h
命令查看文件系统的占用信息,找到目标卷池的位置为 /dev/mapper/ubuntu--vg-ubuntu--lv
进一步还可以用 vgdisplay
命令查看具体的卷池信息,需要注意其中的 Free
空间大小,如果是 0,则需要往卷池中加入其他物理卷才能给 /
的逻辑卷扩容
2. 扩容磁盘
首先需要为 ubuntu server 加装新的存储空间,系统中会多出一个块设备。
如果是 ubuntu 虚拟机,可以直接调整虚拟机的磁盘大小,不过会引起 fdisk
的报错,详见本文最后。
3. LVM 分区
假设我们直接对原始硬盘进行扩容,ubuntu 中对应为
sda
磁盘,用parted -l
完成修复
- 使用
fdisk /dev/sda
配置sda
磁盘,用n
指令新建一个分区,全选默认,记下新分区的编号sda4
- 继续用
t
指令修改上述新建分区的文件系统,输入新分区的编号4
,选择Linux LVM
对应的代码(不同系统环境可能不一样,用L
查看,我配的时候是十进制 31) - 使用
p
指令确认分区结构,无误后用w
指令保存并退出
fdisk
在执行 w
指令之前都不会真正修改文件系统,非常安全,可以大胆尝试
4. 逻辑扩容
现在只对新的空间进行了分区,还没有创建卷,现在就要用到我们之前记录的那些卷号信息了
- 在新分区上创建一个 PV:
pvcreate /dev/sda4
- 将该 PV 加入到目标 VG:
vgextend ubuntu--vg /dev/sda4
- 确认 VG 信息:
vgdisplay
- 扩容目标 LV:
- 指定大小:
lvresize -L 20G /dev/mapper/ubuntu--vg-ubuntu--lv
- 将全部剩余空间扩容进去:
lvresize -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
- 指定大小:
- 更新文件系统:
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
- 确认扩容完成:
df -h
潜在问题
- 虚拟机系统从外部调整磁盘大小后,
fdisk
会提示表头信息与实际大小不符- 使用
parted -l
会弹出是否修复的询问,选择fix
- 如果没有修复询问,使用
sudo
权限执行
- 使用