+86 135 410 16684Mon. - Fri. 10:00-22:00

AWS-AMI 缩小根分区并创建新的AMI

AWS-AMI 缩小根分区并创建新的AMI

AWS-AMI 缩小根分区并创建新的AMI

环境及需求:
1. 现在的AMI 根分区有25G
2. 25G有点多,所以想将25G缩小到12G
3. 查看磁盘信息
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       17G  1.5G   15G   9% /
tmpfs           498M     0  498M   0% /dev/shm
操作步骤:
1. 挂载一块12G的新盘(/dev/xvdf)
2. 分区并格式化新磁盘
    # fdisk -l
     Device Boot      Start         End      Blocks   Id  System

/dev/xvdf1               1        1045     8393931   83  Linux
/dev/xvdf2            1046        1566     4184932+  82  Linux swap / Solaris

  # mkfs.ext4 /dev/xvdf1
3. 挂载新磁盘
     # mkdir /new
     # mount /dev/xvdf1 /new
     # df |grep new
     /dev/xvdf1      7.9G  1.2G  6.4G  16% /new
4. 同步数据(将/下所有数据拷贝到新磁盘)

     # rsync -auv / –exclude=”/new/*”   /new

5. 卷标处理
  •      查看各磁盘卷标
     # e2label /dev/xvda1
     /
     # e2label /dev/xvdf1  (这个没有卷标,所以是空的)
  •      给新磁盘添加卷标
     e2label /dev/xvdf1 ROOT
     mkswap -L SWAP /dev/xvdf2
     ( # e2label /dev/xvda1  “”  //删除卷标可以这样)
6. 修改并查看/new/etc/fstab(LABEL为ROOT的挂载到/,LABEL为SWAP的为swap)
 #  cat /new/etc/fstab
LABEL=ROOT      /       ext4    defaults        1 1
LABEL=SWAP      swap    swap    defaults        0 0
tmpfs   /tmp    tmpfs   defaults        0 0
devpts  /dev/pts        devpts  gid=5,mode=620  0 0
sysfs   /sys    sysfs   defaults        0 0
proc    /proc   proc    defaults        0 0
7. 修改并查看/new/boot/grub/grub.conf(从LABEL为ROOT的启动)
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.3.1.el6.x86_64)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.32-431.3.1.el6.x86_64 ro root=LABEL=ROOT console=ttyS0 crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us
        initrd /boot/initramfs-2.6.32-431.3.1.el6.x86_64.img
8. 确保网卡是DHCP
 # cat /new/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
9. 创建snapshot
snapshot
    给snapshot取个名字
snapshot2
pending需要一段时间(取决于磁盘的大小),记住创建的snapshot的ID,后面要用
9. 创建完成后,基于这个snapshot注册一个AMI
#  ec2-register -n “CentOS6.5-x64-base-12G” -d “CentOS6.5-x64-base-12G” -a x86_64 –root-device-name /dev/sda -b /dev/sda=snap-f13d641e:12:true –kernel aki-503e7402 –region ap-southeast-1 --virtualization-type hvm 

-O AKIXXXXXXXXXXXXX -W xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10. 备注:
  • 系统要运行ec2-register命令,需要安装java环境和aws-api的包,官方命令详解:
http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-RegisterImage.html
  • -b /dev/sda=snap-f13d641e:12:true 表示sda是由snap-f13d641e这个snapshot克隆来的,12是磁盘容量
  • –kernel aki-503e7402 不同地区和不是系统位数用的aki名是不一样的,更多AKI详见如下链接
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html#AmazonKernelImageIDs
  • -O AKIXXXXXXXXXXXXX -W xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    创建一个用户,授权可以执行ec2-register命令,并记住它的key