AWS 实例中没有足够的磁盘空间“/”

Sum*_*ant 28 server 11.04 amazon-ec2

我正在 AWS 云上为我的 Web 服务器运行 Ubuntu 11.04 实例,现在我发现服务器的/分区中没有磁盘空间。df -ah说这个

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  7.8G   97M  99% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
fusectl                  0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  3.7G  112K  3.7G   1% /dev
none                     0     0     0   -  /dev/pts
none                  3.7G     0  3.7G   0% /dev/shm
none                  3.7G   80K  3.7G   1% /var/run
none                  3.7G     0  3.7G   0% /var/lock
/dev/xvdb             414G   16G  377G   4% /mnt
Run Code Online (Sandbox Code Playgroud)

现在我已经尝试过这些东西来在/分区上获得一些额外的空间

  • 清理 Apache 的所有日志文件。
  • 从服务器中删除了所有不必要的文件。
  • 主目录清理。

但我仍然没有足够的空间。此实例类型为具有 8GB EBS 的m1.large。现在我在/dev/xvdb 中有足够的磁盘空间。

有没有办法可以将一些磁盘空间分配给//dev/xvdb或任何其他方式。请建议我对此的可能解决方案。是否可以将相同的/dev/xvdb分区与另一个实例一起使用。

Ste*_*pel 26

答案是双重的。

解决方法:将 /dev/xvdb (/mnt) 用于临时数据

这就是所谓的Amazon EC2实例的临时存储,它的特性与其他地方使用的持久性Amazon EBS存储的特性大不相同。特别是,这种临时存储将在停止/启动周期中丢失并且通常会消失,因此您绝对不想在那里放置任何具有持久价值的东西,即只将临时数据放在那里,您可以轻松地丢失或重建,像交换文件或计算过程中使用的严格临时数据。当然,例如,您可能会在那里存储大量索引,但必须准备在由于任何原因(例如重启、硬件故障等)清除存储后重建这些索引。

解决方案:调整 /dev/xvda1 (/) 以获得所需的存储空间

这就是所谓的Amazon EBS 支持的EC2 实例的根设备存储,它特别有助于Amazon EBS的灵活性和持久性,即放置在那里的数据相当安全并且可以在实例故障时幸免于难;您可以通过对存储在Amazon S3上的 EBS 卷进行定期快照来进一步提高灵活性和持久性,具有众所周知的 99.999999999% 持久性。

此快照功能使您能够依次解决您的问题,只要您可以将当前的 8GB EBS 根存储 (/dev/xvda1) 替换为您想要的大小。该过程在 Eric Hammond 的优秀文章Resizing the Root Disk on a Running EBS Boot EC2 Instance 中概述:

只要您在 EC2 实例上有一点停机时间(几分钟),就可以使用更大的副本更改根 EBS 卷,而无需启动新实例。

如果您正确地准备了他所描述的步骤(我强烈建议您首先使用废弃的 EC2 实例对其进行测试以熟悉该过程,或者甚至通过定制的脚本将其自动化),您应该能够完成该过程。停机时间只有几分钟。

大多数概述的步骤也可以通过AWS 管理控制台执行,从而避免处理Amazon EC2 API 工具;这归结为:

  • 停止(不是终止!)EC2 实例
  • 从停止的实例中分离 EBS 卷
  • 创建分离的 EBS 卷的快照
  • 从创建的快照创建一个新的(更大的)EBS 卷
  • 将新的 EBS 卷附加到 EC2 实例(重要!如果这是您的根设备,请确保将其命名为所提到的实例的根设备,例如 (/dev/sda1) 或 (/dev/xdva1)否则它将作为块设备而不是根设备附加,并且您将无法启动该实例,因为不会为该实例列出根设备。)
  • SSH 进入正在运行的实例并通过以下方式确认一切正常 df -ah
    • 如果您的系统没有自动调整文件系统的大小,您需要按照 Eric 的文章中的说明手动执行此操作

祝你好运!


选择

考虑到这些 EBS 卷的多功能性和易用性,一个额外的选择是将更多 EBS 卷附加到您的实例,并将明显可分离的关注区域移到那里。

例如,我们使用了几个非常重量级的 Java 应用程序,每个应用程序每个版本消耗 1-2GB 存储空间;为了简化版本升级并且通常能够根据我的判断将这些应用程序移动到不同的实例,我将它们分别放置在专用的 EBS 卷上,将它们安装到一个实例并将它们软链接到所需的位置,例如通常/var/lib/<app>/<version>/usr/local/<app>/<version>.

使用这种方法,我们目前正在运行 EC2 实例,根设备存储仍为其默认大小 8GB(就像您的一样),但有时也最多连接 8 个不同大小 (1-15GB) 的 EBS 卷。

不过,您需要注意潜在的网络性能问题,因为所有这些 EBS 卷都使用相同的 LAN 进行 I/O,这甚至可能会产生各自的性能提升,或者在极端情况下使您的网络饱和 - 所以通常这取决于关于手头的用例和工作负载。

  • @Sumant:那不好,所以你做了什么危险的事情,即将数据保存在一个基本上可以随时消失的磁盘上(通常不会,应该这样对待它)?我希望我在这方面没有误导 - 在减轻这种情况时请格外小心,以避免在此过程中丢失数据(无论如何,你_确实_有数据库备份,是吗?)! (2认同)