在AWS EC2中创建不含Marketplace code的CentOS6 AMI

参考资料:
https://www.caseylabs.com/remove-the-aws-marketplace-code-from-a-centos-ami/
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/storage_expand_partition.html

背景介绍:
在AWS EC2中,从Marketplace里面可以很方便的选择最新的CentOS6的官方Minimal版本的AMI,来创建Instance。
但是这里面却埋了一个大坑,那就是,所有基于Marketplace里面的AMI所创建的Instance,都会带有一个Marketplace code。
它会导致你无法通过为现有根分区所在的EBS Volume创建Snapshot和新的Volume的方式来对其扩容。
在Detach了现有的根分区所在的Volume后,将无法再次将其Attach到Instance当中,在Attach新的Volume时也会遇到相同的报错:

1Client.OperationNotPermitted:
2'vol-xxxxxxx' with Marketplace codes may not be attached as a secondary device.

这个Marketplace code,顾名思义,应该就是为了保护一些付费的AMI不被随意的克隆,但不知道为什么没有对费用为$0的CentOS6 AMI做单独的处理。
上面的限制,主要影响到的是,默认创建好的CentOS6 Instance的EBS Volume只有8G,即使在创建时指定了50G的EBS Volume,创建后的根分区空间也只有8G。这样的大小是无法满足线上需求的,只能对其进行扩容,而因为有上面的Marketplace code的限制,又使扩容变得很艰难。
还好最终我通过参考上面的两篇文章,从官方的CentOS6 AMI中移除了Marketplace code,并成功的对根分区进行了扩容并创建了相应的AMI。

具体步骤:
1. 从现有的CentOS6 AMI中移除Marketplace code
1.1 从AWS的Marketplace搜索CentOS6 AMI,并创建一个根分区所在的EBS Volume为8G(默认大小)的Instance;
1.2 在AWS EC2 web console中,再创建一个新的大小为8G的EBS Volume;
1.3 将新创建的EBS Volume Attach到Instance上,通常会默认识别为/dev/xvdj(HVM版本的AMI会识别为/dev/xvdf);
1.4 通过SSH登陆到Instance,并通过dd克隆根分区所在的EBS Volume(HVM版本的AMI会将根目录所在的EBS Volume识别为/dev/xvda):

1dd bs=65536 if=/dev/xvde of=/dev/xvdj

1.5 当克隆完成以后,关闭Instance;
1.6 Detach现有根分区所在的EBS Volume;
1.7 Detach新创建的EBS Volume,并重新Attach到Instance,作为/dev/sda(HVM版本的AMI需要指定为/dev/sda1);
1.8 启动Instance;
1.9 在确认Instance正常启动后,在EC2 web console中右键点击Instance,并选择Create Image,即可创建一个新的不含Marketplace code的CentOS6 AMI了,我一般将其命名为official_centos6_x86_64_minimal_ebs8g。

2. 将现有的AMI根分区所在的EBS Volume扩容为50G,并创建新的AMI official_centos6_x86_64_minimal_ebs50g
2.1 基于AMI official_centos6_x86_64_minimal_ebs8g创建一个Instance;
2.2 为Instance所在的EBS Volume创建一个Snapshot;
2.3 创建一个新的大小为50G的Volume,并包含刚刚创建的Snapshot;
2.4 将新创建的Volume Attach到Instance,作为第二块EBS Volume,默认会识别为/dev/xvdj(HVM版本的AMI会识别为/dev/xvdf);
2.5 在Instance上对第二块EBS Volume进行扩容,详细步骤如下(HVM版本的AMI会将根目录所在的EBS Volume识别为/dev/xvda):

01[root@ip-172-17-4-12 ~]# parted /dev/xvdj
02GNU Parted 2.1
03Using /dev/xvdj
04Welcome to GNU Parted! Type 'help' to view a list of commands.
05(parted) unit s
06(parted) print
07Model: Xen Virtual Block Device (xvd)
08Disk /dev/xvdj: 104857600s
09Sector size (logical/physical): 512B/512B
10Partition Table: msdos
11
12Number  Start  End        Size       Type     File system  Flags
13 1      2048s  16777215s  16775168s  primary  ext4         boot
14
15(parted) rm 1
16(parted) mkpart primary 2048s 100%
17(parted) print
18Model: Xen Virtual Block Device (xvd)
19Disk /dev/xvdj: 104857600s
20Sector size (logical/physical): 512B/512B
21Partition Table: msdos
22
23Number  Start  End         Size        Type     File system  Flags
24 1      2048s  104857599s  104855552s  primary  ext4
25
26(parted) set 1 boot on
27(parted) print
28Model: Xen Virtual Block Device (xvd)
29Disk /dev/xvdj: 104857600s
30Sector size (logical/physical): 512B/512B
31Partition Table: msdos
32
33Number  Start  End         Size        Type     File system  Flags
341      2048s  104857599s  104855552s  primary  ext4         boot
35
36(parted) quit
37Information: You may need to update /etc/fstab.
38
39[root@ip-172-17-4-12 ~]# e2fsck -f /dev/xvdj1
40e2fsck 1.41.12 (17-May-2010)
41Superblock needs_recovery flag is clear, but journal has data.
42Run journal anyway<y>? yes
43
44/dev/xvdj1: recovering journal
45Pass 1: Checking inodes, blocks, and sizes
46Pass 2: Checking directory structure
47Pass 3: Checking directory connectivity
48Pass 4: Checking reference counts
49Pass 5: Checking group summary information
50
51/dev/xvdj1: ***** FILE SYSTEM WAS MODIFIED *****
52/dev/xvdj1: 18425/524288 files (0.2% non-contiguous), 243772/2096896 blocks
53
54[root@ip-172-17-4-12 ~]# lsblk
55NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
56xvde    202:0    0   8G  0 disk
57└─xvde1 202:1    0   8G  0 part /
58xvdj    202:80   0  50G  0 disk
59└─xvdj1 202:     0  50G  0 part
60
61[root@ip-172-17-4-12 ~]# resize2fs /dev/xvdj1
62resize2fs 1.41.12 (17-May-2010)
63Resizing the filesystem on /dev/xvdj1 to 13106944 (4k) blocks.
64The filesystem on /dev/xvdj1 is now 13106944 blocks long.

2.6 关闭Instance;
2.7 Detach现有根分区所在的EBS Volume;
2.8 Detach扩容后的第二块EBS Volume,并重新Attach到Instance,作为/dev/sda(HVM版本的AMI需要指定为/dev/sda1);
2.9 启动Instance;
2.10 在确认Instance正常启动后,在EC2 web console中右键点击Instance,并选择Create Image,即可创建一个新的根分区大小为50G的CentOS6 AMI了,我一般将其命名为official_centos6_x86_64_minimal_ebs50g。
来源:http://heylinux.com/archives/3434.html


转载于:https://my.oschina.net/jk409/blog/397570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值