如何在使用packer创建AMI期间调整根文件系统的大小?

时间:2017-06-14 09:10:52

标签: amazon-web-services filesystems ami packer facter

我遇到的问题是,一些apache日志填写得如此之快,以至于根文件系统不够大。

我使用的是使用packer和centos 6创建的AMI。

如何在创建AMI期间调整根FS的大小以便以后使用?

2 个答案:

答案 0 :(得分:1)

为了实现我的结果,我在packer配置中添加了一个user_data_file脚本,如下所示:

# resize root fs if the volume is bigger
echo "ROOT DISK RESIZING" > /tmp/root_disk_resize.log
# wait for facter
while ( ! /usr/bin/facter ); do sleep 15 ; done >> /tmp/root_disk_resize.log 2>&1
OS_RELEASE=$(facter operatingsystemmajrelease 2>&1 )
ROOT_DEVICE=$(facter ec2_block_device_mapping_root 2>&1 )
# Install epel
rpm -ivh https://ftp.fau.de/epel/epel-release-latest-${OS_RELEASE}.noarch.rpm >> /tmp/root_disk_resize.log 2>&1
yum install -y cloud-utils-growpart gdisk >> /tmp/root_disk_resize.log 2>&1
# resize partition
growpart -v  ${ROOT_DEVICE} 1   >> /tmp/root_disk_resize.log 2>&1
# resize filesystem
resize2fs -p ${ROOT_DEVICE}1    >> /tmp/root_disk_resize.log 2>&1
# remove epel to avoid to interfere with the rest of the installation
rpm -e epel-release        >> /tmp/root_disk_resize.log 2>&1

因此我在packer user_data_file中添加了以下代码;我使用了来自傀儡的facter来获取我需要的信息,但你可以使用你想要的任何东西,甚至可以使用它。

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * ProactiveSubject
 *
 * @ORM\Table(name="ProactiveSubject")
 * @ORM\Entity
 */
class ProactiveSubject
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="ProactiveCheck", inversedBy="p_subjects")
 * @ORM\JoinTable(name="subject_check_operator")
 */
private $checks;

public function __construct() {
    $this->checks = new \Doctrine\Common\Collections\ArrayCollection();
  }
}

分区将被扩展,并且在下次重新启动时,FS将被调整为完整的卷大小,尽管在创建AMI期间无法查看。

我发现了一些有趣的信息和项目:

linux-rootfs-resize project

packer discussion

autoresize-ebs-root-volume-on-aws-amis

ami-block-device-mappings-example

答案 1 :(得分:0)

你可以直接添加一个块设备映射

<块引用>
binary_str = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

print(binary_str.hex())

您必须检查您的 AMI 哪个设备名称使用它可以是 /dev/sda1 或 /dev/xvda

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html