暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

工作中遇到的虚拟机的扩容情况总结

请叫我水哥 2020-08-22
687

一、关于MBR分区的扩容

    1.1 查看当前虚拟机磁盘容量情况如下

    1.2 扩容/dev/sda磁盘容器到2.5T

    1.3 对扩容的磁盘/dev/sda进行分区

    1.4 对根分区进行扩容

        1.4.1 PV的扩容

        1.4.2 VG的扩容

        1.4.3 LV的扩容

   1.5 总结

二、MBR分区转换为GPT分区

    2.1. 操作前系统分区结构

    2.2. 安装gdisk(MBR转GPT工具)

    2.3. MBR转换成GPT步骤

        2.3.1  扩容当前分区(避免使用最后33个block)

        2.3.2 挂载点卸载

        2.3.3 使用命令gdisk转换(MBR到GPT)

        2.3.4 转换后扩容使分区容量超过2T

        2.3.5 xfs_growfs重新载入扩展的分区

     2.4. 总结

三、parted工具说明

    3.1 为什么要使用parted工具

    3.2 查看系统当前分区情况

    3.3 parted命令参数说明

    3.4 扩容

    3.5 使用fdisk测试


最近客户云平台针对虚拟机进行了几次扩容,根据现场的情况和要求完成了相关虚拟机的扩容。如下扩容的实验主要是为了对之前的操作进行复现,并重新进行归纳和总结

一、关于MBR分区的扩容

实施目的:MBR分区的扩容(MBR分区不能大于2T)

实施要求:提前做好快照和数据备份,数据无价(生产环境一定要谨记)。

1.4.1 查看当前虚拟机磁盘容量情况如下

查看当前/dev/sda容量为64.4G,挂载点情况如下:

[root@disk ~]# fdisk /dev/sda -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos //dos,就是MBR分区类型
磁盘标识符:0x000d992e


