我已经看到了EBS数量增长的答案,但我想缩小。
默认的Ubuntu Server映像为15 GB,而我实际上最多仅需要2 GB(我使用其他卷来存储数据)。有没有办法缩小卷的大小?
我已经看到了EBS数量增长的答案,但我想缩小。
默认的Ubuntu Server映像为15 GB,而我实际上最多仅需要2 GB(我使用其他卷来存储数据)。有没有办法缩小卷的大小?
Answers:
我和您有同样的问题,所以我想出了解决方法。
首先,我是从美国东部地区的Ubuntu 32位EBS支持的ami中完成此操作的,其他操作系统或映像的工作方式可能有所不同。但是,我怀疑您应该没问题,只要您使用ext *文件系统即可。它可能适用于其他文件系统,但是您必须弄清楚如何自行调整它们的大小。
这些步骤基本上是:
将两个卷附加到一个正在运行的实例上,第一个卷基于要收缩的快照,第二个空白卷具有要收缩到的新大小。
检查第一个卷的文件系统并修复所有错误。
将文件系统缩小到第一个卷上,以便其大小仅与保存数据所需的大小一样大。
将文件系统从第一个卷复制到第二个。
将第二个卷上的文件系统扩展到最大大小。
通过检查第二卷中的错误来确保一切都正常。
拍摄第二卷的快照。
根据您刚拍摄的第二个卷的快照创建机器映像。
首先,您需要从要缩小的ami获取一些信息。特别是,您需要内核ID和ramdisk ID(如果有的话)(我缩小的映像没有ramdisk)。所有这些信息都可以从AMI窗口中的aws管理控制台中获得。
内核ID看起来像kia-xxxxxxxx,快照ID看起来像snap-xxxxxxxx,而ramdisk ID看起来像RIA-xxxxxxxx。
接下来,启动一个Linux实例。我启动了一个Ubuntu实例。如果愿意,可以使用t1.micro实例。接下来的步骤并不需要太多的精力。
计算机运行后,请附加从第一步记录下来的快照。就我而言,我将其附加到/ dev / sdf
然后,创建具有所需大小的新卷。就我而言,我创建了一个5GB的卷,因为这是我想要缩小到的大小。不要从快照创建此新卷。我们需要一个新的空白卷。接下来,将其附加到正在运行的实例,在我的情况下,我将其附加为/ dev / sdg
接下来,将ssh插入计算机,但不要挂接附加的卷。
在这一点上,我犯了偏执狂,我选择检查大容量文件系统,只是为了确保没有错误。如果您确信没有任何内容,则可以跳过此步骤:
$ sudo e2fsck -f /dev/sdf
接下来,我调整了大容量文件系统的大小,以使其仅与磁盘上的数据一样大:
$ sudo resize2fs -M -p /dev/sdf
-M缩小它,-p打印进度。
resize2fs应该告诉您shrunkin文件系统有多大。就我而言,它给了我4K块的大小。
现在,我们将shrunkin文件系统复制到新磁盘。我们将以16MB的块复制数据,因此我们需要弄清楚需要复制多少个16MB的块。这是缩小的文件系统大小派上用场的地方。
就我而言,缩小的文件系统刚好超过1 GB,因为在拍摄快照之前,我已经在基本的Ubuntu系统上安装了许多其他程序。我可能只是将文件系统的大小四舍五入到最接近的16MB而已,但我想放心一点。
因此,128次16MB块= 2GB:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
我复制了16MB的块,因为使用EBS时,您需要为每次读取和写入付费,因此我想尽可能地减少它们的数量。我不知道是否以此方式这样做,但可能没有受到伤害。
然后,我们需要调整刚复制到新卷的文件系统的大小,以便它使用该卷上的所有可用空间。
$ sudo resize2fs -p /dev/sdg
最后,检查一下,以确保一切正常:
$ sudo e2fsck -f /dev/sdg
这是我们在这台机器上需要做的所有事情,尽管安装新卷并不会造成任何伤害,就像测试一样。但是,此步骤几乎可以肯定是可选的,因为e2fsck应该会遇到任何问题。
现在,我们需要快照新卷,并基于它创建一个AMI。我们已经完成了机器的制作,因此您可以根据需要终止它。
如果已安装小卷,请确保已将其卸载,然后对其进行快照。同样,您可以在管理控制台中执行此操作。
最后一步需要命令行ec2工具。
编辑:
自发布此答案以来,AWS控制台允许您简单地右键单击快照,然后选择“从快照创建映像”。您仍然需要选择适当的内核ID。如果未出现在列表中,请确保您已选择适当的体系结构。
我们使用ec2-register应用程序根据您刚拍摄的快照注册AMI,因此请从您刚拍摄的快照中记下snap-xxxxxxxx值。
然后,您应该使用类似以下的命令:
ec2-register -C cert.pem -K sk.pem -n The_Name_of_Your_New_Image
-d Your_Description_of_This_New_AMI --kernel aki-xxxxxxxx
-b "/dev/sda1=snap-xxxxxxxx" --root-device-name /dev/sda1
当然,您需要用在开始时写下的内核ID替换快照ID,并用在上一步中创建的快照ID替换快照ID。您还需要将其指向上面的密钥(称为sk.pem)和x509证书(称为cert.pem)。当然,您可以选择任何名称和描述。
希望这可以帮助。
sudo e2fsck -f /dev/sdf
进行大小调整之前,第一个命令可能是必需的步骤(在我的特定实例上是Amazon Linux AMI)。
sudo mkfs -t ext4 /dev/sdg
。
是的,我也想知道。以下教程过于矫揉造作,但我认为它包含必要的工具:http : //www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_using_ubuntu
不必像上面那样安装到新的磁盘映像上,应该可以启动大型AMI,创建新的EBS,将EBS附加到正在运行的实例,然后将正在运行的AMI复制到新的EBS。最后,将新的EBS注册为AMI。
看看此博客文章了解更多背景知识,尤其是freremark的评论:http ://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2
最后一点,euca2ools似乎是ec2-ami-tools的理想替代品-euca2ools包含实际的联机帮助页!它们具有与ec2- *命令相同的名称,只是带有euca-前缀。 http://open.eucalyptus.com/wiki/Euca2ools使用
我想减小普通EC2实例正在使用的卷的大小。我按照与此处其他答案类似的步骤进行操作,但是遇到了问题。因此,这是缩小根目录卷所需要做的工作...
在AWS控制台中
1. Stop the source EC2 instance
2. Create a snapshot of the volume you want to shrink
3. Use the snapshot to create a new 'source' volume
4. Created a new volume with smaller size (made sure it was big enough for the data on source)
5. Attached both volumes to any EC2 instance (mine were /dev/sdf = source & /dev/sdg = target)
6. Start the EC2 instance
在EC2实例上
7. sudo su - (everything from here is run as root)
8. mkdir /source /target
9. mount -t ext4 /dev/sdf /source
10. mkfs.ext4 /dev/sdg
11. mount -t ext4 /dev/sdg /target
12. rsync -aHAXxSP /source/ /target
** notice that there is no trailing '/' after target if
you put one there your data will be copied to
/target/source and you will have to move it up a directory
13. cat /boot/grub/grub.conf (indicated that grub is using root=LABEL=/)
14. cat /source/etc/fstab (indicated that fstab was also using LABEL=/)
15. e2label /dev/sdg /
16. umount /source
17. umount /target
返回AWS控制台
18. Stop the instance
19. Detach ALL volumes from the instance
20. Attach the 'target' volume to the instance using /dev/sda1 as the device
21. Start the instance
在这里,我们遇到的问题据我所知尚未提及。 实例开始很好,太好了!但是,当我尝试SSH到实例时,无法连接。经过上述步骤的许多变化之后,我最终决定尝试使用刚启动的EC2实例中的根卷。
在AWS控制台中
1. Create a new EC2 instance with the right sized root volume
2. Stop the new instance
3. Detach the /dev/sda1 volume from the new instance
** used the 'source' volume from before & the new volume we just detached
4. Attached both volumes to the original EC2 instance (/dev/sdf & /dev/sdg)
5. Start the instance with the attached volumes
在EC2实例上
1. sudo su -
2. mkdir /source /target (only need to do this if you don't already have these directories)
3. mount -t ext4 /dev/sdf /source
4. mount -t ext4 /dev/sdg /target (no need to create a file system because it is already there)
5. rsync -aHAXxSP /source/ /target
6. umount /source
7. umount /target
返回AWS控制台
1. Stop the instance
2. Detach the 'source' and 'target' volumes from instance
3. Attach the 'target' volume to the instance from step 1 using /dev/sda1 as the device
4. Start the instance
5. ** we use an elastic IP so we just reassigned the IP to the new instance
希望这可以帮助某人