现在的位置: 首页 > 操作系统 > 正文

Linux 云服务器存储扩容的几种方法

2020年02月17日 操作系统 ⁄ 共 23795字 ⁄ 字号 评论关闭

  随着业务的发展,业务数据不停的增长,原有的磁盘空间可能会出现磁盘空间不够用的情况,因此,需要对磁盘空间进行扩容,以满足业务数据增长的需求。本文总结了 Linux 环境下云服务器存储扩容的三种方式及其操作步骤,与大家一同交流。

  环境说明:

  Linux 操作系统:CentOS Linux release 7.6.1810 (Core)。

  平台环境:腾讯云 CVM,CBS。

  一、存储扩容概述

  以下图为例,假如起初购买了 100G 磁盘空间,随着数据的不停增长,原有 100G 空间不够用了,将空间扩容至 200G。

  CBS 是腾讯云提供用于云服务器的持久性数据块级存储服务,云盘具有弹性,按需扩容特性,云盘可以任意的按需扩容。

  不过云盘扩容时不是所有的场景下都可以任意扩容,云盘扩容具有两个限制:

  系统盘不支持扩容,理论上系统盘也能够支持扩容,系统盘存放操作系统数据,扩容可能会造成系统启动异常;本地盘不支持扩容,

  本地盘使用宿主机的本地盘,本地盘弹性扩容能力没有云盘灵活,无法支持弹性按需扩容。

  要深入掌握云盘的扩容,需要掌握云盘的使用方式,在 Linux 下通常有如下三种使用方式:

  裸设备创建文件系统,不需要创建任何分区,直接在裸盘上创建文件系统;

  磁盘上创建 MBR 格式的分区,适用于小于 2T 的多个磁盘分区的场景;

  磁盘上创建 GPT 格式的分区,适用于大于 2T 的多个磁盘分区的场景。

  二、 Linux 云服务器存储扩容

  1. 裸设备磁盘使用

  Linux 系统中可以直接在裸设备磁盘上创建文件系统,即磁盘不需要创建任何磁盘分区,直接在磁盘上创文件文件系统并挂载使用,其具有如下特点:

  磁盘不需要多个分区;

  适用于大于 2T 磁盘;

  简单易使用;

  后期支持在线扩容。

  上图所示是在 Linux 系统中直接在裸设备创建文件系统的操作步骤,先在控制台购买好云盘并将其挂载到 CVM 中,然后登陆到 Linux 系统中对磁盘格式化文件系统并挂载使用。

  控制台购买和挂载请自行操作,如下演示在 Linux 系统中裸设备文件系统的使用步骤:

  (1) 登陆操作系统,通过 fdisk -l 获取磁盘的名称,系统有两块磁盘 vda 和 vdb,/dev/vdb 是我们操作的磁盘。

  [root@VM_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors#vda 为系统盘

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:107.4GB,107374182400bytes,209715200sectors#vdb 为数据盘

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 直接在磁盘上创建文件系统 (注:并未在磁盘上创建任何分区),根据需要格式化为 ext4 或 xfs 格式。

  [root@VM_0_89_centos ~]# mkfs.ext4 /dev/vdb #创建文件 ext4 文件系统

  mke2fs 1.42.9 (28-Dec-2013)

  Filesystem label=

  OS type: Linux

  Blocksize=4096 (log=2)

  Fragmentsize=4096 (log=2)

  Stride=0 blocks, Stripewidth=0 blocks

  6553600 inodes, 26214400 blocks

  1310720 blocks (5.00%) reservedforthe superuser

  First datablock=0

  Maximum filesystemblocks=2174746624

  800 block groups

  32768 blocks per group, 32768 fragments pergroup

  8192 inodes pergroup

  Superblock backups stored on blocks:

  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

  4096000, 7962624, 11239424, 20480000, 23887872

  Allocatinggrouptables: done

  Writing inode tables: done

  Creating journal (32768 blocks): done

  Writing superblocksandfilesystemaccountinginformation: done

  备注:如果要创建为 xfs 则使用 mkfs.xfs /dev/vdb

  (3) 创建好文件系统后即可挂载到系统中使用,使用方式有两种:临时 mount 或编写 fstab 实现持久性挂载。

  线上环境推荐使用编写 fstab 的方式,避免机器下次重启后磁盘信息未加载, 挂载名称推荐使用 UUID。

  blkid 获取磁盘 UUID 信息

  [root@VM_0_89_centos ~]# blkid /dev/vdb

  /dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436"TYPE="ext4"

  编写/etc/fstab,其内容如下

  UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436"/dataext4 defaults 0 0

  (4) 挂载点目录 /data 需要提前创建好,然后执行 mount -a 进行加载,mount -a 是系统启动时之行的指令,如果 fstab 编写有误要及时修复,避免影响下次开机启动。

  执行挂载操作

  [root@VM_0_89_centos ~]# mount -a

  检查挂载情况

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M444K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.8G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb99G61M94G1% /data #vdb 磁盘已顺利挂载到系统中,大小为100G

  至此,基于 Linux 系统上使用裸盘构建文件系统并使用操作演示完毕,通过操作可知,裸盘上创建文件系统方式不需要对磁盘进行分区,操作便捷容易,且方便扩容,下面部分将演示基于裸设备文件的文件系统存储空间扩容。

  2. 裸设备磁盘扩容

  上述步骤是裸设备磁盘的扩容方式,扩容过程中存在数据损坏的风险,为了避免扩容过程中误操作, 强烈建议扩容前对磁盘做快照 ,以防数据损坏时做恢复!

  做完快照后在控制台完成磁盘的扩容,扩容完毕后需要在操作系统中识别到扩容的空间。以磁盘扩容至 200G 为例,演示在 Linux 中裸设备扩容的操作过程:

  (1) 确认磁盘的使用方式,通过 fdisk -l 查看磁盘并未创建有任何磁盘分区。

  [root@VM_0_89_centos ~]# fdisk -l /dev/vdb

  Disk /dev/vdb:214.7GB,214748364800bytes,419430400sectors#磁盘空间已扩容至 200G

  Units = sectorsof1*512=512bytes

  Sector size (logical/physical): 512 bytes /512bytes

  I/O size (minimum/optimal): 512 bytes /512bytes#当前磁盘上未创建任何分区

  #使用 blkid 查看 vdb 磁盘文件系统的情况,可得知,当前 /dev/vdb 未创建磁盘分区,切构建了 ext4 文件系统

  [root@VM_0_89_centos ~]# blkid

  /dev/sr0: UUID="2020-01-13-22-30-05-00"LABEL="config-2"TYPE="iso9660"

  /dev/vda1: UUID="4b499d76-769a-40a0-93dc-4a31a59add28"TYPE="ext4"

  /dev/vdb: UUID="7fb2c90a-fcd1-472c-b07c-8a20e2e9a436"TYPE="ext4"#直接在裸盘上创建 ext4 文件系统

  (2) 确认为云盘的扩容方式为裸盘后,根据文件系统的类型,在文件系统层面扩容以识别到云盘的扩容空间。

  [root@VM_0_89_centos ~]# resize2fs /dev/vdb

  resize2fs1.42.9(28-Dec-2013)

  Filesystem at /dev/vdbismounted on /data; on-line resizing required

  old_desc_blocks =13, new_desc_blocks =25

  The filesystem on /dev/vdbisnow52428800blocks long. #提示已经扩容至52428800个 block

  备注:如果是 xfs,则使用 xfs_growfs /dev/vdb 扩容

  (3) 校验磁盘空间扩容情况,使用 df -H 校验,vdb 磁盘已在文件系统扩容至 200G。

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M444K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.8G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb197G60M188G1% /data #已扩容至200G

  通过上述的操作演示可知,裸盘上并未创建任何磁盘分区,因此扩容过程相当便捷,直接在文件系统上扩容即可,使用简单,这也是云上推荐使用方式。

  3. MBR 磁盘分区

  如果磁盘需要创建多个分区并将分区挂载到不同的目录中使用需要对磁盘进行分区,传统的磁盘分区方式会使用 MBR 的格式进行分区,MBR 分区具有如下特性:

  适用于小于 2T 的磁盘,大于 2T 的空间将无法识别;

  单块磁盘需要创建多个分区的场景;

  MBR 最多支持 7 个分区,即 3 个主分区 +4 个扩展分区。

  对磁盘制作 MBR 格式分区的操作步骤,在控制台购买并挂载到 CVM 云主机后,登录到操作系统中对磁盘进行分区和使用。

  如下以新购的一块 100G 磁盘为例演示基于 cbs 云盘上创建 MBR 磁盘分区的过程:

  (1) 使用 fdisk -l 获取到到磁盘的名称,包含两块磁盘 vda 和 vdb,vdb 是我们需要操作的 cbs 云盘。

  [root@VM_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:107.4GB,107374182400bytes,209715200sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 使用 fdisk 工具对磁盘进行分区,fdisk /dev/vdb 进入到 fdisk 交互式界面,通过交互式完成分区创建。

  [root@VM_0_89_centos~]# fdisk /dev/vdb

  Welcometo fdisk (util-linux 2.23.2).

  Changeswill remain in memory only, until you decide to write them.

  Becareful before using the write command.

  Devicedoes not contain a recognized partition table

  Buildinga new DOS disklabel with disk identifier 0x5eeb4bc8.

  Command(m for help): m #输入 m 可以获取到操作指令的帮助

  Commandaction

  atoggle a bootable flag

  bedit bsd disklabel

  ctoggle the dos compatibility flag

  ddelete a partition #删除分区

  gcreate a new empty GPT partition table

  Gcreate an IRIX (SGI) partition table

  llist known partition types

  mprint this menu #获取帮助

  nadd a new partition #创建分区

  ocreate a new empty DOS partition table

  pprint the partition table #显示分区情况

  qquit without saving changes #退出,不保存

  screate a new empty Sun disklabel

  tchange a partition's system id

  uchange display/entry units

  vverify the partition table

  wwrite table to disk and exit #保存分区设置

  xextra functionality (experts only)

  Command(m for help): n #新建分区,输入 n 进入到新建分区交互界面

  Partitiontype:

  pprimary (0 primary, 0 extended, 4 free)

  eextended

  Select(default p): p #选择分区类型,p 表示主分区,e 代表扩展分区

  Partitionnumber (1-4, default 1): #分区号码

  Firstsector (2048-209715199, default 2048): #起始扇区范围

  Usingdefault value 2048

  Lastsector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): #结束删除范围

  Usingdefault value 209715199

  Partition1 of type Linux and of size 100 GiB is set

  Command(m for help): p #显示分区情况,可以看到已创建一个 vdb1 的分区

  Disk/dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors

  Units=sectors of 1 * 512 = 512 bytes

  Sectorsize (logical/physical): 512 bytes / 512 bytes

  I/Osize (minimum/optimal): 512 bytes / 512 bytes

  Disklabel type: dos

  Diskidentifier: 0x5eeb4bc8

  DeviceBoot Start End Blocks Id System

  /dev/vdb12048 209715199 104856576 83 Linux #磁盘分区的信息

  Command(m for help): w #报错退出

  Thepartition table has been altered!

  Callingioctl() to re-read partition table.

  Syncingdisks.

  (3) 使用 partprobe 将分区的信息同步给内核,让内核识别到该分区信息。

  [root@VM_0_89_centos~]# partprobe /dev/vdb

  (4) 接下来可以对分区制作文件系统,制作成操作系统能够识别的文件系统,以制作 xfs 文件系统为例。

  [root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb1

  meta-data=/dev/vdb1isize=512agcount=4,agsize=6553536 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=26214144,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=12799,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  [root@VM_0_89_centos ~]# blkid

  /dev/sr0:UUID="2020-01-13-22-30-05-00"LABEL="config-2"TYPE="iso9660"

  /dev/vda1:UUID="4b499d76-769a-40a0-93dc-4a31a59add28"TYPE="ext4"

  /dev/vdb1:UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5"TYPE="xfs"#文件系统制作为 xfs

  备注:如果是制作为 ext4 则使用 mkfs.ext4 /dev/vdb1

  (5) 编写 fstab 挂载到系统中,确保下次开机后配置生效。

  [root@VM_0_89_centos ~]# vim/etc/fstab

  UUID="c387af37-56d7-436c-8ceb-0a735e0db5d5"/data xfs defaults00

  (6) 执行 mount -a 加载挂载配置,并检查挂载情况。

  [root@VM_0_89_centos ~]# mount -a

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1100G33M100G1% /data #磁盘已经挂载到系统中

  4. MBR 磁盘扩容

  MBR 格式的磁盘扩容需要在 MBR 磁盘分区中扩展空间,并在文件系统中扩展文件系统空间以识别到扩容的空间,腾讯云为此提供了一个专门扩容的脚本 devresize.py,脚本要求条件如下:

  文件系统是 EXT2/EXT3/EXT4/XFS;

  当前文件系统不能有错误;

  扩容后的磁盘大小不超过 2TB;

  当前工具仅支持 Python 2 版本,不支持 Python 3 版本。

  MBR 格式磁盘的扩容步骤,现在控制台中做好快照,并扩容,然后登录到操作系统中完成分区和文件系统的扩容,如下以扩容至 200G 为例演示在 MBR 格式的磁盘分区扩容方法、

  (1) 检查磁盘的扩容,确认扩容的方式,根据 System 类型为 Linux 判断为 MBR 格式的分区。

  [root@VM_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:214.7GB,214748364800bytes,419430400sectors#空间大小已扩容至 200G

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x5eeb4bc8

  DeviceBootStartEndBlocksIdSystem#System 类型为 Linux 表示使用 MBR 格式分区

  /dev/vdb1204820971519910485657683Linux

  (2) 获取扩容的脚本,该脚本可以完成分区的扩容和文件系统的自动扩容,需要离线执行,因此先需要卸载磁盘。

  [root@VM_0_89_centos ~]# wget -O /tmp/devresize.py https://raw.githubusercontent.com/tencentyun/tencentcloud-cbs-tools/master/devresize/devresize.py

  无法在线执行,需卸载磁盘

  [root@VM_0_89_centos ~]# python /tmp/devresize.py /dev/vdb

  [ERROR] - Target partition /dev/vdb1 must be unmounted.

  [root@VM_0_89_centos ~]# umount /dev/vdb1

  (3) 执行扩容步骤。

  [root@VM_0_89_centos ~]# python /tmp/devresize.py /dev/vdb

  [INFO] - checking filesystem healthy

  Phase 1 -findandverify superblock...

  Phase 2 - using internal log

  - zero log...

  - scan filesystem freespaceandinode maps...

  - found root inode chunk

  Phase 3 -foreach AG...

  - scanandclear agi unlinked lists...

  - process known inodesandperform inode discovery...

  - agno = 0

  - agno = 1

  - agno = 2

  - agno = 3

  - process newly discovered inodes...

  Phase 4 - checkforduplicate blocks...

  - setting up duplicate extent list...

  - checkforinodes claiming duplicate blocks...

  - agno = 0

  - agno = 1

  - agno = 2

  - agno = 3

  Phase 5 - rebuild AG headersandtrees...

  - reset superblock...

  Phase 6 - check inode connectivity...

  - resetting contents of realtime bitmapandsummary inodes

  - traversing filesystem...

  - traversal finished...

  - moving disconnected inodestolost+found...

  Phase 7 - verifyandcorrect link counts...

  done

  [INFO] - mount /dev/vdb1 /tmp/mount_point_vdb_2020-01-14_16:04:30

  [INFO] - umount /dev/vdb1

  This operation will extend /dev/vdb1tothe last sector of device.

  Toensure the security of your valuable data,

  please create a snapshot of this volume before resize its file system, continue? [Y/n]

  y #提示是否创建快照,确保做好快照后输入 y 继续

  It will resize (/dev/vdb1).

  This operation may takefromseveral minutestoseveral hours, continue? [Y/n] #备份并 resize,确认输入 y

  y

  [INFO] - Backup MBRto/tmp/MBR_vdb1_2020-01-14_16:04:40_bak

  [INFO] - mount /dev/vdb1 /tmp/mount_point_vdb_2020-01-14_16:04:30

  [INFO] - resize filesystem

  meta-data=/dev/vdb1isize=512agcount=4,agsize=6553536 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0spinodes=0

  data =bsize=4096blocks=26214144,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internalbsize=4096blocks=12799,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  data blocks changedfrom26214144to52428544

  [INFO] - umount /dev/vdb1

  [INFO] - Finished

  (4) 重新挂载文件系统并确认扩容空间。

  [root@VM_0_89_centos ~]# mount -a #重新挂载

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1200G33M200G1% /data #空间已扩容至200G

  注意事项:

  扩容前一定要先做好快照,避免数据损坏时可快速恢复;

  MBR 格式磁盘扩容需要卸载云盘,因此是离线扩容,如果云盘有在使用,请先停止业务后再扩容。

  5. MBR 新增磁盘分区

  如果需要分区的场景,可以将扩容的空间划分成一个新的分区供操作系统使用,通过在磁盘上新创建分区的方式实现扩容,其具有如下特点:

  单盘需要多个分区的场景;

  扩容空间小于 2T;

  扩容后原分区无法扩容;

  CBS 云盘是按需弹性扩展,推荐使用单磁盘单分区挂载,云上推荐使用裸盘创建文件系统。

  如下以一块 200G 的 CBS 盘扩容至 300G 为例演示在 MBR 格式磁盘上新增分区的方式实现磁盘扩容使用方式:

  (1) 准备工作,控制台做好快照,并在控制台完成磁盘空间扩容;

  (2) fdisk -l 检查磁盘扩容的大小,通过 System 类型为 Linux 可得知其为 MBR 分区格式的磁盘。

  [root@VM_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:322.1GB,322122547200bytes,629145600sectors#磁盘大小已扩容至 300G

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x5eeb4bc8

  DeviceBootStartEndBlocksIdSystem#磁盘分区类型为 MBR 格式

  /dev/vdb1204841943039920971417683Linux

  (3) 扩容磁盘上新创建一个磁盘分区 /dev/vdb2, 大小为 100G。

  [root@VM_0_89_centos ~]# fdisk /dev/vdb

  Welcometofdisk (util-linux 2.23.2).

  Changes will remaininmemory only, until you decidetowrite them.

  Be careful before using the write command.

  Command (mforhelp): p

  Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 sectors

  Units = sectors of 1 * 512 = 512 bytes

  Sector size (logical/physical): 512 bytes / 512 bytes

  I/O size (minimum/optimal): 512 bytes / 512 bytes

  Disk label type: dos

  Disk identifier: 0x5eeb4bc8

  Device Boot Start End Blocks IdSystem

  /dev/vdb1 2048 419430399 209714176 83 Linux #当前已有一个分区

  Command (mforhelp): n #新增一个分区

  Partition type:

  p primary (1 primary, 0 extended, 3 free)

  e extended

  Select (default p): p #分区类型为主分区

  Partition number (2-4,default2):

  First sector (419430400-629145599,default419430400): #开始扇区大小

  Usingdefaultvalue 419430400

  Last sector, +sectorsor+size{K,M,G} (419430400-629145599,default629145599): #结束扇区大小

  Usingdefaultvalue 629145599

  Partition 2 oftypeLinuxandof size 100 GiB isset

  Command (mforhelp): p #查看分区创建的情况

  Disk /dev/vdb: 322.1 GB, 322122547200 bytes, 629145600 sectors

  Units = sectors of 1 * 512 = 512 bytes

  Sector size (logical/physical): 512 bytes / 512 bytes

  I/O size (minimum/optimal): 512 bytes / 512 bytes

  Disk label type: dos

  Disk identifier: 0x5eeb4bc8

  Device Boot Start End Blocks IdSystem

  /dev/vdb1 2048 419430399 209714176 83 Linux

  /dev/vdb2 419430400 629145599 104857600 83 Linux #分区已创建成功

  Command (mforhelp): w

  The partition table has been altered!

  Calling ioctl()tore-read partition table.

  WARNING: Re-reading the partition table failed witherror16: Deviceorresourcebusy.

  The kernel still uses the old table. The new table will be used at

  the next rebootorafter yourunpartprobe(8)orkpartx(8)

  Syncing disks.

  (4) 刷新内核分区以识别到分区内容。

  [root@VM_0_89_centos~]# partprobe /dev/vdb

  (5) 格式化磁盘分区,创建操作系统能识别的文件系统,以 xfs 为例。

  [root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb2

  meta-data=/dev/vdb2isize=512agcount=4,agsize=6553600 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=26214400,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=12800,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (6) 挂载至系统中,推荐使用 fstab 挂载。

  获取分区 UUID 号

  [root@VM_0_89_centos ~]# blkid /dev/vdb2

  /dev/vdb2: UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2"TYPE="xfs"

  编写 fstab 文件

  echo'UUID="448467bd-f3fa-41cc-a5ad-ab316f7b62e2" /data1 xfs defaults 0 0'>>/etc/fstab

  创建挂载目录并挂载

  [root@VM_0_89_centos ~]# mkdir /data1

  [root@VM_0_89_centos ~]# mount -a

  检查挂载情况

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M452K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb1200G33M200G1% /data

  /dev/vdb2100G33M100G1% /data1 #磁盘分区已经挂载至操作系统

  至此云盘上使用 MBR 格式新增分区的演示使用完毕,这种方式适用于单块磁盘多分区的场景。

  由于云上的磁盘可以根据按需扩容,且采用分区扩容的方式原有分区 (第一个分区) 将无法扩容,云上推荐使用裸盘方式。

  6. GPT 磁盘分区

  前文介绍了对磁盘创建 MBR 格式磁盘分区的使用方式,对于大于 2T 的磁盘,需要使用 GPT 格式的方式进行分区,下文将介绍磁盘使用 GPT 格式进行分区的使用方式。

  先在控制台购买云盘并挂载到云主机中,然后再操作系统中对磁盘进行 GPT 格式分区并创建文件系统。

  以创建一个 2T 磁盘为例,演示 Linux 中使用 parted 对磁盘创建 GPT 格式分区使用过程。

  (1) 登录操作系统检查磁盘的名称和空间大小。

  [root@VM_0_89_centos~]#fdisk-l

  Disk /dev/vda:53.7GB,53687091200bytes,104857600sectors

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x0009ac89

  DeviceBootStartEndBlocksIdSystem

  /dev/vda1*204810485756652427759+83Linux

  Disk /dev/vdb:2147.5GB,2147483648000bytes,4194304000sectors#磁盘为 vdb,大小为 2T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  (2) 使用 parted 对磁盘打标签和磁盘分区。

  磁盘打上 label 并查看确认

  [root@VM_0_89_centos ~]# parted /dev/vdb mklabel gpt

  [root@VM_0_89_centos ~]# parted /dev/vdb print

  Model: Virtio Block Device (virtblk)

  Disk /dev/vdb: 2147GB

  Sector size (logical/physical): 512B/512B

  Partition Table: gpt#分区表类型为 gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags

  对磁盘进行分区

  [root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 2048s 100%

  Information: You may needtoupdate/etc/fstab.

  查看分区创建情况

  [root@VM_0_89_centos ~]# parted /dev/vdb print

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:2147GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags

  11049kB2147GB2147GB primary#创建了一个磁盘分区,范围是 2048s 到 2147GB

  (3) 磁盘上创建文件系统,以制作 xfs 文件系统为例。

  [root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb1

  meta-data=/dev/vdb1isize=512agcount=4,agsize=131071872 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=524287488,imaxpct=5

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=255999,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (4) 编写 fstab 挂载到 /data 目录中。

  获取分区 UUID

  [root@VM_0_89_centos ~]# blkid /dev/vdb1

  /dev/vdb1:UUID="aa6fc333-e702-4daa-ad0b-10efde57a7f0"TYPE="xfs"PARTLABEL="primary"PARTUUID="7dace14b-3093-495b-9d0c-fc63f3b87fd7"

  编写 fstab 将磁盘挂载到 /data 目录中

  UUID="aa6fc333-e702-4daa-ad0b-10efde57a7f0"/data xfs defaults 0 0

  (5) 加载挂载配置信息并确认。

  [root@VM_0_89_centos ~]# mount -a

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M448K496M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb12.0T33M2.0T1% /data #磁盘当前已经挂载至 /data 目录

  7. GPT 磁盘分区扩容

  GPT 格式磁盘分区的扩容步骤,需要在控制台中制作快照并完成扩容,然后在 GPT 分区中识别到扩容空间,文件文件系统识别到空间,如下以 2T 扩容至 3T 为例演示扩容过程:

  (1) 确认磁盘空间和扩容方式为 GPT。

  [root@VM_0_89_centos~]#fdisk-l/dev/vdb

  Disk /dev/vdb:3221.2GB,3221225472000bytes,6291456000sectors#磁盘空间大小已扩容至 3T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:dos

  Disk identifier:0x00000000

  DeviceBootStartEndBlocksIdSystem#磁盘分区格式为 GPT

  /dev/vdb1141943039992097151999+eeGPT

  (2) 分区扩容需是离线操作,因此需要先卸载磁盘,卸载前请停止业务使用。

  [root@VM_0_89_centos~]# umount /data

  (3) GPT 重新分区,需要先删除原有分区,然后再重建分区,删除前使用 unit s 获取到磁盘柱面的大小, 切记,操作前应要做好快照备份,删除分区重建分区有风险 。

  [root@VM_0_89_centos ~]# parted /dev/vdb

  GNU Parted 3.1

  Using /dev/vdb

  WelcometoGNU Parted!Type'help'toview a list of commands.

  (parted)print

  Error: The backup GPT table isnotat the end of the disk, as it should be. This might mean that another operatingsystembelieves the disk is smaller. Fix, by moving the backuptothe end

  (andremoving the old backup)?

  Fix/Ignore/Cancel? Fix #磁盘空间有扩容,因此提示有 ERR,输入 Fix 修复

  Warning:Notall of the space availableto/dev/vdb appearstobe used, you can fix the GPTtouse all of the space (an extra 2097152000 blocks)orcontinue with the current setting?

  Fix/Ignore? Fix #空间并未完全使用提示有 Waring,输入 Fix 修复

  Model: Virtio Block Device (virtblk)

  Disk /dev/vdb: 3221GB

  Sector size (logical/physical): 512B/512B

  Partition Table: gpt

  Disk Flags:

  Number Start End Size FilesystemName Flags

  1 1049kB 2147GB 2147GB xfs primary #当前分区的情况

  (parted) unit s #使用单元的方式显示大小范围

  (parted)print

  Model: Virtio Block Device (virtblk)

  Disk /dev/vdb: 6291456000s

  Sector size (logical/physical): 512B/512B

  Partition Table: gpt

  Disk Flags:

  Number Start End Size FilesystemName Flags

  1 2048s 4194301951s 4194299904s xfs primary #Start 起始范围为 2048s,后面重建分区需要使用到

  (parted) rm 1 #删除分区信息

  (parted)print

  Model: Virtio Block Device (virtblk)

  Disk /dev/vdb: 6291456000s

  Sector size (logical/physical): 512B/512B

  Partition Table: gpt

  Disk Flags:

  Number Start End Size FilesystemName Flags #确认分区信息已被删除

  (parted) mkpart primary 2048s 100% #重新创建磁盘分区,起始范围需要和原分区保持一致

  (parted)print

  Model: Virtio Block Device (virtblk)

  Disk /dev/vdb: 6291456000s

  Sector size (logical/physical): 512B/512B

  Partition Table: gpt

  Disk Flags:

  Number Start End Size FilesystemName Flags

  1 2048s 6291453951s 6291451904s xfs primary

  (4) GPT 分区扩容完毕后,需要在文件系统中扩容空间,切记,不要格式化文件系统,否则数据将会丢失。根据文件系统类型选择扩容方式,以 xfs 为例:

  将磁盘挂载到系统中

  [root@VM_0_89_centos ~]# mount -a

  [root@VM_0_89_centos ~]# df -h

  文件系统 容量 已用 可用 已用 % 挂载点

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M488K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb12.0T33M2.0T1% /data

  扩容文件系统空间

  [root@VM_0_89_centos ~]# xfs_growfs /dev/vdb1

  meta-data=/dev/vdb1 isize=512agcount=4, agsize=131071872blks

  = sectsz=512attr=2, projid32bit=1

  = crc=1finobt=0spinodes=0

  data = bsize=4096blocks=524287488, imaxpct=5

  = sunit=0swidth=0blks

  naming =version2bsize=4096ascii-ci=0ftype=1

  log =internal bsize=4096blocks=255999, version=2

  = sectsz=512sunit=0blks, lazy-count=1

  realtime =none extsz=4096blocks=0, rtextents=0

  data blocks changedfrom524287488to786431488#已完成空间扩容

  校验文件系统空间

  [root@VM_0_89_centos ~]# df -h

  文件系统 容量 已用 可用 已用 % 挂载点

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M488K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb13.0T33M3.0T1% /data #已扩容至3T

  备注:如果是 ext3、ext4 则使用 resize2fs /dev/vdb1 实现文件系统的扩容。

  至此,基于 GPT 的磁盘格式磁盘分区扩容完毕,整个扩容过程中磁盘需要卸载操作,因此业务需要离线进行,扩容过程中需要删除分区,操作较危险,操作前务必做好快照避免误操作导致磁盘分区信息丢失。

  8. GPT 新增磁盘分区

  对于需要多个磁盘分区的场景,可以在 GPT 磁盘上新建另外一个分区的方式实现,实现方式和新创建一个分区的过程相类似,如下为基于 GPT 格式磁盘新增分区的操作过程:

  以磁盘扩容至 3.5T 为例,通过 GPT 格式新创建另外一个 /dev/vdb2 的分区,并挂载到系统中使用,如下演示操作过程:

  (1) 登录操作系统,确认磁盘空间扩容大小和磁盘格式为 GPT。

  [root@VM_0_89_centos~]#fdisk-l/dev/vdb

  WARNING:fdiskGPTsupportiscurrentlynew,andthereforeinanexperimentalphase.Useatyourowndiscretion.

  Disk /dev/vdb:3758.1GB,3758096384000bytes,7340032000sectors#磁盘空间大小为 3.5T

  Units=sectorsof1*512=512bytes

  Sectorsize(logical/physical):512bytes/512bytes

  I/Osize(minimum/optimal):512bytes/512bytes

  Disk label type:gpt#磁盘分区格式类型为 gpt

  Disk identifier:15BF58A1-BBE0-466A-B2C5-A243AD6A3108

  # Start End Size Type Name

  1204862914539513TMicrosoftbasicprimary

  (2) 获取磁盘上一个分区的 End 范围,print 得知结束范围 3221GB ,下一个步骤需要使用到。

  [root@VM_0_89_centos ~]# parted /dev/vdb print

  Error: ThebackupGPTtableisnotattheendofthe disk,asit should be. This might mean that another operatingsystembelieves the diskissmaller. Fix,bymoving thebackuptotheend

  (andremoving theoldbackup)?

  Fix/Ignore/Cancel? Fix

  Warning:Notallofthespaceavailableto/dev/vdb appearstobe used, you can fix the GPTtouseallofthespace(an extra1048576000blocks)orcontinuewiththecurrentsetting?

  Fix/Ignore? Fix

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:3758GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags

  11049kB3221GB3221GB xfs primary

  (3) 磁盘上新建一个分区 /dev/vdb2,开始范围为上一个步骤中获取的磁盘大小。

  [root@VM_0_89_centos ~]# parted /dev/vdb mkpart primary 3221GB 100% #开始范围为步骤 2 获取的大小

  Information: You may need toupdate/etc/fstab.

  [root@VM_0_89_centos ~]# parted /dev/vdb print

  Model: VirtioBlockDevice (virtblk)

  Disk /dev/vdb:3758GB

  Sectorsize(logical/physical):512B/512B

  PartitionTable: gpt

  Disk Flags:

  NumberStartEndSizeFilesystemNameFlags#包含有两个分区

  11049kB3221GB3221GB xfs primary

  23221GB3758GB537GB primary

  (4) 磁盘格式化创建文件系统,以制作 xfs 文件系统为例。

  [root@VM_0_89_centos ~]# mkfs.xfs /dev/vdb2

  meta-data=/dev/vdb2isize=512agcount=4,agsize=32768000 blks

  =sectsz=512attr=2,projid32bit=1

  =crc=1finobt=0,sparse=0

  data =bsize=4096blocks=131072000,imaxpct=25

  =sunit=0swidth=0 blks

  naming =version 2bsize=4096ascii-ci=0ftype=1

  log =internal logbsize=4096blocks=64000,version=2

  =sectsz=512sunit=0 blks,lazy-count=1

  realtime =noneextsz=4096blocks=0,rtextents=0

  (5) 挂载磁盘分区到系统中,以手动 mount 为例演示,实际使用时应使用 fstab 实现持久挂载。

  [root@VM_0_89_centos ~]# mount /dev/vdb2 /data1/

  [root@VM_0_89_centos ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  devtmpfs485M0485M0% /dev

  tmpfs496M24K496M1% /dev/shm

  tmpfs496M484K495M1% /run

  tmpfs496M0496M0% /sys/fs/cgroup

  /dev/vda150G1.9G46G4% /

  tmpfs100M0100M0% /run/user/0

  /dev/vdb13.0T33M3.0T1% /data

  /dev/vdb2500G33M500G1% /data1 #已挂载完毕

  三、总结

  前文总结了在 Linux 环境中 CBS 三种使用方式:

  裸设备创建文件系统;

  使用 MBR 格式分区;

  使用 GPT 格式分区。

  以及这三种使用方式对应的扩容方式和操作步骤。相比于裸设创建文件系统,使用 MBR 和 GPT 格式扩容时需要卸载磁盘。

  因此无法做到在线扩容。因此在云环境下推荐使用直接在裸设备上创建文件系统的方式,其更加便捷,易于实现,且扩容过程中可以在线扩容。

抱歉!评论已关闭.