磁盘扩容操作
当非逻辑卷扩容时,新增的磁盘空间必须要在原有的磁盘的基础上扩容,如果重新挂载一块磁盘是无法进行扩容的。 分为以下几种情况:
1:磁盘未进行分区
2:磁盘进行了分区
3:磁盘进行了分区且最后分区被挂载到根目录
4:磁盘主分区分完,再逻辑分区上扩容
1:磁盘未进行分区
磁盘没有进行分区,格式化后直接挂载到了某个目录下使用,现需要对该磁盘进行扩容,如下图所示:一块10G大小的sdb直接格式化后挂载到opt目录下
现在增加sdb磁盘大小,增加至20G,如图所示:磁盘大小已增加至20G,但是挂载的空间没有发生变化,如何将新增的10G空间扩容到正在使用的磁盘
使用命令 xfs_growfs /dev/sdb可将新增加10G空间新增到正在使用磁盘,如下图所示,也不会影响原先磁盘中内容。 注:如果是ext*文件系统 则使用命令 resize2fs /dev/sdb
2 磁盘进行了分区
磁盘进行了分区,格式化分区后直接挂载到了某个目录下使用,现需要对该磁盘进行扩容,如下图所示:一块10G大小的sdb被分成sdb1和sdb2,分别挂载到opt和home目录下
现在增加sdb磁盘大小,增加至20G,如图所示:磁盘大小已增加至20G,但是挂载的空间没有发生变化,如何将新增的10G空间扩容到正在使用的磁盘
特别注意:磁盘被分成多个分区后,扩容只能往最后一个分区上扩容,也就是上图的sdb2。操作如下: 1、umount /dev/sdb2 2、fdisk /dev/sdb 3、mount /dev/sdb2 /home 4、xfs_growfs /dev/sdb2 如果是ext*文件类型 则使用 resize2fs /dev/sdb2 5、df -h
可以看出新增加的15G空间已经扩容到sdb2上,也并没有影响之前的文件
3 磁盘进行了分区且最后分区被挂载到根目录
在某些情况下,服务器初始时就是一块磁盘分区,将最后的分区挂载到根目录下。如下图所示:服务器初始化,20G的sda被分成sda1、sda2、sda3三个分区,sda3作为最大的分区挂载到根目录下。前面情景2提到扩容是可以扩容最后的分区的,所以sda3符合扩容条件。
现在增加sda磁盘大小,增加至40G,如图所示:磁盘大小已增加至40G,但是挂载的空间没有发生变化,如何将新增的20G空间扩容到正在使用的磁盘
操作步骤与情景2相似,但是要注意不需要卸载根目录,否则服务器会出现问题 1、fdisk /dev/sda 2、partprobe 3、xfs_growfs /dev/sda3 如果是ext*文件类型 则使用 resize2fs /dev/sda3 4、df -h
可以看出新增加的20G空间已经扩容到sda3上,也并没有影响之前的文件
4 逻辑分区上扩容
每个磁盘设备最多4个主分区或者3个主分区1个扩展分区。 主分区:主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上; 扩展分区是不能使用的,它只是做为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区。 换句话说,先有扩展分区再有逻辑分区。
如图所示:20G的/dev/vdb这块磁盘被分区成/dev/vdb1、/dev/vdb2、/dev/vdb3的主分区,/dev/vdb4的扩展分区,/dev/vdb5的逻辑分区
vdb1、vdb2、vdb3、vdb5共使用了11G,如何将剩余的空间扩容到vdb5?
操作步骤也与情景2相似,
但是要注意如果只删除5分区后,直接扩容并不会成功,原因是因为扩展分区的大小没有发生变化,逻辑分区的大小是由扩展分区的分配的。
1、fdisk /dev/vdb
2、partprobe 3、xfs_growfs /dev/vdb5 如果是ext*文件类型 则使用 resize2fs /dev/vdb5 4、df -h
5 对lv 卷进行扩容操作
操作应考虑大因素:
1 lv 扩容 对数据会不会产生影响 - 如果正常操作对数据没有影响
2 考虑物理磁盘是MBR分区还是GPT分区 ,MBR分区最大分区只能2t,只能分4个分区;GPT 可进行大容量分区,支持128个分区
操作方法 一
1 通过分区,创建新的pv,加入的vg中 再扩容lv
1 parted 命令分区 交互式
#parted /dev/sda
(parted)mkpart
分区名称? 可以默认不写
文件系统类型? xfs
起始点 179G
结束点? -1 -1表示后续所有容量
(parted)p 进行打印分区
这样如果原分区时MBR的 就只能创建2T 分区
(parted)mklabel gpt 创建gpt分区表,之后再mkpart进行分区, 就可以创建大容量分区
注意,如果原sda已经有分区, 执行这个命令会清理sda磁盘的所有分区数据
(parted)help 打印帮助信息
(parted) rm #输入删除指令rm直接回车,如果后面加上分区号在回车就可以直接删除分区
Partition number? 3 #输入要删除的分区,这里操作一定要慎重,一旦回车就生效了,是不可退的
)mkpart pname ext4 1G 2G #如果想一步就把分区创建好可以像左边一样,pname表示分区名这样分区这里必须有
)mkpart pname 2G 100% # 表示开始2G 100%表示剩余所有空间
)name #更新分区名
Partition number? 3 #选择分区号
Partition name? [pname]? namep #输入新的名字
(parted) set #输入set更改分区标记,输入后直接回车
Partition number? 3 #更改标记的分区
Flag to Invert? #输入更改标记的类型,按二次Tab键查看支持的类型
Flag to Invert? lvm #标记为lvm类型
New state? [on]/off? on #输入on回车表示打开
(parted) set #取消标记操作
Partition number? 3
Flag to Invert? lvm
New state? on/[off]? off #添加标记和取消标记的主要区别就在这里,这里要输入off来关闭标记
尽量不要对分区进行调整,可能会丢失数据,如果要调整也要先备份数据
(parted) resizepart #输入调整分区的指令resizepart直接回车,这里增加容量,增加容量的分区后面必须得有可用的未分配的分区
Partition number? 2 #输入要更改的分区
End? [2.00GB]? 4G #扩容后这个分区的结束位置,这个要根据扩容前分区结束的位置和增加的容量来确定最终的分区位置
(parted) resizepart #这里减少容量
Partition number? 2
End? [4.00GB]? 3G
Warning: Shrinking a partition can cause data loss, are you
sure you want to continue?
Yes/No? yes #减少容量会有这样的警告:收缩分区会导致数据丢失,你确定要继续吗?
(parted) rescue #恢复分区
起始点? 1
结束点? 10G -1表示剩余全部
信息: A ext2 primary partition was found at 1049kB -> 10.0GB. Do you want to add it
to the partition table?
是/Yes/否/No/放弃/Cancel? Yes
2 创建pv
#pvcreate /dev/sda3
#pvs 进行查看
3 vg扩容
#vgextend vgname /dev/sda3
#vgs 查看
4 lv 扩容
#lvextend /dev/mapper/centos-root -l +100%FREE 扩容cg剩余的所有容量
#lvextend -L +2G /dev/mapper/centos-root -L 指定大小 +2G 再原基础上加2G 2G 设定总容量为2G
# resize2fs /dev/mapper/centos-root ext文件类型的lv扩容容量生效
# xfs_growfs /dev/mapper/centos-root xfs文件系统的lv扩容容量生效
方法二 使用growpart工具完成Linux逻辑卷扩容
## yum install cloud-utils-growpart.noarch -y 部署安装包
# growpart /dev/sda 2 对分区2 进行扩容
unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2] 这个报错时编码问题 执行下面命令
# LANG=en_US.UTF-8
命令执行报错 BLKRRPART: Device or resource busy
#partprobe 再执行一次如果不生效 需要重启系统
growpart /dev/vda
该命令是扩容分区的命令,如果您已执行完成,再次执行时,就会报 NOCHANGE: partition 1 is size 419428319. it cannot be grown
得解决