设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
[root@disk ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 38G 1.5G 36G 4% /
/dev/sda1 xfs 1014M 143M 872M 15% /boot
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home

1.4.2 扩容/dev/sda磁盘容器到2.5T

模拟生产环境云平台的扩容

进入操作系统可以看到系统层面已经扩容到了2.5T

[root@disk ~]# fdisk -l /dev/sda
磁盘 /dev/sda:2684.4 GB, 2684354560000 字节,5242880000 个扇区 //可以看到sda磁盘容器已经扩容成功
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d992e
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM

1.4.3 对扩容的磁盘/dev/sda进行分区

说明:

  • 如果没有LVM管理分区,那么上面扩容就已经完成了磁盘扩容,如果需要扩容分区需要借助第三方工具(后面实验)

  • 本实验是LVM管理,可以进行在线扩容,扩容前做好备份和快照

由于当前是MBR分区,只能扩容到2T大小,并需要划分为LVM分区。MBR分区:fdisk -l查看的时候能看到磁盘标签类型为dos,也可以通过命令partprobe -s查看

[root@disk ~]# partprobe -s /dev/sda
/dev/sda: msdos partitions 1 2

步骤如下:

[root@disk ~]# fdisk /dev/sda
WARNING: The size of this disk is 2.7 TB (2684354560000 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
partition table format (GPT). //其实这里已经可以看到警告,磁盘已经大于2T,建议使用parted进行GPT格式分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n //创建一个新分区
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p //创建一个主分区
分区号 (3,4,默认 3):
起始 扇区 (125829120-4294967295,默认为 125829120):
将使用默认值 125829120
Last 扇区, +扇区 or +size{K,M,G} (125829120-4294967294,默认为 4294967294):
将使用默认值 4294967294
分区 3 已设置为 Linux 类型,大小设为 2 TiB //就算你在上面+2.5T,这里也只会设置为2TiB


命令(输入 m 获取帮助):t //指定分区system id
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出所有代码):8e //分区类型更改为lvm
已将分区“Linux”的类型更改为“Linux LVM”


命令(输入 m 获取帮助):p


磁盘 /dev/sda:2684.4 GB, 2684354560000 字节,5242880000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d992e


设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
/dev/sda3 125829120 4294967294 2084569087+ 8e Linux LVM


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


Calling ioctl() to re-read partition table.


WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。

可以看到/dev/sda有3个分区,并且都是msdos

[root@disk ~]# partprobe -s
/dev/sda: msdos partitions 1 2 3

1.4 对根分区进行扩容

1.4.1  PV的扩容

扩容前状态: 只有/dev/sda2一个pv

[root@disk ~]# pvscan 
PV /dev/sda2 VG centos lvm2 [<59.00 GiB / 4.00 MiB free]
Total: 1 [<59.00 GiB] / in use: 1 [<59.00 GiB] / in no VG: 0 [0 ]

扩容后状态:增加刚刚分区的/dev/sda5

[root@disk ~]# pvcreate /dev/sda3     //增加一个pv sda3
Physical volume "/dev/sda3" successfully created.
[root@disk ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<59.00 GiB / 4.00 MiB free]
PV /dev/sda3 lvm2 [1.94 TiB] //新增加的sda3
Total: 2 [<2.00 TiB] / in use: 1 [<59.00 GiB] / in no VG: 1 [1.94 TiB]

1.4.2 VG的扩容

扩容前:可以看到vg组名为centos,已经没有剩余空间。

[root@disk ~]# vgdisplay |grep free
Free  PE / Size       1 / 4.00 MiB    //没有剩余空间

扩容后:可以看到centos的vg已经有剩余空间2T了

[root@disk ~]# vgextend centos /dev/sda3
Volume group "centos" successfully extended
[root@disk ~]# vgdisplay |grep free
Free PE / Size 508928 / 1.94 TiB //剩余空间2T

1.4.3 LV的扩容

扩容前:可以看到有挂载点的空间大小。下面对/dev/centos/root进行扩容

[root@disk ~]# lvscan 
ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit
ACTIVE '/dev/centos/home' [18.08 GiB] inherit
ACTIVE '/dev/centos/root' [<37.04 GiB] inherit

扩容后:可以看到已经扩容到了2T。(但是有<2T是因为这个分区是MBR分区,不能超过2T。

[root@disk ~]# lvextend -L +1.94T /dev/centos/root 
Rounding size to boundary between physical extents: 1.94 TiB.
Size of logical volume centos/root changed from <37.04 GiB (9481 extents) to <1.98 TiB (518041 extents).
Logical volume centos/root successfully resized. //给了警告,说分区扩容超过了2T
[root@disk ~]# lvscan
ACTIVE '/dev/centos/swap' [<3.88 GiB] inherit
ACTIVE '/dev/centos/home' [18.08 GiB] inherit
ACTIVE '/dev/centos/root' [<1.98 TiB] inherit //给出多余2T,最终因为MBR分区,最多只能识别2T

1.4.5 重新读取分区

注意:

xfs分区重新读取容量是xfs_growfs

ext4分区重新读取容量是resize2fs,也可以通过lvresize -l 1.95T -r /dev/centos/root直接同时操作扩容及刷新操作

[root@disk ~]# xfs_growfs /dev/mapper/centos-root 
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2427136 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=9708544, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4740, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9708544 to 530473984

可以看到已经扩容到2T了

[root@disk ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 2.0T 1.5G 2.0T 1% /
/dev/sda1 xfs 1014M 143M 872M 15% /boot
/dev/mapper/centos-home xfs 19G 33M 19G 1% /home

1.5 总结

注意事项:

  • 如果想使用超过2T的分区,请使用gpt分区类型。并使用命令parted。

  • 不建议直接操作现有分区,任务误操作都可能导致数据丢失,提前备份好数据

  • xfs分区不支持缩容操作,ext4分区支持(但都不建议进行任何缩容操作,数据很容易丢失)

硬件磁盘的扩容:如果是物理服务器Raid扩容

  • 查看raid是否进行了逻辑卷的划分,如果有剩余容量,可以把空间直接扩容到当前raid卷中。

  • 查看raid卡型号是否支持在线把磁盘加入当前raid组。如果只划分了一个raid卷,操作系统能够直接识别剩余容量。如果有多个卷,参照前面说明

二、MBR分区转换为GPT分区

客户现场前期没有规划好,目前容量需要超过2T,那就必须要使用GPT格式了。

实施目的:上一章节中,由于MBR分区不超过2T,需要转换格式扩容支持2T以上操作

实施要求:数据无价,提前备份;不能在现有系统盘做分区转换,会破坏系统(单独硬盘使用的分区,比如客户环境单独使用数据云盘就是一个独立的磁盘分区)。

2.1 当前环境配置情况

如果要在线扩容,要确定是否使用LVM类型

/dev/sdb1 位lvm分区,磁盘标签类型为DOS,并查看挂载点信息和数据。容量20G,扩容到3T

[root@disk ~]# partprobe -s /dev/sda /dev/sdb 
/dev/sda: msdos partitions 1 2 3 //此为系统盘,不建议在系统盘上进行分区类型转换
/dev/sdb: msdos partitions 1 //数据盘


[root@disk ~]# df -hT /dev/sdb1
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 xfs 20G 33M 20G 1% /data


//挂载点目录里面的内容如下
[root@disk data]# ls
file1 file2 file3 file4 file5

2.2 安装gdisk(MBR转GPT工具)

注意:此工具在大部分场景下都是可以转mbr为gpt的,只要磁盘开头前34个扇区,或最后33个扇区被分区占用的场景不支持。

当前系统硬盘分区时,默认是从2048扇区开始分的,所以一般不会出现前34个扇区被占用,客在阿里云管理平台扩容云盘之后,后33扇区也不存在被占用。所以绝大多数情况下前34后33分区都不会被占用。除非客户主动刻意去占用。

这里可以通过parted /dev/xx --unit--s--p 查看硬盘前34分区有没有被占用。

[root@disk ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit //设置默认显示单位
Unit? [compact]?
% B chs compact cyl GB GiB kB kiB MB MiB s TB TiB
Unit? [compact]? s //显示扇区
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 41943040s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: //可以看到开始扇区2048s
Number Start End Size Type File system 标志
1 2048s 41943039s 41940992s primary xfs lvm
 
//fdisk -l 也可以查看
 [root@disk ~]# fdisk /dev/sdb -l
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xdd0cd2de
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 8e Linux LVM

可以看到总共有41943040个扇区,目前分区结构2048-41943039。前面注意说的(前34和后33个扇区都不能被占用),所以后面在进行转换的时候肯定无法进行转换(后面33个被占用了)。后面实验说明。

2.3 MBR转换成GPT步骤

直接使用gdisk /dev/sdb操作如下:

可以看到报错:分区表和最后一个分区重叠,需要保留最后33个block。。所以直接操作现有已经分区转换是行不通的。需要根据提示内容删除这个分区,或者在另一个实用程序中调整它的大小。

[root@disk ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10 //当前gdisk版本
Partition table scan: //扫描出来的分区格式是MBR
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
发现无效GPT和有效MBR;在内存中转换MBR到GPT格式,这个操作具有潜在的破坏性!
如果你不想转换你的MBR分区,输入'q'退出GPT格式转换。
***************************************************************
Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.
警告!次分区表与最后一个分区重叠33块!
您需要删除这个分区,或者在另一个实用程序中调整它的大小。
Command (? for help):


2.3.1  扩容当前分区(避免使用最后33个block)

现在进行分区扩容,20G扩容到3T.目的是延长分区后面的block

可以看到操作系统已经识别到了3T

[root@disk ~]# fdisk -l /dev/sdb 
磁盘 /dev/sdb:3221.2 GB, 3221225472000 字节,6291456000 个扇区 //可以看到总扇区已经变大,最后33个block肯定富余
磁盘标签类型:dos
磁盘标识符:0xdd0cd2de
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 8e Linux LVM

2.3.2 挂载点卸载

[root@disk ~]# umount /dev/sdb1

2.3.3 使用命令gdisk转换(MBR到GPT)

[root@disk ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10


Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
//可以看到已经没有之前的33block被占用的警告了
Command (? for help): w //将gpt表写入
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!最后的检查完成。即将写入GPT数据。这将覆盖现有的分区! !
Do you want to proceed? (Y/N): y //是否继续
OK; writing new GUID partition table (GPT) to /dev/sdb. //写入新的GPT分区到了/dev/sdb
The operation has completed successfully. //可以看到已经成功

查看转换后的分区标签已经为GPT

[root@disk ~]# partprobe -s /dev/sdb
/dev/sdb: gpt partitions 1

2.3.4 转换后扩容使分区容量超过2T

需要使用parted删除之前的sdb1,并重新创建sdb1

为什么执行删除这一步?这一步其实就是扩容了,因为需要扩容/dev/sdb1这个分区超过2T,如果不扩容,这一步可忽略,后面会有更详细实验。(请注意这里面一定要记住start sector的大小2048,新创建的也必须从这个节点开始,否则数据将全部丢失)

[root@disk ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s //以扇区为单位显示
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: //记住start的大小
Number Start End Size File system Name 标志
1 2048s 41943039s 41940992s xfs Linux LVM lvm
(parted) rm 1 //删除编号1的分区
(parted) p //再次查看,确定已经删除
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志


(parted) mkpart //创建分区
分区名称?[]? xfs //名字随便写,就是查看的时候name的名字
文件系统类型?[ext2]? xfs //文件系统类型xfs
起始点?2048 //注意这里一定要和查询出来的start一致
结束点?100% //后面所有空间全部给此分区
(parted) w
信息: You may need to update /etc/fstab.

2.3.5 xfs_growfs重新载入扩展的分区

如果是ext分区类型,则需要e2fsck -yt /dev/sdb1检查,然后在进行resize2fs /dev/sdb1重载容量

[root@disk ~]# xfs_growfs /dev/sdb1 
xfs_growfs: /dev/sdb1 is not a mounted XFS filesystem
//挂载一下挂载点
[root@disk ~]# mount /dev/sdb1 /data/
//查看下当前/data容量
[root@disk /]# df -hT |grep sdb1
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 xfs 20G 33M 20G 1% /data
//重载刷新
[root@disk /]# xfs_growfs /data/
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5242624, 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 5242624 to 786431488

可以看到挂载点容量从20G扩容到了3T(这里只是测试环境,真实环境依然如此),数据也没有丢失

[root@disk /]# df -hT |grep /dev/sdb1
/dev/sdb1 xfs 3.0T 51M 3.0T 1% /data
[root@disk /]# ll /data/
总用量 0
-rw-r--r-- 1 root root 0 8月 22 13:44 file1
-rw-r--r-- 1 root root 0 8月 22 13:44 file2
-rw-r--r-- 1 root root 0 8月 22 13:44 file3
-rw-r--r-- 1 root root 0 8月 22 13:44 file4
-rw-r--r-- 1 root root 0 8月 22 13:44 file5

至此,分区扩容成功,且MBR转换GPT成功。

2.4 总结

  • 需要扩容的分区属于的磁盘一定要是和系统盘分离。这也是云环境要求的系统盘和数据盘隔离的原因之一。方便扩容。

  • 如果扩容的磁盘只有一个分区,可以不使用LVM管理。如果有多个分区,为其中一个分区扩容,一定要使用LVM,前期一定要规划好。

  •  操作前一定要备份好数据或在云管理平台上面做好快照

  • 在扩容中,最重要的一点是一定要记住start起始点和end结束点的位置(扩容或者转换的关键)


三、parted工具说明

前面实验中已有对parted分区进行扩容做了实验,这一章节,进行进一步说明

3.1 为什么要使用parted扩容>2T磁盘

[root@disk ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
警告:fdisk GPT支持目前是新的,因此还处于试验阶段。请自行使用。

3.2 查看系统当前分区情况

[root@disk data]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.


磁盘 /dev/sdb:3221.2 GB, 3221225472000 字节,6291456000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 59BE37DB-D8D9-4E1C-93CE-FE3211088057
# Start End Size Type Name
1 2048 3145727999 1.5T Microsoft basic test
//查看挂载点/data的大小
[root@disk ~]# df -hT|grep /data
/dev/sdb1 xfs 1.5T 33M 1.5T 1% /data
//查看目录里面的数据
[root@disk ~]# ls /data/
test1 test2 test3 test4 test5

3.3 parted分区命令参数

help [COMMAND]

打印命令的帮助信息,或指定命令的帮助信息

print  [free|NUMBER|all]    

显示分区表, 指定编号的分区, 或所有设备的分区表

mkpart PART-TYPE [FSTYPE] START END

创建新分区。PART-TYPE 是以下类型之一:primary(主分 区)、extended(扩展分区)、logical(逻辑分区)。START 和 END 是新分区开始和结束的具体位置。

rm NUMBER

删除指定编号 NUMBER 的分区。

set NUMBER FLAG STATE

对指定编号 NUMBER 的分区设置分区标记 FLAG。对于 PC 常用的 msdos 分区表来说,分区标记 FLAG 可有如下值:”boot”(引导), “hidden”(隐藏), “raid”(软RAID磁盘阵), “lvm”(逻辑卷), “lba” (LBA,Logic Block Addressing模式)。状态STATE 的取值是:on 或 off

unit UNIT

设置默认输出时表示磁盘大小的单位为 UNIT,UNIT 的常用取值可以为:‘MB’、‘GB’、‘%’(占整个磁盘设备的百分之多少)、‘compact’(人类易读方式,类似于 df 命令中 -h 参数的用)、‘s’(扇区)、‘cyl’ (柱面)、‘chs’ (柱面cylinders:磁头 heads:扇区 sectors 的地址)

mkfs NUMBER FS-TYPE

对指定编号 NUMBER 的分区创建指定类型 FS-TYPE 的文件系 统。

mkpartfs PART-TYPE FSTYPE START END

创建新分区同时创建文件系统。FS-TYPE 是以下类型一:ext2、fat16、fat32、linuxswap、NTFS、reiserfs、ufs 等

cp [FROM-DEVICE] FROM-NUMBER TONUMBER

将分区 FROM-NUMBER 上的文件系统完整地复制到分区TO-NUMBER 中,作为可选项还可以指定一个来源硬盘的设备名称FROM-DEVICE,若省略则在当前设备上进行复制。

move NUMBER START END

将指定编号 NUMBER 的分区移动到从 START 开始 END 结束的位置上。注意:(1)只能将分区移动到空闲空间中。(2)虽然分区被移动了,但它的分区编号是不会改变的

resize NUMBER START END

对指定编号 NUMBER 的分区调整大小。分区的开始位置和结束位置由 START 和 END 决定

check NUMBER

检查指定编号 NUMBER 分区中的文件系统是否有什么错误

rescue START END

恢复靠近位置 START 和 END 之间的分区

mklabel,mktable LABELTYPE

创建一个新的 LABEL-TYPE 类型的空磁盘分区表,对于PC而言 msdos 是常用的 LABELTYPE。若是用 GUID 分区表,LABEL-TYPE 应该为 gpt

3.4 扩容

使用parted命令扩容分区,注意必须确认扇区大小,且保持一致,否则数据将丢失,使用这个命令扩容风险很大,提前备份数据。

当前/dev/sdb是3T的盘,分区容量1.5T,扩容到2T左右

1)卸载挂载点
[root@disk /]# umount /data/
2)开始扩容
[root@disk /]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s //以可读的单位显示,这里显示扇区大小
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: //记住使用的是2048
Number Start End Size File system Name 标志
1 2048s 3145727999s 3145725952s xfs test
(parted) rm 1
(parted) mkpart
分区名称?[]? test
文件系统类型?[ext2]? xfs
起始点?2048
结束点?75% //扩容到剩余空间的75%,一定要大于end的位置
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 6291456000s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:


Number Start End Size File system Name 标志
1 2048s 4718591999s 4718589952s xfs test


(parted) unit GB
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志 //看到了,如果unit不转换,start哪里根本看不出大小,差不多扩容到2.5T了
1 0.00GB 2416GB 2416GB xfs test
(parted) quit
信息: You may need to update /etc,/fstab.


3)挂载,然后重新刷新容量
[root@disk /]# mount /dev/sdb1 /data
[root@disk /]# xfs_growfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=98303936 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=393215744, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=191999, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 393215744 to 589823744


4)确定大小,已经扩容成功
[root@disk /]# df -hT|grep /dev/sdb1
/dev/sdb1 xfs 2.2T 33M 2.2T 1% /data


5)确定数据是否还在
[root@disk /]# ls /data/
test1 test2 test3 test4 test5

3.5 使用fdisk测试

前面说fdisk不建议用来操作大于2T的空间,因为还处于试验阶段不建议使用,这里测试下fdisk的扩容。(生产环境中不建议,还是建议使用parted)

操作步骤和parted命令使用方式一样,先删除,在创建。

这里用fdisk扩容大于2T磁盘的空间,2.2T扩容到2.5T左右。

实验中还是有bug,不能使用单位T。

1)卸载挂载点
[root@disk /]# umount /dev/sdb1


2)开始扩容
[root@disk /]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。


更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:3221.2 GB, 3221225472000 字节,6291456000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 59BE37DB-D8D9-4E1C-93CE-FE3211088057
# Start End Size Type Name
1 2048 4718591999 2.2T Microsoft basic test


命令(输入 m 获取帮助):d 1 //删除分区1
已选择分区 1
分区 1 已删除


命令(输入 m 获取帮助):n //创建一个新分区
分区号 (1-128,默认 1):
第一个扇区 (34-6291455966,默认 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-6291455966,默认 6291455966):+2.5T //这T不管用
Last sector, +sectors or +size{K,M,G,T,P} (2048-6291455966,默认 6291455966):+2.6T //这T不管用,连续使用了两次,都没生效,说明这个操作2T以上还是有bug
Last sector, +sectors or +size{K,M,G,T,P} (2048-6291455966,默认 6291455966):+2500G //直接用G单位,可以了。。


已创建分区 1
命令(输入 m 获取帮助):p


磁盘 /dev/sdb:3221.2 GB, 3221225472000 字节,6291456000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 59BE37DB-D8D9-4E1C-93CE-FE3211088057


# Start End Size Type Name
1 2048 5242882047 2.5T Linux filesyste
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。


3)重新挂载,重新载入磁盘容量
[root@disk /]# mount /dev/sdb1 /data
[root@disk /]# xfs_growfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=7, agsize=98303936 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=589823744, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=191999, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 589823744 to 655360000
//可以看到已经扩容成功
[root@disk /]# df -hT |grep /dev/sdb1
/dev/sdb1 xfs 2.5T 33M 2.5T 1% /data


4)数据还在
[root@disk /]# ls /data/
test1 test2 test3 test4 test5


文章转载自请叫我水哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论