随着业务的增长,aliyun数据盘容量可能无法满足数据存储的需要,这时可以使用“”磁盘扩容“”功能扩容数据盘。
实例演示:
本文以一个SSD云盘的数据盘和一个运行Ubuntu 16..4 64位的 ECS 实例为例,说明如何扩容磁盘分区并使扩容后的容量可用。
未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4 文件系统),文件系统的挂载点为 /data,文件系统扩容完成后,数据盘仍然只有一个主分区。
1.在阿里云控制台对指定磁盘进行扩容操作
本次示例为50GB扩容到60GB
2.创建测试文件
先在原有分区内创建测试文件,扩容完毕后检查文件
[email protected]:~# mkdir -p /data/test [email protected]:~# touch /data/test/20180327 [email protected]:~# touch /data/test/20180327.txt [email protected]:~# tree /data/ /data/ ├── lost+found └── test ├── 20180327 └── 20180327.txt
3.卸载旧分区
3.1.运行“umount [文件系统名称]”命令卸载主分区。
umount /dev/vdb1
3.2.使用df -h查看是否卸载成功,如果看不到/dev/vdb1的信息表示卸载成功
[email protected]:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 799M 3.0M 796M 1% /run /dev/vda1 50G 5.4G 42G 12% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 799M 0 799M 0% /run/user/0
4.扩容指定的分区
4.1.使用 fdisk 命令删除原来的分区并创建新分区:
运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。
[email protected]:~# fdisk -l Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 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 Disklabel type: dos Disk identifier: 0xd6804155 Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 104855551 104853504 50G 83 Linux Disk /dev/vdb: 60 GiB, 64424509440 bytes, 125829120 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 Disklabel type: dos Disk identifier: 0x63c3e6e0 Device Boot Start End Sectors Size Id Type /dev/vdb1 2048 104857599 104855552 50G 83 Linux
过程原理:
先删除原有分区表,然后重建分区表,保存退出
创建分区表操作步骤:
1)输入第一个可用的扇区编号:为了保证数据的一致性,First sector 需要与原来的分区保持一致。在本示例中,按回车键采用默认值。
2)如果发现 First sector 显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。
3)输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。
对指定的磁盘进行操作
fdisk /dev/vdb
[email protected]:~# fdisk /dev/vdb Welcome to fdisk (util-linux 2.27.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 has been deleted. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-125829119, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-125829119, default 125829119): Created a new partition 1 of type ‘Linux‘ and of size 60 GiB. Command (m for help): wq The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
如果操作对象是指定的分区,会出现以下提示
[email protected]:~# fdisk /dev/vdb1 /dev/vdb1: device contains a valid ‘ext4‘ signature; it is strongly recommended to wipe the device with wipefs(8) if this is unexpected, in order to avoid possible collisions
由以上内容可知,磁盘分区是针对磁盘级别进行的操作,而不是分区级别
4.2.注意检查分区挂载情况:
保存退出后需要重新检测分区挂载情况,如果/dev/vdb1又被挂载上去就需要重新卸载该分区
[email protected]:~# df -h Filesystem Size Used Avail Use% Mounted on udev 7.9G 0 7.9G 0% /dev tmpfs 1.6G 3.2M 1.6G 1% /run /dev/vda1 50G 5.7G 41G 13% / tmpfs 7.9G 0 7.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup tmpfs 1.6G 0 1.6G 0% /run/user/0 /dev/vdb1 50G 52M 47G 1% /data [email protected]:~# umount /dev/vdb1 [email protected]:~# df -h Filesystem Size Used Avail Use% Mounted on udev 7.9G 0 7.9G 0% /dev tmpfs 1.6G 3.2M 1.6G 1% /run /dev/vda1 50G 5.7G 41G 13% / tmpfs 7.9G 0 7.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup tmpfs 1.6G 0 1.6G 0% /run/user/0
4.3.重新读取分区表信息
# 检查文件系统
e2fsck -f /dev/vdb1
# 变更文件系统大小
resize2fs /dev/vdb1
注意:
使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。
正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。
[email protected]:~# e2fsck -f /dev/vdb1 e2fsck 1.42.13 (17-May-2015) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 14/3276800 files (0.0% non-contiguous), 251700/13106944 blocks [email protected]:~# resize2fs /dev/vdb1 resize2fs 1.42.13 (17-May-2015) Resizing the filesystem on /dev/vdb1 to 15728384 (4k) blocks. The filesystem on /dev/vdb1 is now 15728384 (4k) blocks long.
5.挂载新分区
5.1.重新挂载分区到指定目录
mount /dev/vdb1 /data
[email protected]:~# mount /dev/vdb1 /data [email protected]:~# df -h Filesystem Size Used Avail Use% Mounted on udev 7.9G 0 7.9G 0% /dev tmpfs 1.6G 3.2M 1.6G 1% /run /dev/vda1 50G 5.7G 41G 13% / tmpfs 7.9G 0 7.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup tmpfs 1.6G 0 1.6G 0% /run/user/0 /dev/vdb1 59G 52M 56G 1% /data
5.2.配置开机器自动挂载分区
vim /etc/fstab
[email protected]:/data# vim /etc/fstab ...... /dev/vdb1 /data ext4 defaults 0 0
6.重启系统进行验证
# 检查文件,确认磁盘扩容成功
[email protected]:~# tree /data/ /data/ ├── lost+found └── test ├── 20180327 └── 20180327.txt
注意:虽然是无损扩容,但是最好操作之前做好备份,或快照,以免意外发生
以下是阿里云提示的注意事项:
1.磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。
2.挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止 (Stopped) 状态时才可以扩容。
无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。
3.扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。
4.建议在扩容数据盘之前手动创建快照,以备份数据。
5.如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。
6.包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。
经验:
1.重新分区(创建分区表)并不会删除磁盘分区的数据,格式化则会删除,
2.分区类型及个数最好不要调整
===================== END ========================