一、简述:
我们一般喜欢在windows平台的VMware中安装linux虚拟机,但是我们在安装后总是会出现预算不足的情况,比如根磁盘空间不足(默认为20GB,稍微存多点东西就不够了)。如果重装系统又太麻烦,那么如何扩容根的空间呢?今天我就来简述如何对系统的根目录进行扩容。
1.系统结构
我们安装的系统实际上是运行在逻辑磁盘上的,使用命令lsblk查看磁盘结构:
[root@localhost ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 10.5G 0 rom
1)sda磁盘
从磁盘结构中我们可以看到系统有一块磁盘sda,该磁盘就是我们安装系统时默认分配的磁盘,它就相当于真实的物理磁盘。
2)sda1分区
该磁盘有两个分区sda1和sda2,sda1为1GB挂载在了/boot中,该磁盘存储了引导加载程序、初始RAM文件系统、GRUB的配置文件等文件,这些文件都是系统启动相关的文件。
3)sda2分区
sda2分区就是我们的整个系统分区,系统会默认是创建了一个“ rl ”卷组,在该卷组中创建了一个逻辑卷“ root ”和逻辑卷“ swap ”,根就挂载在了root逻辑卷上。而另外一个2GB的swap卷就是交换空间使用的卷,通俗讲就是虚拟内存。
4)sr0光盘
sr0光盘中就是我们的系统安装镜像,当系统安装完成后就不再需要它了。当然,该镜像中包含了完整了软件包仓库,可以用来做yum源。光盘是只读的,不用担心损坏。
2.物理卷、卷组、逻辑卷
物理卷(PV)物理卷可以通过分区直接格式化为物理卷,物理卷是组成卷组的最小单元。物理卷不能直接挂载使用。
卷组(VG)卷组是物理卷的集合,他把物理卷组成一个集合,相当于一个存储池。卷组也不能直接挂载使用。
逻辑卷(LV)逻辑卷是从卷组存储池中划分出来了,逻辑卷就相当于真实的磁盘,可以直接格式化使用。
二、实验环境:
1.VMware 17 Pro
2.虚拟机CentOS 7
三、扩容根磁盘正规的方案:
最简单的方案就是在虚拟机中直接添加磁盘,然后将这些磁盘格式化成物理卷,然后将这些物理卷加入rl卷组,此时卷组就有足够的空间,然后就可以将逻辑卷root(根所在卷)扩大了。
以下为步骤详解:
1.为虚拟机添加物理磁盘:
打开虚拟设置界面,添加一块80GB磁盘。(只修改容量即可,其他保持默认)
设置完成之后重启虚拟机。必须要重启虚拟机才能识别。
使用lsblk命令查看磁盘,我们可以看到重启后识别出了sdb磁盘80GB。
[root@localhost ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 80G 0 disk
sr0 11:0 1 10.5G 0 rom
2.使用fdisk在sdb磁盘上创建一个分区
磁盘是不能直接格式化为物理卷的,只有分区才可以,所以要先创建分区:
[root@localhost ~] fdisk /dev/sdb
Command (m for help):n
Select (default p):
Partition number (1-4, default 1):
First sector (2048-167772159,default 2048):
Last sector, +sectors or +size(K,M,G,T,P) (2048-167772159,default 167772159):
Command (m for help):w
创建分区时,输入n创建新分区,然后一路回车,最后w保存。
lsblk查看分区是否创建:
[root@localhost ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 80G 0 disk
└─sdb1 8:17 0 80G 0 part
sr0 11:0 1 10.5G 0 rom
可以看见已经创建出了sdb1分区,80GB。
3.将分区格式化为物理卷
[root@localhost ~] pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
pvs查看物理卷,我们可以看到多出一个80GB的物理卷:
[root@localhost ~] pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- <80.00g <80.00g
4.将物理卷加入rl卷组
查看原来卷组大小:
[root@localhost ~] vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <19.00g 0
将物理卷加入卷组:
[root@localhost ~] vgextend rl /dev/sdb1
Volume group "rl" successfully extended
再次查看卷组大小,可以看到卷组多出<80GB的剩余空间:
[root@localhost ~] vgs
VG #PV #LV #SN Attr VSize VFree
rl 2 2 0 wz--n- 98.99g <80.00g
5.扩容root逻辑卷
查看逻辑卷大小:
[root@localhost ~] lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rl -wi-ao---- <17.00g
swap rl -wi-ao---- 2.00g
扩展逻辑卷:
[root@localhost ~] lvextend -L 96G /dev/rl/root
Size of logical volume rl/root changed from <17.00 GiB (4351 extents) to 96.00 GiB (24576 extents).
Logical volume rl/root successfully resized.
查看逻辑卷目前大小,此时逻辑卷已经由17GB扩展到了96GB:
[root@localhost ~] lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rl -wi-ao---- 96.00g
swap rl -wi-ao---- 2.00g
6.刷新逻辑卷文件系统
刷新文件系统的原因是,该root逻辑卷只有前面17GB的空间是xfs文件系统,后面扩展的部分也必须要格式化为xfs才行。如下图用df -h查看:
[root@localhost ~] df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root 17G 1.8G 16G 11% /
/dev/sda1 1014M 210M 805M 21% /boot
tmpfs 371M 0 371M 0% /run/user/0
我们可以看到根虽然挂在了rl卷组的root逻辑卷下,但是可利用的文件系统容量还是17GB。
查看root逻辑卷的文件系统,是xfs文件系统:
[root@localhost ~] blkid /dev/rl/root
/dev/rl/root: UUID="0bcf9e16-bb32-461d-ac67-1846cea78b0b" BLOCK_SIZE="512" TYPE="xfs"
刷新xfs文件系统:
[root@localhost ~] xfs_growfs /dev/rl/root
meta-data=/dev/mapper/rl-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4455424 to 25165824
再次查看根的可用空间
[root@localhost ~] df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root 96G 2.3G 94G 3% /
/dev/sda1 1014M 210M 805M 21% /boot
tmpfs 371M 0 371M 0% /run/user/0
可以看到根的可用空间已经扩展到96GB了,还有94GB可用。重启一下,看系统有没有出现损坏或无法启动的情况。
四、扩容磁盘-高级操作(有一定危险性)
上述方法虽然扩展了根磁盘,但是有一个缺点,那就是一旦将物理卷加入卷组,那就是就是卷组的一部分了,不可退出,这个磁盘就永远被绑定了。除非删除所有逻辑卷,但这样系统就没有了。而且一旦强行删除或格式化该磁盘,系统直接就损坏了。这对于系统磁盘1:1对拷来说,就是问题。下面进行高级操作,直接扩容sda磁盘:
1.打开新建的虚拟机的设置,将该磁盘由20GB扩展为100GB。
注意,如果虚拟机有快照是无法扩展的,需要删掉快照。扩展必须为关机状态。
2.开起虚拟机,重新创建sda2分区。
查看磁盘情况:
[root@localhost ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 10.5G 0 rom
此时只有一个磁盘sda,且磁盘容量已经由20GB变成了100GB,但是sda2还是17GB。我们使用fdisk重新创建sda2分区。
[root@localhost ~]# fdisk /dev/sda
Command (m for help):d
Partition number (1,2, default 2):
Partition 2 has been deleted.
Command (m for help):n
Select (default p):
Partition number (2-4, default 2):
First sector (2099200-209715199, default 2099200):
Last sector, +sectors or +size{K,M,G,T,P} (2099200-209715199, default 209715199):
Partition #2 contains a LVM2_member signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help):w
注意!注意!
在删除sda2分区后不要保存!不要保存!不要退出fdisk命令!接着重新创建sda2。
创建完后他会提示,发现该磁盘已经有一个 LVM2 成员签名,是否要删除它,
选择N!不要删除!不然系统将无法识别逻辑卷签名,导致无法开机。
最后w保存。
这样操作,创建的sda2分区就保留了原来的标签,并且fdisk扩大分区是不会割裂原有数据,它只会在原有空间之后追加更多空间。这种机制也保护了数据的安全性。
(如果操作失误导致无法开机,请找专业人士修复,这里不提供方案)
查看重新创建后的sda2容量:
[root@localhost ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 10.5G 0 rom
查看卷组情况
[root@localhost ~] vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <19.00g 0
由上图,我们可以看见sda2磁盘已经变成99GB,而卷组和逻辑卷容量没有改变。
3.刷新物理卷容量
卷组没有随着磁盘变大是因为卷组只认识物理卷,而物理卷没有被刷新,所以容量不会跟着变化,现在我们刷新物理卷:
[root@localhost ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
再次查看卷组:
[root@localhost ~] vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <99.00g 80.00g
由上图我们可以看出,物理卷更新后卷组也会自动更新。
4.扩展逻辑卷
卷组拥有足够的空间后,我们就可以用lvextend来扩展逻辑卷:
[root@localhost ~] lvextend -L 96G /dev/rl/root
Size of logical volume rl/root changed from <17.00 GiB (4351 extents) to 96.00 GiB (24576 extents).
Logical volume rl/root successfully resized.
查看逻辑卷容量
[root@localhost ~] lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rl -wi-ao---- 96.00g
swap rl -wi-ao---- 2.00g
5.刷新文件系统
查看文件系统格式化空间:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root 17G 1.8G 16G 11% /
/dev/sda1 1014M 210M 805M 21% /boot
tmpfs 371M 0 371M 0% /run/user/0
文件系统只格式化了17GB,我们需要刷新文件系统(xfs):
[root@localhost ~] xfs_growfs /dev/rl/root
meta-data=/dev/mapper/rl-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4455424 to 25165824
再次查看文件系统格式化空间:
[root@localhost ~] df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rl-root 96G 2.3G 94G 3% /
/dev/sda1 1014M 210M 805M 21% /boot
tmpfs 371M 0 371M 0% /run/user/0
可以看见根所挂载的磁盘已经扩展到96GB,还有94GB剩余空间。
总结
第一种方法就是逻辑卷的正确扩容方法,就是添加新的磁盘来扩展卷组,再扩展逻辑卷。
第二种方法就是改变磁盘容量,利用重建分区的方法扩展分区大小,然后再刷新物理卷大小、扩展逻辑卷大小。
以上就是两种扩展系统根磁盘空间的方法,当然,第二种方法只停留在虚拟环境,毕竟现实中硬盘的容量是固定的,不能改变。
感谢观看!