EC2 增加大小后无法调整卷大小
Posted
技术标签:
【中文标题】EC2 增加大小后无法调整卷大小【英文标题】:EC2 Can't resize volume after increasing size 【发布时间】:2012-06-16 09:26:26 【问题描述】:我已按照调整 EC2 卷大小的步骤进行操作
-
停止实例
拍摄当前卷的快照
在同一区域中从先前的快照创建了一个更大的新卷
从实例中分离旧卷
将新卷附加到实例的同一挂载点
旧卷是 5GB,而我创建的卷是 100GB
现在,当我重新启动实例并运行 df -h I
时仍然看到这个
Filesystem Size Used Avail Use% Mounted on
/dev/xvde1 4.7G 3.5G 1021M 78% /
tmpfs 296M 0 296M 0% /dev/shm
这是我跑步时得到的
sudo resize2fs /dev/xvde1
The filesystem is already 1247037 blocks long. Nothing to do!
如果我运行cat /proc/partitions
我明白了
202 64 104857600 xvde
202 65 4988151 xvde1
202 66 249007 xvde2
据我了解,如果我遵循了正确的步骤,xvde 应该具有与 xvde1 相同的数据,但我不知道如何使用它
如何使用新卷或 umount xvde1 并改为 mount xvde?p>
我不明白我做错了什么
我也试过sudo ifs_growfs /dev/xvde1
xfs_growfs: /dev/xvde1 is not a mounted XFS filesystem
顺便说一句,这是一个装有 centos 6.2 x86_64 的 linux 机器
提前感谢您的帮助
【问题讨论】:
【参考方案1】:修改 EBS 的大小后,
列出块设备
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:2 0 10G 0 disk
|-nvme0n1p1 259:3 0 1M 0 part
`-nvme0n1p2 259:4 0 10G 0 part /
扩展分区
假设您要扩展安装在/
上的第二个分区,
sudo growpart /dev/nvme0n1 2
如果根卷中的所有空间都用完了,并且基本上您无法访问/tmp
,即出现错误消息Unable to growpart because no space left
,
-
临时挂载
/tmp
卷:sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
在完全调整大小完成后卸载:sudo umount -l /tmp
验证新尺寸
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:2 0 20G 0 disk
|-nvme0n1p1 259:3 0 1M 0 part
`-nvme0n1p2 259:4 0 10G 0 part /
调整文件系统的大小
对于 XFS(使用挂载点作为参数)sudo xfs_growfs /
sudo resize2fs /dev/nvme0n1p2
【讨论】:
【参考方案2】:不再需要停止实例并分离 EBS 卷来调整它的大小! 2017 年 2 月 13 日亚马逊宣布:“Amazon EBS Update – New Elastic Volumes Change Everything”
即使要扩展的卷是运行实例的根卷,该过程也能正常工作!
假设我们想“即时”将 Ubuntu 的启动驱动器从 8G 增加到 16G。 步骤 1) 登录 AWS Web 控制台 -> EBS -> 右键单击要调整大小的那个 -> “修改体积” -> 更改“大小”字段并单击 [修改] 按钮
步骤 2) SSH 进入实例并调整分区大小: 让我们列出连接到我们盒子的块设备:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 8G 0 part /
您可以看到 /dev/xvda1 仍然是 16 GiB 设备上的 8 GiB 分区,并且该卷上没有其他分区。 让我们使用“growpart”将 8G 分区调整到 16G:
# install "cloud-guest-utils" if it is not installed already
apt install cloud-guest-utils
# resize partition
growpart /dev/xvda 1
让我们检查一下结果(可以看到 /dev/xvda1 现在是 16G):
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 16G 0 part /
许多 SO 答案建议使用 fdisk 删除/重新创建分区,这是一个讨厌、有风险、容易出错的过程,尤其是在我们更改启动驱动器时。
step-3) 调整文件系统的大小以一直增长以充分利用新的分区空间
# Check before resizing ("Avail" shows 1.1G):
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 6.3G 1.1G 86% /
# resize filesystem
resize2fs /dev/xvda1
# Check after resizing ("Avail" now shows 8.7G!-):
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 16G 6.3G 8.7G 42% /
因此,我们的停机时间为零,并且有大量新空间可供使用。 享受吧!
更新:更新:在 XFS 文件系统时使用 sudo xfs_growfs /dev/xvda1 而不是 resize2fs。
【讨论】:
调整分区大小很有帮助....!!最美妙的是它甚至适用于根卷。 有人会接受这个作为正确答案吗?只是因为......它是。 很好,非常感谢......我对执行上述答案中提到的步骤持怀疑态度,但这太酷了...... 呵呵,官方文档没有提到growpart,这就是为什么我之前不能让它工作的原因。谢谢! @Shihas,是的。这就是重点。即使是可启动的“根”安装驱动器也可以安全地增加而无需重新启动!【参考方案3】:姓名和号码之间加空格,例如:
sudo growpart /dev/xvda 1
注意设备名和分区号之间有空格。
要扩展每个卷上的分区,请使用以下 growpart 命令。请注意,设备名称和设备名称之间有一个空格 分区号。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html
【讨论】:
【参考方案4】:以防万一有人在这里使用 GCP 谷歌云平台,试试这个:
sudo growpart /dev/sdb 1
sudo resize2fs /dev/sdb1
【讨论】:
你知道如果它不增长为什么会发生吗?我在 2 台机器上执行了此操作,每台机器都有一个辅助磁盘(找到一个包含此信息的帖子),其中 1 个磁盘增长但另一个没有。【参考方案5】:所以万一有人遇到这个问题,他们在 100% 使用时遇到了这个问题,甚至没有空间来运行 growpart 命令(因为它在 /tmp 中创建了一个文件)
这是我发现的一个命令,即使在使用 EBS 卷时,它也会绕过,如果你的 ec2 上没有剩余空间,并且你处于 100% 状态
/sbin/parted ---pretend-input-tty /dev/xvda resizepart 1 yes 100%
在此处查看此网站:
https://www.elastic.co/blog/autoresize-ebs-root-volume-on-aws-amis
【讨论】:
这个命令后面应该跟sudo resize2fs /dev/xvda1
更新/etc/fstab
,只有在df -h
之后才会显示增长的磁盘空间【参考方案6】:
-
sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1
以上两个命令为我节省了 AWS ubuntu ec2 实例的时间。
【讨论】:
【参考方案7】:上面 jperelli 的完美评论。
我今天遇到了同样的问题。 AWS 文档没有明确提到 growpart。我找到了艰难的方法,确实这两个命令在 M4.large 和 M4.xlarge 与 Ubuntu 上完美运行
sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1
【讨论】:
附加的第二个答案,这个答案是调整大小 太棒了!在我的 t2.small 实例上工作。唷。以为会比这更血腥。谢谢! 我似乎无法安装包含 growpart 的 cloud-guest-utils。 Linux 版本 3.16.0-4-amd64 我遇到了同样的问题,但运行 sudo resize2fs /dev/xvda1 现在它反映了谢谢【参考方案8】:登录 AWS Web 控制台 -> EBS -> 右键单击要调整大小的那个 -> “修改音量” -> 更改“大小”字段并单击 [修改] 按钮
growpart /dev/xvda 1
resize2fs /dev/xvda1
这是 Dmitry Shevkoplyas 答案的简单版本。 AWS 文档未显示 growpart
命令。这适用于 ubuntu AMI。
【讨论】:
【参考方案9】:谢谢@Dimitry,它就像一个魅力,只需稍加改动即可匹配我的文件系统。
来源:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux
然后使用以下命令,替换文件系统的挂载点(必须挂载 XFS 文件系统以调整它们的大小):
[ec2-user ~]$ sudo xfs_growfs -d /mnt
meta-data=/dev/xvdf isize=256 agcount=4, agsize=65536 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 262144 to 26214400
注意 如果您收到 xfsctl failed: Cannot allocate memory 错误,您可能需要更新实例上的 Linux 内核。有关详细信息,请参阅您的特定操作系统文档。 如果您收到一个 The filesystem is already nnnnnnn blocks long。没事做!错误,请参阅扩展 Linux 分区。
【讨论】:
【参考方案10】:感谢 Wilman,您的命令正常运行,如果我们将 EBS 增加到更大的尺寸,则需要考虑一些小的改进
-
停止实例
从卷创建快照
根据快照增加大小创建新卷
检查并记住当前的卷挂载点(即
/dev/sda1
)
分离当前音量
将最近创建的卷附加到实例,设置准确的挂载点
重启实例
通过 SSH 访问实例并运行 fdisk /dev/xvde
警告:DOS 兼容模式已弃用。强烈建议 关闭模式(命令'c')并将显示单位更改为 扇区(命令“u”)
点击 p 显示当前分区
点击 d 删除当前分区(如果有多个,您必须一次删除一个)注意:不要担心数据不会丢失 点击n创建一个新分区 点击 p 将其设置为主 点击1设置第一个圆柱体 设置所需的新空间(如果为空则保留整个空间) 点击 a 使其可启动 点击 1 和 w 写入更改 重启实例或使用partprobe
(来自parted
包)告诉内核有关新分区表的信息
通过 SSH 登录并运行 resize2fs /dev/xvde1
最后检查新空间运行df -h
【讨论】:
"警告:DOS 兼容模式已弃用。强烈建议关闭模式(命令'c')并将显示单位更改为扇区(命令'u')" i> 这对我来说不是必需的(Ubuntu 13.04)。它已经关闭了 DOS 兼容性并默认使用扇区。按c
和u
实际上切换到不推荐使用的模式。
该解决方案运行良好,但实例卡在“1/2 检查通过”并带有感叹号(ReadHat 6.5)。为了解决这个问题,我将 "first cylinder" 设置为 16(就像以前一样)。之后,实例以“2/2 检查通过”正常启动。希望这可以帮助某人...
我也必须更改第一个柱面,但我必须将其更改为 2048。我建议在删除之前检查您当前的分区设置。
重启实例后,我无法通过 SSH 连接。连接超时并且 aws 控制台显示它无法启动其状态检查。我认为它已经死了。知道该怎么做吗?
这个答案现在已被弃用,因为 AWS 支持 EBS 卷的在线调整大小。【参考方案11】:
没有足够的代表在上面发表评论;但还要注意,根据上面的 cmets,如果从 1 开始,您可能会损坏您的实例;如果您在启动 fdisk 之后在使用“p”列出分区之前点击“u”,这实际上会为您提供正确的开始编号,这样您就不会损坏您的卷。对于 centos 6.5 AMI,同样如上所述 2048 对我来说是正确的。
【讨论】:
【参考方案12】:可引导标志 (a) 在我的情况下不起作用(EC2、centos6.5),所以我不得不从快照重新创建卷。 重复所有步骤后,除了可启动标志 - 一切都完美无缺,所以我能够在之后 resize2fs。 谢谢!
【讨论】:
【参考方案13】:[已解决]
这是必须要做的事情
-
停止实例
从卷创建快照
根据快照增加大小创建新卷
检查并记住当前的卷挂载点(即 /dev/sda1)
分离当前音量
将最近创建的卷附加到实例,设置准确的挂载点
重启实例
通过 SSH 访问实例并运行
fdisk /dev/xvde
点击 p 显示当前分区
点击 d 删除当前分区(如果有多个,您必须一次删除一个)注意:不要担心数据不会丢失
点击n创建一个新分区
点击 p 将其设置为主
点击1设置第一个圆柱体
设置所需的新空间(如果为空则保留整个空间)
点击 a 使其可启动
点击 1 和 w 写入更改
重启实例
通过 SSH 登录并运行 resize2fs /dev/xvde1
最后检查新空间运行df -h
就是这样
祝你好运!
【讨论】:
在 Amazon EBS 卷中,在 resize2fs 中使用与 fdisk 相同的挂载点似乎很重要。 df 显示 /dev/xvda1 之类的东西作为附加的 EBS 卷,但是 resize2fs 命令仅在我使用 /dev/sdf1 标识符时才对我有用,我在 fdisk 中创建新分区时使用了该标识符。 这在 AWS 文档中。糟糕的是,经过 3 年的时间,他们的程序仍然不完整。如果你有一个图像,你可以回退,当然。总是可以从运行桌面的实例中临时挂起新磁盘,但是如果您正在考虑使用 gparted,则需要挂载它以调整大小可能是个问题。 gcloud 即时调整大小。 我的存储设备 (/dev/xvda1) 从扇区 16065 开始,而不是扇区 1。所以在我的情况下,第 13 步(点击 1 设置第一个柱面)必须是 16065。 不要使用这些解决方案,您可能会丢失数据。实际上,如果在分区表中显示分区列表值,我发现不要选择删除分区选项,因为如果列表在那里,那么它实际上会删除分区,所以即使答案说“它不会删除”。有一种方法可以扩展分区大小,在底部检查是否有其他实用程序可以帮助您顺利扩展分区大小。【参考方案14】:这将适用于 xfs 文件系统只需运行此命令
xfs_growfs /
【讨论】:
让我的一天...myWEEK! 也保存了我的“WEEK”【参考方案15】:您是否在此卷上进行了分区?如果你这样做了,你需要先扩大分区。
【讨论】:
不,我没有。我应该吗?我该怎么做?请记住,我附加的这个新卷应该包含以前的所有数据,因为它是原始卷的快照 没有。但是,如果附加了分区,我会收到该错误。去仔细检查你是否使卷大小正确,并仔细检查你安装了新卷。 另外,您不必停止实例来执行此操作。如果您对该卷进行写入是安全的,但您可以在实例运行时对其进行快照。以上是关于EC2 增加大小后无法调整卷大小的主要内容,如果未能解决你的问题,请参考以下文章