前言

当我们工作中难免会出现磁盘需要扩容的情况,如果生产环境的磁盘当初做了lvm那对于扩容磁盘那一定很简单,但是我们难免会遇到一种情况,那就是当时这个主机的磁盘我们并没有做lvm,经过本人实测,发现有一种情况可以在线扩容,就是单位的生产环境是虚拟机,这种情况才适合非lvm情况扩容,废话不多说,上才艺。

1.今天用sdb磁盘模拟扩容情况(提前声明,这种情况仅适合在一块磁盘做扩容,不可以像lvm一样可以跨磁盘扩容,所以一开始说只适合在虚拟机操作)

[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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  

2.sdb磁盘先分割出来5G,创建第一个分区,也就是sdb1

[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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  
[root@localhost ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    5G  0 part       ##5G分区已划分出来
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  

3.假设5G空间是有文件的,我这里就不演示格式化过程了,因为是模拟情况

[root@localhost ~]# df -hT     ##sdb1为刚分出来的分区sdb1,挂载到/data1目录下,我创建点文件与内容,以便展示扩容是否影响业务
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.5G   16G    9% /
devtmpfs                devtmpfs  901M     0  901M    0% /dev
tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
tmpfs                   tmpfs     912M  8.6M  904M    1% /run
tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M   15% /boot
tmpfs                   tmpfs     183M     0  183M    0% /run/user/0
/dev/sdb1               xfs       5.0G   33M  5.0G    1% /data1
[root@localhost ~]# cd /data1
[root@localhost data1]# ll
总用量 0
[root@localhost data1]# touch {1..10}.txt
[root@localhost data1]# ll
总用量 0
-rw-r--r--. 1 root root 0 1月   8 15:32 10.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 1.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 2.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 3.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 4.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 5.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 6.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 7.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 8.txt
-rw-r--r--. 1 root root 0 1月   8 15:32 9.txt
[root@localhost data1]# vim 1.txt 
[root@localhost data1]# cat 1.txt 
测试之前是这样的
[root@localhost data1]# vim 2.txt 
[root@localhost data1]# cat 2.txt 
测试之前真的是这样的

4.重点来了,因为我们之前磁盘sdb分了一个区,用了5G空间,本身这块磁盘他是20G,也就是5G扩容到20G

[root@localhost data1]# 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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    5G  0 part /data1
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  
[root@localhost data1]# cd      ##注意不可以在挂载的当前目录去卸载目录,否则会报错,有进程的需要关闭进程,才可以卸载
[root@localhost ~]# umount /dev/sdb1  
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.5G   16G    9% /
devtmpfs                devtmpfs  901M     0  901M    0% /dev
tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
tmpfs                   tmpfs     912M  8.6M  904M    1% /run
tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M   15% /boot
tmpfs                   tmpfs     183M     0  183M    0% /run/user/0
[root@localhost ~]# fdisk /dev/sdb    ##操作磁盘sdb1
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):d      ##因为我们就一个分区所以直接就删除了如果有三个四个分区会提示删除哪个分区,一定要选择对
已选择分区 1
分区 1 已删除
##删除完千万别保存,否则数据全丢,一定一定不要w保存,直接再次分区

命令(输入 m 获取帮助):n    ##再次分区,上次是分区1 这次就还是分区1
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p    ##选择主分区
分区号 (1-4,默认 1):   ##分区号选择1
起始 扇区 (2048-41943039,默认为 2048):   ###起始位置,根据自己情况定,这里因为我们是直接把剩余空间全部扩容,所以我直接回车了,如果不想要这么大,扇区结束要比刚才我们第一个分区5G大就可以了,
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):w   ##这个时候再保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk      ##查看空间发现sdb空间全部分给sdb1了
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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0   20G  0 part 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  
[root@localhost ~]# mount /dev/sdb1 /data1    ##挂载磁盘到/data1
[root@localhost data1]# df -hT     ##发现空间还是没有扩容,原因是我们没有进行在线扩容
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.5G   16G    9% /
devtmpfs                devtmpfs  901M     0  901M    0% /dev
tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
tmpfs                   tmpfs     912M  8.6M  904M    1% /run
tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M   15% /boot
tmpfs                   tmpfs     183M     0  183M    0% /run/user/0
/dev/sdb1               xfs       5.0G   33M  5.0G    1% /data1    
[root@localhost data1]# xfs_growfs /dev/sdb1     ##在线扩容   xfs文件系统用这个命令,ext4用resize2fs
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               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 1310720 to 5242624
[root@localhost data1]# df -hT   ##空间20G了
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.5G   16G    9% /
devtmpfs                devtmpfs  901M     0  901M    0% /dev
tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
tmpfs                   tmpfs     912M  8.6M  904M    1% /run
tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M   15% /boot
tmpfs                   tmpfs     183M     0  183M    0% /run/user/0
/dev/sdb1               xfs        20G   33M   20G    1% /data1
[root@localhost data1]# cd /data1
[root@localhost data1]# ll 
总用量 8
-rw-r--r--. 1 root root  0 1月   8 15:32 10.txt
-rw-r--r--. 1 root root 25 1月   8 15:33 1.txt
-rw-r--r--. 1 root root 31 1月   8 15:33 2.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 3.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 4.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 5.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 6.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 7.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 8.txt
-rw-r--r--. 1 root root  0 1月   8 15:32 9.txt
[root@localhost data1]# cat 1.txt       ##查看文件以及内容没丢失,扩容成功
测试之前是这样的
[root@localhost data1]# cat 2.txt 
测试之前真的是这样的