出于成本导向,通常会用比较小的EBS来作为初始的存储,很多时候,你不会(懒)设置很多cron任务去sync/move数据到S3,并且删除本地的数据来释放空间。那么怎么把原来8G的EBS扩容到40G来满足极其缓慢的容量增长需求哪?
简短描述
当扩展 EBS 卷上的根分区或根文件系统时,为避免出现设备上没有剩余空间错误,请使用驻留在内存中的临时文件系统 tmpfs。在 /tmp 挂载点下挂载 tmpfs 文件系统,然后再扩展您的根分区或根文件系统。
示例
以下示例显示了根 EBS 卷的块储存设备 /dev/nvme0n1 为 9 GiB,并且根分区(分区 1)已经为 8 GiB。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 9G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
如果您尝试增加根分区(分区 1)的大小,您将收到以下错误之一:
$ sudo growpart /dev/nvme0n1 1
/bin/growpart: line 248: /tmp/growpart.fklt5u/dump.out: No space left on device
FAILED: failed to dump sfdisk info for /dev/nvme0n1
-或者-
$ sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
FAILED: failed: sfdisk --list /dev/nvme0n1
注意:最佳实践是创建实例的 Amazon Machine Image (AMI) 备份或附加到实例的根 EBS 卷的快照,然后再尝试这些解决步骤。创建备份后,即使遇到意外的问题,也可以恢复数据。
解决方法
1. 使用 SSH 连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
2. 使用 df -h 命令验证“/”下挂载的根分区是否已满 (100%)。在以下示例中,/dev/nvme0n1p1 已使用 100% 的空间。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 460M 0 475M 0% /dev
tmpfs 478M 0 492M 0% /dev/shm
tmpfs 478M 432K 492M 1% /run
tmpfs 478M 0 492M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 8.0G 664K 100% /
tmpfs 96M 0 99M 0% /run/user/1000
3. 运行以下命令来收集有关附加的块存储设备以及根“/”挂载点的详细信息。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 9G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
nvme0n1
├─nvme0n1p1 xfs / afcf1342-1d40-41bd-bde9-e4ea5d87e3b6 /
└─nvme0n1p128
在上述示例的输出中,根 EBS 卷的总空间为 9 GiB,但根分区 (/dev/nvme0n1p1) 或分区1 只有 8 GiB。文件系统类型是 XFS。
4. 为避免块存储设备上没有剩余空间错误,将临时文件系统 tmpfs 挂载到 /tmp 挂载点。这将创建一个 10 M 的 tmpfs,并挂载到 /tmp。
$ sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
5. 运行 growpart 命令来增加根分区或分区 1 的大小。用您的根分区替换 /dev/nvme0n1。
$ sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
运行 lsblk 命令来验证分区 1 已扩展至 9 GiB。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 9G 0 disk
├─nvme0n1p1 259:1 0 9G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
6. 扩展文件系统。请参阅步骤 3 来验证根分区“/”的文件系统。
在以下示例中,对 XFS 类型的文件系统进行扩展。
$ sudo xfs_growfs -d /
data blocks changed from 2096635 to 2358779
= sectsz=512 sunit=0 blks, lazy-count=1
log =internal bsize=4096 blocks=2560, version=2
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
= sunit=0 swidth=0 blks
data = bsize=4096 blocks=2096635, imaxpct=25
= crc=1 finobt=1 spinodes=0
= sectsz=512 attr=2, projid32bit=1
realtime =none extsz=4096 blocks=0, rtextents=0
meta-data=/dev/nvme0n1p1 isize=512 agcount=4, agsize=524159 blks
在以下示例中,对分区 1 上的 EXT2/EXT3/EXT4 文件系统进行扩展:
$ sudo resize2fs /dev/nvme0n1p1
7. 扩展文件系统后,使用 df -h 命令来验证操作系统是否可以看到额外的空间。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 960M 0 960M 0% /dev
tmpfs 978M 0 978M 0% /dev/shm
tmpfs 978M 392K 978M 1% /run
tmpfs 978M 0 978M 0% /sys/fs/cgroup
/dev/nvme0n1p1 9.0G 8.0G 1022M 89% /
tmpfs 196M 0 196M 0% /run/user/1000
tmpfs 10M 0 10M 0% /tmp
8. 运行卸载命令来卸载 tmpfs 文件系统。
$ sudo umount /tmp
浙公网安备 33010602011771号