LoginSignup
8
3

More than 5 years have passed since last update.

AWS節約術 4GiBのCentOS7ボリュームを作成

Last updated at Posted at 2017-07-31

この記事ではAWS ec2上のCentOS7を使っています。

通常8GiB必要なCentOS7を、4GiBのボリュームで作成できるようにして、AWSの費用を削減しました。

なお、EC2 EBS縮小 (というより CentOS ディスク縮小) の流れを、大変参考にさせていただきました。

1. 背景

AWS ec2のインスタンスをたくさん作ると、EBSボリューム費用が莫迦にならなくなってきました。インスタンスそのものは、利用する時以外は落としておくことで、費用を節約することが可能です。一方、EBSボリュームは恒久的に利用しますので、ひと月の費用がまるまるかかってしまいます。

スクリーンショット 2017-07-31 21.21.10.png

こんな感じて、EBSの料金の比率が結構高いです。

CentOS7を使っていると、実際のディスク使用量は2GB〜3GBなのですが、最小のディスクサイズが8GiBであり、半分以上を無駄にしていることになります。Amazon Linuxであれば、最小2GiBからインスタンスが作れるのですが、やっぱりCentOSが使いたいですよね。

ボリュームを増やすことは、ec2のボリュームメニューから簡単にできるのですが、減らすことは簡単にできません。よって、小さいサイズで作っておいたほうが、使い回しが容易です。小は大を兼ねるのです。

ということで、4GiBボリュームでCentOS7が動作する環境を構築してみました。

2. 全体の流れ

全体の構成要素と流れは以下のようになります。

スクリーンショット 2017-07-31 22.19.20.png

3. 構築手順

3.1. 作業用インスタンスの作成

  • AWS MarketplaceからCentOS7を選択してインスタンス作成します。
    • 移行元用(ec2-old)、作業用(ec2-work)の2つを作成します。
    • 後の作業がやりやすいので、ボリュームにもインスタンスに対応するNameタグ(vol-old、vol-work)をつけておきます。
  • インスタンスを両方とも停止させます。
  • ec2のボリュームメニューで、vol-oldをデタッチします。
  • 移行先ボリューム(vol-new)を4GiBで新規作成します。
  • ec2-workに、vol-old、vol-newをアタッチします(デバイスIDはデフォルト値をそのまま利用します)。
  • ec2-workを起動してログインします。
$ sudo su -
# lsblk (確認)
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk 
└─xvdf1 202:81   0   8G  0 part 
xvdg    202:96   0   4G  0 disk 

3.2. 新ボリュームのパーティション作成とフォーマット

  • fdiskを使う例が多いのですが、ここでは非対話的にやりたいので、partedのコマンドラインでパーティションを作成し、フォーマットします。
# parted -s /dev/xvdg -- mklabel msdos mkpart primary xfs 1 -1 set 1 boot on
# parted -s /dev/xvdg print (確認)
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdg: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  4294MB  4293MB  primary               boot

# mkfs.xfs /dev/xvdg1
meta-data=/dev/xvdg1             isize=512    agcount=4, agsize=262016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1048064, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
  • マウントして結果を確認します。
# mkdir -p /mnt/old /mnt/new/boot
# mount -t xfs -o nouuid /dev/xvdf1 /mnt/old
# mount -t xfs -o nouuid /dev/xvdg1 /mnt/new
# lsblk (確認)
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0   8G  0 disk 
└─xvdf1 202:81   0   8G  0 part /mnt/old
xvdg    202:96   0   4G  0 disk 
# df -kT (確認)
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs       8.0G  941M  7.1G  12% /
devtmpfs       devtmpfs  477M     0  477M   0% /dev
tmpfs          tmpfs     496M     0  496M   0% /dev/shm
tmpfs          tmpfs     496M   13M  483M   3% /run
tmpfs          tmpfs     496M     0  496M   0% /sys/fs/cgroup
tmpfs          tmpfs     100M     0  100M   0% /run/user/1000
tmpfs          tmpfs     100M     0  100M   0% /run/user/0
/dev/xvdf1     xfs       8.0G  941M  7.1G  12% /mnt/old
/dev/xvdg1     xfs       4.0G   33M  4.0G   1% /mnt/new

