まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

SoftLayer の仮想サーバーを借りて早一ヶ月、そろそろ無料トライアル終了の日が近づいてきました。仮想サーバーでありながら、それなりのスペックで素に近い CentOS が使えたことから RunLevel 5 で動かし、開発用の仮想デスクトップ環境として使ってきました。ここで開発したサービスについては近い将来に公開予定です。


さて、このシリーズ最後のエントリは SoftLayer 仮想サーバーの契約を終了する手順を紹介します。ともあれサーバーに SSH でログインしてシャットダウンは済ませておきます。ただしサーバーをシャットダウンしただけでは契約終了にはなりません、この点に注意が必要です。

まずは SoftLayer ポータルにログインし、ホーム画面のメニューから "ADMINISTRATIVE" - "Cancel Computing Instance" を選択します:
sl2013102901

契約中のサーバーインスタンスが表示されます。課金対象から外すにはサーバー契約そのものをキャンセルする必要があります。表の一番右の "Cancel CloudLayer Computing Instane" をクリックします。
sl2013102902


サーバーキャンセルについての情報が表示されます。ここを見ると、無料の30日トライアルに関しては「30日目の午前零時(GMT-05:00)の 24 時間前までに終了のリクエストをすること」と書かれています。で、すぐにキャンセルするか("Immediately")、ギリギリまで使ってキャンセルするか("Anniversary Date")を選んで "Continue" ボタンをクリックします。自分は心配性なので前者を選択・・・
sl2013102903


最終確認画面が表示されるので、内容を確認した上で "Final Confirmation" をクリックします。
sl2013102904


まだ "Final" ではなかった模様(笑)、最後の最後に確認ダイアログが表示されます。ここで "OK" をクリックするとキャンセル処理が実行されて元に戻せなくなります。今までありがと~
sl2013102905


この画面が表示されれば仮想サーバーのキャンセル処理が完了です。
sl2013102906


再度同画面を確認してもサーバーは消えているはずです。
sl2013102907


ほぼ同時に利用者アンケートのメールが届きます。めんどくせー、と一瞬思いましたが、よく見ると「抽選で $500 の VISA ギフトカードが当たる」と書かれてますね・・・ これは、これは。謹んでお答えさせていただきますw
sl2013102908

 ↑英語でのアンケートですけど・・ :P


個人的にはどこからでも使えるこの開発環境を重宝していたので手放すのは残念ではありますが、ほとんどクセのない CentOS 環境が提供されていることや、自動プロビジョンの仕組みもあることから、比較的容易に元の環境を再現できると思っています。今後うちの会社のウェブサービスで仮想環境が必要になった際の、特に開発環境の候補として検討させていただきます。


 

普段のアプリケーション開発コーディングには Eclipse を使っています。

最近、バージョン管理に Subversion(SVN) を使うようになり、 Eclipse 環境にも SVN プラグインを導入していました。が、どうもこれがちと問題(仕様?)で、Eclipse のプロジェクトを壊す原因になってしまうらしい。。
Bug 111368 - project clean & build copies subversion .svn folders to bin tree
 
