はじめに
AWS Marketplaceにある「CentOS 6 (x86_64) - with Updates HVM」を利用してインスタンスを作成する際、インスタンス作成時の「ストレージの追加」でルートボリュームを増やしたとしてもOSから見えるボリュームは変わりません。
今回、ルートボリュームサイズを30GiBに拡張したいと思います。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 666M 6.7G 9% /
tmpfs 498M 0 498M 0% /dev/shm
ただ、アタッチされているボリュームサイズについて確認してみると、
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 30G 0 disk
└─xvda1 202:1 0 8G 0 part /
割り当てられてはいるけどパーティションの拡張ができていない状態のようです。
AMIがHVM方式のを選択すると、このように自動的に拡張されない場合があるようです。
HVMとは
HVMとは「Hardware-assited VM」の略で、日本語では完全仮想化と言われています。
EC2ユーザーガイドの説明には以下のように記載されています。
HVM AMI
HVM AMI は、完全に仮想化された一連のハードウェアを備えており、イメージのルートブロックデバイスのマスターブートレコードを実行することによって起動します。この仮想化タイプでは、ベアメタルハードウェア上でオペレーティングシステムが動作するのと同様に、修正を行わなくても仮想マシン上でオペレーティングシステムを直接実行することができます。Amazon EC2 ホストシステムでは、ゲストに提供されている基盤となるハードウェアの一部またはすべてがエミュレートされます。
ということでパーティションの拡張をしたいと思います。
準備
まずはじめに、dracut-modules-growrootとcloud-utils-growpartこの2つのパッケージをインストールします。
ただ、これらのパッケージはデフォルトのリポジトリからは取得できないのでリポジトリを追加します。
$ sudo yum install wget
$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo rpm -i epel-release-6-8.noarch.rpm
ここではwget
コマンドがインストールされていなかったので、初めにインストールしています。
それでは今回の作業に必要なパッケージをインストールします。
$ sudo yum install dracut-modules-growroot
・・・省略・・・
Installed:
dracut-modules-growroot.noarch 0:0.20-2.el6
Dependency Installed:
cloud-utils-growpart.x86_64 0:0.27-10.el6
Complete!
以上で準備完了です。
拡張
それでは拡張作業を行います。
$ sudo dracut --force --add growroot /boot/initramfs-$(uname -r).img
ここで行っているのは--addオプションを使ってinitramfs-2.6.32-573.18.1.el6.x86_64.imgのイメージファイルにgrowrootモジュールを追加しています。
2.6.32-573.18.1.el6.x86_64はuname -r
コマンドで取得される値です。
少し間がありプロンプトが返ってきたら完了です。それではサーバーを再起動します。
$ sudo reboot
dracutとは
dracutなんて普段見慣れない方が多いかと思います。ということでDracut Wiki(by The Linux Kernel Organization)によると、、、
dracut
dracut is an event driven initramfs infrastructure. dracut (the tool) is used to create an initramfs image by copying tools and files from an installed system and combining it with the dracut framework, usually found in /usr/lib/dracut/modules.d. .....
つまりは「initramfsを作成するコマンド」みたいです。(かなりざっくりですみません。。。)
今回の場合--addオプションでdraucutモジュールのgrowrootをイメージに追加しています。
--forceオプションはすでに存在しているinitramfsに対して上書きする場合に指定します。
その他にdracutについて知りたい場合は以下を参考にしてください。
・dracut(8) - Linux man page:コマンドオプションについて色々説明しています。
・dracut - www.kernel.org:利用例などについて説明しています。
確認
それではボリュームを確認してみます。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 985G 735M 934G 1% /
tmpfs 498M 0 498M 0% /dev/shm
OSから無事認識されているのが確認できます。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 1000G 0 disk
└─xvda1 202:1 0 1000G 0 part /
lsblk
コマンドでもパーティションが割り当てたボリュームまで拡張されているのが確認できました。
おわりに
今回の拡張作業でdracut
コマンドを利用していますが、実際はdracut
コマンドが拡張するコマンドではありません。
ボリュームの拡張はgrowpart
によって行われています。それをyum
でインストールしdracut
で追加したgrowroot
をイメージに追加することで、起動時にgrowpart
が実行され、パーティションが割り当てたボリュームまで拡張されます。
また、growpart
コマンドも今回はインストールされていなかったのですが、yum
を使うとdracut-modules-growrootの依存関係でcloud-utils-growpartもインストールしてくれるため利用できるようになります。