亚马逊的EC2实例提示“磁盘上没有剩余空间”。

61

我已经安装了亚马逊 EC2 Fedora 实例,并将文件从一个位置复制到另一个位置。但是出现了“磁盘上没有剩余空间”的提示。

我运行了命令df -f

输出如下:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G   15G     0 100% /
none                  312M     0  312M   0% /dev/shm

我想在亚马逊的EC2实例上增加空间。有人能帮助我吗?

8个回答

87

这里有一种更简单的方法。(我的m2.2xlarge实例是使用RedHat Linux 6.2创建的,我发现它只有6GB可用空间,而其总容量为850GB):

  1. 通过ssh检查根目录下的空间:$df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvde1              6G    6G    0G   100% /
none                   17G     0   17G   0% /dev/shm
2. 从AWS控制台停止实例 3. 从AWS控制台卸载卷(注意附加信息下的挂载点,例如/dev/sda1) 4. 从AWS控制台对卷进行快照 5. 从AWS控制台使用快照创建一个新卷(使用剩余的所有空间作为实例类型,例如在我的m2.2xlarge情况下为825GB) 6. 从AWS控制台将新卷附加到原始挂载点 /dev/sda1 7. 从AWS控制台重新启动实例并通过ssh重新登录实例 8. 从ssh中,在根文件系统上运行resize2fs(参见步骤1中的df -h输出)[可能不需要]

$resize2fs /dev/xvde1

  1. 等待几分钟,可能去看看你的朋友如何像老板一样停止所有的根服务等:)
  2. 观察新的洞穴式挂载:$df -h
Filesystem            Size  Used   Avail Use%   Mounted on
/dev/xvde1            813G  3.7G    801G   1%     /
none                   17G     0     17G   0%     /dev/shm

9
对我很有用,甚至不需要进行resize2fs部分。谢谢! - Sitnik
1
很棒的解决方案。运行得非常好。第8步不是必要的。 - Benedikt Schmeitz
我按照这个答案操作,现在无法访问我的EC2实例。它显示网站无法访问。有人知道我哪里出错了吗? - Kevz
即使重新挂载卷,我仍然无法做任何事情(因为没有空间)。在执行sudo apt-get autoclean之后,我终于能够运行sudo growpart /dev/nvme0n1 1 - Johnny
你如何找到挂载点?我也找不到附件信息。 - Jason Melo Hall

40

修改卷大小。从AWS控制台,您可以修改卷的大小。

  1. 从AWS控制台打开“ELASTIC BLOCK STORE / 卷”
  2. 选择您的卷并选择“修改卷”(从“操作”按钮)
  3. 更改大小(例如8到20gib)
  4. 点击“修改”
  5. 从EC2仪表板重新启动
  6. 通过df -h检查大小是否已更改

EBS修改菜单中没有“重新启动”选项! - backslashN
3
您可以从EC2控制台重新启动它。点击“操作”按钮,选择“实例状态”,然后选择“重新启动”。祝好! - Alf Bae
4
这似乎是解决磁盘已满问题最简单且风险较小的方法。我尝试了它,它起作用了!需要注意的一点是,我的EC2由于空间已满而无法重新启动,所以我不得不选择实例状态 > 停止,然后再选择实例状态 > 启动。 - ParoX
我认为如果您增加EBS卷,它将重新创建实例。 - Carlos Andres
@ParoX,你说的“风险较小”是什么意思?我是真心想问。先谢谢了。 - arranjdavis
1
应该选择标记为正确答案的那个。 - Fernando Kosh

25

大家好,我有一个解决方案,耶!

假设您正在使用Linux AMI,在您的情况下,您有一种简单的方法可以增加文件系统的大小:

1)停止实例

2)卸载根卷

3)对卷进行快照

4)使用新大小从快照创建新卷

5)将新卷附加到与原始卷相同的实例上同一位置

6)启动实例,停止除SSH之外的所有服务,并将根文件系统设置为只读

7)扩大文件系统(例如使用resize2fs)和/或分区(如果需要)

8)重新启动

作为另一种选择,您还可以启动一个新实例并映射实例存储或者您可以创建一个新AMI来结合前两个步骤。


1
IP地址会改变吗? - Ajay
如果是私有IP,则是的。如果是公共IP,则不是。 - onkar
1
我相信停止实例会更改公共IP。如果您需要保留您的IP,请在按照这些步骤之前进行调查研究。 - Harry Netzer
1
使用弹性IP可防止重启后IP地址更改。 - Anand Singh
对于任何未来的搜索者,这里是Amazon指南链接 - Tyler Chong

6
  1. 使用du -a | sort -n命令查找最大的文件。
  2. 停止一些服务,它们可能会阻止已隐藏或已删除的文件被最终删除。

2

我跳过了所有的分离/快照/新卷之类的步骤... 只进行了调整大小。

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              5904748   4725152   1119608  81% /
none                  15728640         0  15728640   0% /dev/shm
[root@ip-10-25-6-214 ~]# resize2fs /dev/sda1
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/sda1 to 31457280 (4k) blocks.

4
你好,欢迎来到SO。当回答问题时,请添加更多关于你解决方案的信息,以便他人能够轻松复制你的步骤。 - Deepend
1
此答案在“低质量帖子”审核队列中,因为它只是代码而没有解释。请通过解释您的代码及其如何回答问题来改进您的答案。请阅读有关有益地回答编程问题的建议 - Adi Inbar

1

我不确定AWS是否已经添加了额外的步骤来扩展添加的磁盘空间,但以下命令适用于我:

按照社区wiki第6步的答案进行操作 然后在第7步中按照以下步骤进行:

  1. 检查卷是否有分区。使用lsblk命令
sudo lsblk

输出:

NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

xvda       202:0    0  20G  0 disk
└─xvda1    202:1    0   8G  0 part /
  1. 检查是否需要扩展分区。在上一步的lsblk命令输出中,比较分区大小和卷大小。如果分区大小小于卷大小,则继续进行下一步。如果分区大小等于卷大小,则无法扩展分区。
  2. 扩展分区。使用growpart命令并指定要扩展的分区。
sudo growpart /dev/xvda 1

请使用lsblk命令验证分区已被扩展。分区大小应该等于卷大小。
sudo lsblk

输出:

NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    20G  0 disk
└─xvda1 202:1    0    20G  0 part /

Reference


1

我在另一个EC2实例上挂载了磁盘,在那里我成功地使用了growpart和resize2fs。之后再将其挂载回原始的EC2实例。


在较新的基于Nitro的系统上,这是我必须要做的。如果我尝试运行“growpart”,我会收到一个错误“设备上没有剩余空间”。 - BoomShadow

0

当EC2实例是从"EBS-Store"而不是"Instance-Store"创建时,您的情况是有效的。从"instance-store"创建的EC2实例将始终为/mnt目录分配大量空间(约200GB +)。

否则,您的解决方案适用于那些从"EBS-Store"创建的EC2机器。您可以在这样的机器上做更多的事情。

  1. 更改终止类型
  2. 更改实例类型
  3. 从实例创建AMI
  4. 轻松自动扩展。

这个答案不准确。短暂卷大小会根据实例大小和AMI类型而变化,而不仅仅是根据基础(实例或ebs存储)的启动类型。此外,这个答案并没有真正解决问题,应该是一个评论而不是一个答案。 - Eight-Bit Guru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接