とはいえ Eclipse を捨てる選択肢はないので設定で回避。プロジェクトのプロパティから Java Build Path - Source を選び、Excluded 欄に **/.svn/* を追加
2013102101


これで svn の同期設定のために生成されるフォルダはコピーの対象外になって、プロジェクトの破壊を回避できるようになった。 
 

Linux を使っているとディスクのパーティショニングに頭を悩ませることがあります。最近の Linux ディストリビューションは賢くできていて、特に何も指定しなくてもデフォルト設定のまま導入をしていく中で全容量などから自動的に最適(と思われる)パーティショニングを特定して、分割した上で導入してくれます。

その自動判断されたパーティションの割り振り方が本当に最適な内容であれば理想なのですが、現実はそうでないことが多いです。ディスク全体ではまだ余裕があるのに、特定のパーティションだけが残り少なくなってしまうケースは珍しいとは思えません。かといって全部をルートパーティションにするというのも万が一の際に全てを失ってしまうことになって・・・ というトレードオフです。

ところで、CentOS は普通に導入すると、そのディスクパーティショニングには標準で LVM(Logical Volume Manager : 論理ボリューム管理) が適用されます。深く考えずにデフォルト設定のまま Enter キー連打で導入すると LVM のパーティションが出来上がるので、導入後に「あ、LVM だった」と気付く人もいると思います(少なくともここに一人・・ σ(^^;)。

この LVM は柔軟な割り当てができるようになっていて、専用ツールなどを使わなくても、パーティション割り当てを導入後でも比較的容易に(開始ポイントや終了ポイントを意識することなく、サイズの指定だけで)変更することができます。 今回はこの LVM のパーティションニングを動的に変更する手順を紹介します。

まず前提として、現在の LVM によるパーティション内容は以下のようになっているものとします:
ファイルシステムサイズ用途
/dev/mapper/VolGroup-lv_root4.0GBルートファイルシステム
tmpfs500MBスワップ領域
/dev/mapper/VolGroup-lv_var4.5GB/var にマウント

これを最終的には以下のようなパーティショニングに変更することを今回の目的とします。もちろんこの変更によって容量の減る /var 以下のディスクが足りなくなることはないものとします:
ファイルシステムサイズ用途
/dev/mapper/VolGroup-lv_root6.5GBルートファイルシステム
tmpfs500MBスワップ領域
/dev/mapper/VolGroup-lv_var2.0GB/var にマウント

以下その手順を紹介しますが、大まかにはこのような手順をとります:
(1) /dev/mapper/VolGroup-lv_var を縮小
(2) /dev/mapper/VolGroup-lv_root を拡大

逆の手順は成立しないことを理解してください。最初にいきなりルートファイルを拡大しようとしてもディスクそのものに未使用の領域がない限りは足りなくなります。まずはどこかを減らして余りを作り、その余りを別のパーティションに追加する、という順序が必要になります。

というわけで、まずは (1) を行います。パーティションの縮小は(そのパーティション先にもよりますが)シングルユーザーモードで起動する必要があります。システムを再起動し、Linux の起動画面になったら何かキーを押してd自動ブートのカウントダウンを止めます:
 lv2013101701

この画面で E キーを押して起動モードの編集画面に移動します。そして "kernel" で始まる行に移動して再度 E キーを押します:
lv2013101702

起動オプションの編集画面になるので、シングルユーザーモードを指定するために最後に " single" という文字を加えて Enter キーを押します:
lv2013101703

1つ前の画面に戻りました。この画面だとわかりにくいのですが、kernel 行の最後には " single" が追加されています。改めてこの kernel 行が選択されている状態で B キーを押して起動します。
lv2013101704

CentOS がシングルユーザーモードで起動しました。パスワードも不要です。
lv2013101705

改めて現在のパーティション状況を確認します。 / に 4.0GB、/var に 4.5GB 割り当てられています。ここから /var の 2GB を / に付け替えるのが今回の目的になります。/var はまだ 309MB しか使っていないので、少なくともこの時点では 2GB 減らしても問題はありません。
lv2013101706

まずはこのパーティションをアンマウントします:
 # umount /var

ファイルシステムのサイズ変更は resize2fs コマンドで行いますが、減らす場合はその前に fsck コマンドでディスクチェックを行う必要があります。今回の /var(/dev/mapper/VolGroup-lv_var) は ext4 フォーマットなので、具体的には以下のコマンドを実行します:
 # fsck.ext4 -f /dev/mapper/VolGroup-lv_var

チェック後に resize2fs コマンドでパーティションサイズを変更します(最後の "2G" が変更後のパーティションサイズです):
 # resize2fs /dev/mapper/VolGroup-lv_var 2G

続けて論理ボリュームのサイズも 2G に変更します。確認メッセージが表示されたら y キーを入力します:
 # lvreduce -L 2G /dev/mapper/VolGroup-lv_var

最後に変更後のパーティションを改めて /var にマウントします:
 # mount -t ext4 /dev/mapper/VolGroup-lv_var /var

ここまでの一連のコマンドのスクリーンショットはこんな感じです:
lv2013101707

試しにこの段階で一度パーティション状態を確認しておきます。確かに 4.6GB あった /var が 2.0GB に減っていることが確認できます:
lv2013101708

では今度は /var で減らした分を /(/dev/mapper/VolGroup-lv_root) に追加割り当てします。増やす場合はアンマウント/マウントの必要がないのでより簡単です。 / は現在の 4.0GB に、追加する 2.5GB を加えるので、パーティションサイズとしては 6.5GB を指定することになります:
 # lvextend -L 6.5G /dev/mapper/VolGroup-lv_root

続けてファイルシステムとしてのサイズも変更します:
 # resize2fs /dev/mapper/VolGroup-lv_root

これで / パーティションのサイズ変更は完了です。確認してみるとたしかに増えています(画面上では 6.4GB になってますが・・)。一連のコマンドのスクリーンショットはこんな感じです:
lv2013101709

LVM を使っていなくても動的なパーティション変更ができないわけではないのですが、専用のツールを使って別システムから起動したり、サイズ調整に必要なパラメータが頻雑だったりと面倒です。その点 LVM だとサイズだけを意識するだけでいいので楽ですね。


このページのトップヘ