Linux系统盘扩容后处理(fdisk)
操作场景
扩容成功后,对于linux操作系统而言,需要将扩容部分的容量划分至原有分区内,或者为扩容部分的磁盘分配新的分区。
本文以“CentOS 7.4 64bit”操作系统为例,采用fdisk分区工具为扩容后的系统盘分配分区。
当前云服务器上挂载的系统盘原容量为40GB,已经在管理控制台成功扩容了40GB,当前总容量应为80GB,本操作指导用户为系统盘新增分区。
不同操作系统的操作可能不同,本文仅供参考,具体操作步骤和差异请参考对应操作系统的产品文档。
- 不中断业务,新增分区
为扩容后的磁盘增加新的分区,不需要卸载原有分区,相比替换原有分区的方法,对业务影响较小。推荐系统盘或者需要保证业务不中断的磁盘扩容场景使用。
如果当前磁盘使用的是MBR分区形式,则此时要求扩容后的数据盘最大容量为2 TB,并且磁盘的分区数量还未达到上限。
- 中断业务,替换原有分区
如果当前磁盘使用的是MBR分区形式,并且磁盘的分区数量已经达到上限,则此时需要替换原有分区,替换原有分区不会删除原有分区的数据,但是需要先卸载原有分区,会影响线上业务运行。
如果当前磁盘使用的是MBR分区形式,并且扩容后磁盘容量已经超过2 TB,则超过2 TB的部分容量无法使用。此时若需要使用超过2 TB的部分容量,则必须将MBR分区形式换为GPT,更换磁盘分区形式时会清除磁盘的原有数据,请先对数据进行备份。
扩容时请谨慎操作,误操作可能会导致数据丢失或者异常,建议扩容前对数据进行备份,可以使用CBR功能,请参见管理备份磁盘。
前提条件
- 已登录云服务器。
- 弹性云服务器请参见《弹性云服务器用户指南》。
- 裸金属服务器请参见《裸金属服务器用户指南》。
- 已挂载磁盘至云服务器,且该磁盘的扩容部分未分配分区。
新增分区
本操作以该场景为例,当前云服务器上挂载的系统盘已有分区“/dev/vda1”,并挂载至“/”目录下,现在为系统盘扩容后的空间分配一个新的分区“/dev/vda2”,并挂载到“/opt”目录下,此时可以不中断业务。
- 执行以下命令,查看磁盘的分区信息。
fdisk -l
回显类似如下信息:[root@ecs-2220 ~]# fdisk -l Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 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: 0x0008d18f Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886079 41942016 83 Linux
表示当前系统盘“dev/vda”容量为80 GB,当前正在使用的分区“dev/vda1”为40 GB,新扩容的40 GB还未分配分区。
- 执行如下命令之后,进入fdisk分区工具。
fdisk /dev/vda
回显类似如下信息:[root@ecs-2220 ~]# fdisk /dev/vda Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
- 输入“n”,按“Enter”,开始新建分区。
回显类似如下信息:
Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended
表示磁盘有两种分区类型:- “p”表示主要分区。
- “e”表示延伸分区。
- 以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区。
回显类似如下信息:
Select (default p): p Partition number (2-4, default 2):
- 以分区编号选择“2”为例,输入主分区编号“2”,按“Enter”。
回显类似如下信息:
Partition number (2-4, default 2): 2 First sector (83886080-167772159, default 83886080):
- 输入新分区的起始磁柱编号,如设置默认值,按“Enter”。
本步骤中使用默认起始磁柱编号为例。
回显类似如下信息:First sector (83886080-167772159, default 83886080): Using default value 83886080 Last sector, +sectors or +size{K,M,G} (83886080-167772159,default 167772159):
- 输入新分区的截止磁柱编号,按“Enter”。
本步骤中使用默认截止磁柱编号为例。
回显类似如下信息:Last sector, +sectors or +size{K,M,G} (83886080-167772159, default 167772159): Using default value 167772159 Partition 2 of type Linux and of size 40 GiB is set Command (m for help):
- 输入“p”,按“Enter”,查看新建分区。
回显类似如下信息:
Command (m for help): p Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 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: 0x0008d18f Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886079 41942016 83 Linux /dev/vda2 83886080 167772159 41943040 83 Linux Command (m for help):
- 输入“w”,按“Enter”,将分区结果写入分区表中。
回显类似如下信息:
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 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) Syncing disks.
表示分区创建完成。
如果之前分区操作有误,请输入“q”,则会退出fdisk分区工具,之前的分区结果将不会被保留。
- 执行以下命令,将新的分区表变更同步至操作系统。
partprobe
- 执行以下命令,设置新建分区文件系统格式。
以“ext4” 文件格式为例:
mkfs -t ext4 /dev/vda2
设置xfs文件系统的操作与ext3或者ext4一样,命令为:mkfs -t xfs /dev/vda2
回显类似如下信息:[root@ecs-2220 ~]# mkfs -t ext4 /dev/vda2 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 2621440 inodes, 10485760 blocks 524288 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
格式化需要等待一段时间,请观察系统运行状态,若回显中进程提示为done,则表示格式化完成。
- 执行以下命令,将新建分区挂载到需要增加空间的目录下,以“/opt”为例。
mount /dev/vda2 /opt
回显类似如下信息:[root@ecs-bab9 test]# mount /dev/vda2 /opt [root@ecs-bab9 test]#
新增加的分区挂载到不为空的目录时,该目录下原本的子目录和文件会被隐藏,所以,新增的分区最好挂载到空目录或者新建目录。如确实要挂载到不为空的目录,可将该目录下的子目录和文件临时移动到其他目录下,新分区挂载成功后,再将子目录和文件移动回来。
- 执行以下命令,查看挂载结果。
df -TH
回显类似如下信息:[root@ecs-2220 ~]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 43G 2.0G 39G 5% / devtmpfs devtmpfs 509M 0 509M 0% /dev tmpfs tmpfs 520M 0 520M 0% /dev/shm tmpfs tmpfs 520M 7.2M 513M 2% /run tmpfs tmpfs 520M 0 520M 0% /sys/fs/cgroup tmpfs tmpfs 104M 0 104M 0% /run/user/0 /dev/vda2 ext4 43G 51M 40G 1% /opt
设置开机自动挂载磁盘
如果您需要在云服务器系统启动时自动挂载磁盘,不能采用在 /etc/fstab直接指定 /dev/xvdb1的方法,因为云中设备的顺序编码在关闭或者开启云服务器过程中可能发生改变,例如/dev/xvdb1可能会变成/dev/xvdb2。推荐使用UUID来配置自动挂载数据盘。
磁盘的UUID(universally unique identifier)是Linux系统为磁盘分区提供的唯一的标识字符串。
- 执行如下命令,查询磁盘分区的UUID。
blkid 磁盘分区
以查询磁盘分区“/dev/xvdb1”的UUID为例:
blkid /dev/xvdb1
回显类似如下信息:
[root@ecs-b656 test]# blkid /dev/xvdb1 /dev/xvdb1: UUID="1851e23f-1c57-40ab-86bb-5fc5fc606ffa" TYPE="ext4"
表示“/dev/xvdb1”的UUID。
- 执行以下命令,使用VI编辑器打开“fstab”文件。
vi /etc/fstab
- 按“i”,进入编辑模式。
- 将光标移至文件末尾,按“Enter”,添加如下内容。
UUID=1851e23f-1c57-40ab-86bb-5fc5fc606ffa /mnt/sdc ext3 defaults 0 2
UUID=1851e23f-1c57-40ab-86bb-5fc5fc606ffa /mnt/sdc ext4 defaults 0 2
- 按“ESC”后,输入“:wq”,按“Enter”。
保存设置并退出编辑器。