最佳实践

概述

基本新硬盘操作

  • 创建 GPT 格式的分区表
    • parted /dev/vdb mktable gpt
  • 为 /dev/vdb 创建一个主分区,大小是该磁盘的 0% 到 100%,设置名称为 data1
    • parted /dev/vdb mkpart data1 0% 100%
    • 注意:尽量使用 % 来标识磁盘分区大小,否则会提示磁盘分区未对齐。若是显示命令无法显示百分比,则通过 unit 子命令将单位转换为 %
  • 为 /dev/vdb1 创建 xfs 文件系统
    • mkfs.xfs /dev/vdb1
  • 挂载文件系统
    • mount /dev/vdb1 /mnt/test

为新磁盘创建 LVM

# 创建 GPT 格式的分区表
parted /dev/vdb mktable gpt
# 为/dev/vdb分一个主分区,大小是该磁盘的0%到100%
parted /dev/vdb mkpart lvm 0% 100%
# 创建 PV
pvcreate /dev/vdb1
# 创建 VG
vgcreate vg-data /dev/vdb1
# 创建 LV
lvcreate -l 100%FREE -n lv0 vg-data
# 为 /dev/mapper/vg--data-lv0 创建 xfs 文件系统
mkfs.xfs /dev/mapper/vg--data-lv0
# 挂载文件系统
mount /dev/mapper/vg--data-lv0 /mnt/test

为虚拟机磁盘扩容

参考:

前提条件

确保分区表正常

~]# lsblk
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda              252:0    0  100G  0 disk
└─vda1           252:1    0  100G  0 part /
vdb              252:16   0   30G  0 disk
└─vdb1           252:17   0   20G  0 part
  └─vg--data-lv0 253:0    0   20G  0 lvm
[root@hw-cloud-xngy-jump-server-linux-2 ~]# parted /dev/vdb print
Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 20971520 blocks) or continue with the current setting?
警告:似乎并未使用 /dev/vdb 的所有可用空间,您可以修复 GPT 以使用所有空间(额外的 20971520 个块)还是继续当前设置?
Fix/Ignore?

注意:

  • 虚拟机中的一个磁盘被扩容后,如果是 GPT 分区表的磁盘,当我们使用 parted DEVICE print 指令查看信息时,将会弹出警告
  • 这是因为 GPT 分区表信息存储在磁盘开头,为了减少分区表损坏的风险,同时在磁盘末尾会备份一份。当磁盘容量扩大后,末尾位置也会随之变化,因此需要根据系统提示输入“Fix”,将分区表信息的备份文件挪到新的磁盘末尾位置。
  • 此时直接输入 Fix 即可自动修复

虚拟机磁盘使用 LVM 的扩容方案

# 扩容分区
$ growpart /dev/vdb 1
CHANGED: partition=1 start=2048 old: size=62912479 end=62914527 new: size=73398239 end=73400287

# 扩容分区对应的 PV
$ pvresize /dev/vdb1
  Physical volume "/dev/vdb1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

# 扩容 LV
$ lvextend -l +100%FREE /dev/mapper/vg--data-lv0
  Size of logical volume vg-data/lv0 changed from <30.00 GiB (7679 extents) to <35.00 GiB (8959 extents).
  Logical volume vg-data/lv0 successfully resized.

# 扩容文件系统
$ xfs_growfs /dev/mapper/vg--data-lv0
meta-data=/dev/mapper/vg--data-lv0 isize=512    agcount=4, agsize=1310464 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=5241856, 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 5241856 to 9174016

虚拟机磁盘不使用 LVM 的扩容方案

比较简单,两步解决

  • 扩容分区
    • growpart /dev/vdb 1
  • 扩容文件系统
    • ext* 类型
      • resize2fs /dev/vdb1
    • xfs 类型
      • xfs_growfs /dev/vdb1

这种方式通常都是在公有云上这么搞~