【问题标题】:Unable to growpart because no space left无法成长,因为没有剩余空间
【发布时间】:2021-03-27 01:53:34
【问题描述】:

我正在运行一个 AWS EC2 Ubuntu 实例,最初的 EBS 存储空间为 8GB。

现在 99.8% 已满,因此我按照 AWS 文档说明将 EBS 卷增加到 16GB。我现在需要将我的分区 /dev/xvda1 扩展到 16GB,但是当我运行命令时

$ growpart /dev/xvda 1

我得到了错误

mkdir: cannot create directory ‘/tmp/growpart.2626’: No space left on device

我试过了

  1. 重启实例
  2. 停止实例,并根据旧的 8GB 卷的快照挂载新创建的大小为 16GB 的 EBS 卷
  3. running docker system prune -a(导致“无法连接到 unix:/var/run/docker.sock 的 Docker 守护程序。docker 守护程序是否正在运行?”错误。当我尝试使用 sudo dockerd 启动守护程序时,我也收到“设备上没有剩余空间”错误)
  4. 正在运行resize2fs /dev/xvda1

一切都无济于事。

运行lsblk 返回

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0     7:0    0   89M  1 loop /snap/core/7713
loop1     7:1    0   18M  1 loop /snap/amazon-ssm-agent/1480
loop2     7:2    0 89.1M  1 loop /snap/core/7917
loop3     7:3    0   18M  1 loop /snap/amazon-ssm-agent/1455
xvda    202:0    0   16G  0 disk
└─xvda1 202:1    0    8G  0 part /

df -h 返回

Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M   16M  379M   4% /run
/dev/xvda1      7.7G  7.7G     0 100% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/loop0       90M   90M     0 100% /snap/core/7713
/dev/loop1       18M   18M     0 100% /snap/amazon-ssm-agent/1480
/dev/loop2       90M   90M     0 100% /snap/core/7917
/dev/loop3       18M   18M     0 100% /snap/amazon-ssm-agent/1455
tmpfs           395M     0  395M   0% /run/user/1000

df -i 返回

Filesystem      Inodes  IUsed  IFree IUse% Mounted on
udev            501743    296 501447    1% /dev
tmpfs           504775    457 504318    1% /run
/dev/xvda1     1024000 421259 602741   42% /
tmpfs           504775      1 504774    1% /dev/shm
tmpfs           504775      3 504772    1% /run/lock
tmpfs           504775     18 504757    1% /sys/fs/cgroup
/dev/loop0       12827  12827      0  100% /snap/core/7713
/dev/loop1          15     15      0  100% /snap/amazon-ssm-agent/1480
/dev/loop2       12829  12829      0  100% /snap/core/7917
/dev/loop3          15     15      0  100% /snap/amazon-ssm-agent/1455
tmpfs           504775     10 504765    1% /run/user/1000

【问题讨论】:

标签: amazon-web-services amazon-ec2 amazon-ebs


【解决方案1】:

对于遇到此问题的任何人,这是答案的链接:https://aws.amazon.com/premiumsupport/knowledge-center/ebs-volume-size-increase/

总结

  1. 运行 df -h 以验证您的根分区已满 (100%)
  2. 运行lsblk,然后运行lsblk -f以获取块设备详细信息
  3. sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
  4. sudo growpart /dev/DEVICE_ID PARTITION_NUMBER
  5. lsblk 验证分区是否已扩展
  6. sudo resize2fs /dev/DEVICE_IDPARTITION_NUMBER
  7. 运行 df -h 以验证您调整大小的磁盘
  8. sudo umount /tmp

【讨论】:

  • 非常简单的分步指南。好答案!
  • 这才是真正的答案
  • 在我的情况下,第 3 步是关键 sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp,如果第 6 步根本不起作用,我必须重新启动实例本身才能使其工作。
  • 拯救了我的一天和周末
  • 如何找出 DEVICE_ID 和 PARTITION_NUMBER?我的设备是nvme0n1p2,所以我猜它分别是nvme0n12,它似乎工作。但现在我无法让 resize2fs 命令使用这些值。
【解决方案2】:

只需确保在运行命令 growpart /dev/xvda 1 之前清除 tmp 文件夹,方法是运行另一个命令 sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp,这应该可以解决问题。

以下是调整 EBS 卷大小的完整回顾:

运行 df -h 以验证您的磁盘已满 (100%)

/dev/xvda1 8.0G 8.0G 20K 100% /

运行lsblk

NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  20G  0 disk
`-xvda1 202:1    0   8G  0 part /

稍微清除tmp文件夹

sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp

最后增加分区空间

sudo growpart /dev/xvda 1

CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=41938911 end=41943007

最后执行 sudo reboot 等待实例完全重新加载,通过 ssh 进入实例并运行 df -h 应该会显示添加的新空间:

/dev/xvda1       20G  8.1G   12G  41% /

注意新的可用空间,看看它是如何不再满的(不是100%,现在是41%

【讨论】:

    【解决方案3】:

    我看到这篇文章http://www.daniloaz.com/en/partitioning-and-resizing-the-ebs-root-volume-of-an-aws-ec2-instance/ 并从那里得到了一些想法来解决它。

    采取的步骤:

    1. 记下根设备(例如 /dev/sda1)
    2. 停止实例
    3. 分离根 EBS 卷,然后修改卷大小(如果您还没有)
    4. 创建一个辅助实例(例如,t2.micro 实例,或根据需要使用现有实例)
    5. 将第 2 步中的卷附加到辅助实例(与哪个设备无关)
    6. 在辅助实例中,运行lsblk 以确保卷已正确挂载
    7. sudo growpart /dev/xvdf 1(或类似的,用于扩展分区)
    8. lsblk 检查分区是否增长
    9. 分离卷
    10. 将卷附加到您的原始实例,并将设备设置为您在步骤 1 中记下的设备
    11. 启动实例,然后通过 SSH 连接到它
    12. 如果您仍然收到消息“Usage of /: 99.8% of X.XX GB”,请运行 df -h 以检查您的根卷分区的大小(例如 /dev/xvda1
    13. 运行 sudo resize2fs /dev/xvda1(或类似的)来调整您的分区大小
    14. 运行 df -h 以检查您的 Use%/dev/xvda1 不再是 ~100%

    【讨论】:

      【解决方案4】:

      首先我删除缓存和不必要的文件。

      sudo apt-get autoclean
      sudo apt-get autoremove
      

      之后,我关注了这个博客:

      https://devopsmyway.com/how-to-extend-aws-ebs-volume-with-zero-downtime/

      【讨论】:

      • ❯ apt autoremove 正在读取包列表...错误! E:写入错误 - 写入(28:设备上没有剩余空间) E:IO 保存源缓存时出错 E:无法解析或打开包列表或状态文件。
      • 您不能sudo apt-get autoclean,因为没有剩余空间。 :)
      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2019-03-08
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      相关资源
      最近更新 更多