3.3. 新旧ボリュームのコピー

  • 新旧ボリュームをコピーして確認します。xvdg1の使用済みサイズがxvdf1と同じになったことがわかります。
# yum install xfsprogs xfsdump -y
(snip)
# cd /mnt/old/
# xfsdump -J - /mnt/old | xfsrestore -J -p 60 - /mnt/new
(snip)
xfsdump: Dump Status: SUCCESS
xfsrestore: restore complete: 17 seconds elapsed
xfsrestore: Restore Status: SUCCESS
# df -hT (確認)
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs       8.0G  1.1G  7.0G  13% /
devtmpfs       devtmpfs  477M     0  477M   0% /dev
tmpfs          tmpfs     496M     0  496M   0% /dev/shm
tmpfs          tmpfs     496M   13M  483M   3% /run
tmpfs          tmpfs     496M     0  496M   0% /sys/fs/cgroup
tmpfs          tmpfs     100M     0  100M   0% /run/user/1000
tmpfs          tmpfs     100M     0  100M   0% /run/user/0
/dev/xvdf1     xfs       8.0G  941M  7.1G  12% /mnt/old
/dev/xvdg1     xfs       4.0G  941M  3.1G  24% /mnt/new

3.4. ブートローダーのインストール

  • /mnt/new/ にチェンジルートします。
# mount -t proc /proc /mnt/new/proc
# mount -t sysfs /sys /mnt/new/sys
# mount --bind /dev /mnt/new/dev
# chroot /mnt/new/
# df -hT (確認)
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvdg1     xfs       4.0G  941M  3.1G  24% /
devtmpfs       devtmpfs  477M     0  477M   0% /dev
  • ブートローダーをインストールします。
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.16.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.16.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-8bd05758fdfc1903174c9fcaf82b71ca
Found initrd image: /boot/initramfs-0-rescue-8bd05758fdfc1903174c9fcaf82b71ca.img
done
# grub2-install /dev/xvdg
Installing for i386-pc platform.
Installation finished. No error reported.
  • vol-newには新しいUUIDが付与されていますが、/etc/fstabはvol-oldからコピーしたため、不整合が残っています。UUIDを確認して、/etc/fstabの記述を正しいUUIDに修正します。
# blkid
/dev/xvda1: UUID="29342a0b-e20f-4676-9ecf-dfdf02ef6683" TYPE="xfs" 
/dev/xvdg1: UUID="96726bba-3ec0-4c18-a2d2-ef77f40c1837" TYPE="xfs" 
/dev/xvdf1: UUID="29342a0b-e20f-4676-9ecf-dfdf02ef6683" TYPE="xfs" 
# vi /etc/fstab (9672... に書き換える)
  • アンマウントしてシャットダウンします。
# exit
# cd /
# umount /mnt/old/ /mnt/new/proc /mnt/new/sys /mnt/new/dev /mnt/new/
# shutdown now

3.5. 新ボリュームでの起動確認

  • ec2-workから、vol-old、vol-newをデタッチします。
  • ec2-oldに、vol-newを/dev/sda1としてアタッチします。
  • 起動してログインできれば大成功!! 確かにファイルシステムのサイズが半減していますね。
$ df -kT (確認)
Filesystem     Type     1K-blocks   Used Available Use% Mounted on
/dev/xvda1     xfs        4182016 963300   3218716  24% /
devtmpfs       devtmpfs    487880      0    487880   0% /dev
tmpfs          tmpfs       507488      0    507488   0% /dev/shm
tmpfs          tmpfs       507488  12920    494568   3% /run
tmpfs          tmpfs       507488      0    507488   0% /sys/fs/cgroup
tmpfs          tmpfs       101500      0    101500   0% /run/user/1000
  • 作業に使ったec2-work、vol-work、vol-oldは削除してかまいません。
  • せっかく作ったインスタンスですので、ec2-old、vol-newの名前は適切に変更して、マイAMIとして登録しておきましょう。
8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3