論理ボリュームの削除&容量の拡張

CentOSをデフォルトのままインストールしたところ/home200GBも割り当てられている。。。。
サーバー用途の為/homeでそんなに容量を食う予定はないので削除して/rootに割り当てます。
※結構雑に作業しているので実施する際は調査の上実施することを推奨します。

現状確認

[root@hoge zabbix]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_hoge-lv_root
                       50G  4.9G   44G  10% /
tmpfs                 1.9G  148K  1.9G   1% /dev/shm
/dev/sda1             485M   64M  396M  14% /boot
/dev/mapper/vg_hoge-lv_home
                      222G  200M  211G   1% /home
物理ボリュームの確認
[root@hoge zabbix]# pvdisplay -C
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda2  vg_hoge lvm2 a--  278.88g    0
ボリュームグループの確認
[root@hoge zabbix]# vgdisplay -C
  VG        #PV #LV #SN Attr   VSize   VFree
  vg_hoge   1   3   0 wz--n- 278.88g    0
論理ボリュームの確認
[root@hoge zabbix]# lvdisplay -C
  LV      VG        Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  lv_home vg_hoge -wi-ao-- 225.05g   ←こいつを消して
  lv_root vg_hoge -wi-ao--  50.00g   ←こいつにあまった容量を割り当てます
  lv_swap vg_hoge -wi-ao--   3.83g
/home/以下のデータを退避
[root@hoge ~]# cp -a /home /tmp/

※論理ボリュームを削除すると配下のファイルは吹っ飛ぶのでバックアップ。

論理ボリューム/homeの削除

/homeを使用しているプロセスの確認

[root@hoge zabbix]# lsof |grep home
~~~gnome関連&VNC関連など大量に出力~~~

うおっ
***ランレベル切り替え
>|sh|
 [root@hoge zabbix]# init 3

***VNCを停止
>|sh|
 [root@hoge zabbix]# /etc/init.d/vncserver stop
 VNC サーバー を停止中: 2:ochadmin                          [  OK  ]
再確認
 [root@hoge zabbix]# lsof |grep home
 bash      30269  ochadmin  cwd       DIR              253,2     4096    7602177 /home/ochadmin
 su        30293      root  cwd       DIR              253,2     4096    7602177 /home/ochadmin

 ぬは、rootでログインして回避しよう。

 [root@hoge zabbix]# vim /etc/ssh/sshd_config
 - PermitRootLogin no
 + PermitRootLogin yes
 [root@hoge zabbix]# /etc/init.d/sshd restart
 sshd を停止中:                                             [  OK  ]
 sshd を起動中:                                             [  OK  ]
再々確認
 [root@hoge ~]# lsof |grep home
 [root@hoge ~]#

 うし。いなくなった。

/homeをアンマウント
 [root@hoge ~]# umount /dev/mapper/vg_hoge-lv_home
論理ボリューム削除
[root@hoge ~]# lvdisplay -C
  LV      VG        Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  lv_home vg_hoge -wi-a--- 225.05g
  lv_root vg_hoge -wi-ao--  50.00g
  lv_swap vg_hoge -wi-ao--   3.83g
[root@hoge ~]# lvremove /dev/mapper/
control            vg_hoge-lv_home  vg_hoge-lv_root  vg_hoge-lv_swap
[root@hoge ~]# lvremove /dev/mapper/vg_hoge-lv_home
Do you really want to remove active logical volume lv_home? [y/n]: y
  Logical volume "lv_home" successfully removed
[root@hoge ~]# lvdisplay -C
  LV      VG        Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_root vg_hoge -wi-ao-- 50.00g
  lv_swap vg_hoge -wi-ao--  3.83g
余った容量の再割り当て
[root@hoge ~]# lvextend -l +100%FREE  /dev/mapper/vg_hoge-lv_root
  Extending logical volume lv_root to 275.05 GiB
  Logical volume lv_root successfully resized  
[root@hoge ~]# lvdisplay -C
  LV      VG        Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  lv_root vg_hoge -wi-ao-- 275.05g
  lv_swap vg_hoge -wi-ao--   3.83g
ファイルシステムの拡張

※本環境はファイルシステムext4なのでオンラインでのリサイズが可能です。
オンラインリサイズ対応:ext3,4
オンラインリサイズ非対応:ext2

[root@hoge ~]# resize2fs /dev/mapper/vg_hoge-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg_hoge-lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 18
Performing an on-line resize of /dev/mapper/vg_hoge-lv_root to 72101888 (4k) blocks.
The filesystem on /dev/mapper/vg_hoge-lv_root is now 72101888 blocks long.
[root@hoge ~]#
[root@hoge ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_hoge-lv_root
                      271G  4.9G  264G   2% /
tmpfs                 1.9G  112K  1.9G   1% /dev/shm
/dev/sda1             485M   64M  396M  14% /boot
/home配下のデータを設置
[root@hoge ~]# cp -a /tmp/home/* /home/
FSTabの編集
[root@hoge home]# vim /etc/fstab
- /dev/mapper/vg_hoge-lv_home /home                   ext4    defaults        1 2

※FSTabを編集し忘れると、再起動時に『/homeねーぞ!』となり、ディスク読み取り専用の状態で起動するか確認されます。
 その場合は

mount -o remount,rw /dev/mapper/vg_hoge-lv_root /

でマウントしなおしてfstabを編集後、再起動します。

VMESXiのパフォーマンス値をとってみる

Rubyの勉強がてらVMAPIのRuby用ラッパー『RbVmomi』を利用して『VMware vSphere Client』で閲覧できるパフォーマンスチャートの値を取得するスクリプトを作ってみました。

結構ふわふわな知識で書いてるので間違ってる箇所があれば指摘いただけると幸いです。
ソースコードも人にみてもらう機会がほとんどないのでなにかあればコメントください。。。


●パフォーマンスチャート
f:id:ma2k8:20121219212633p:plain



Zabbix連携

id:taishinさんの以下のエントリーでzabbixサーバのローカルに取得した値を
保存するという上手いやり方を紹介されていたので真似てみました。
http://taishin.github.com/blog/2012/11/11/zabbixde/

出力形式は合わせたので、zabbix_agentd.d以下にユーザーパラメーター用のファイルを作成し、zabbix上でテンプレートを用意することで監視が行えます。



調査の流れ

ホストOS&ゲストOS情報の取得や電源ON/OFFメソッドの実行等のサンプルコードはrbvmomiのgithub(https://github.com/rlane/rbvmomi)にありますが、パフォーマンス関連の情報はないのでとりあえずVMAPIのドキュメントを漁ったところ『QueryPerf』メソッドの説明で以下の文面を発見

An array of PerfQuerySpec objects. Each PerfQuerySpec object specifies a managed object reference for an entity, plus optional criteria for filtering results. Only metrics for entities that can be resolved and that are valid performance providers are returned in any result.

Each PerfQuerySpec object in the array submitted in this operation can query for different metrics. Or, select all types of statistics for a single managed entity.

managed Objectなるものとフィルタ条件を渡して実行するっぽいことが書いてあります。
このメソッドを実行している箇所をRbVmomiのソースから探してみます。


その前に。。。Managed Objectとは???

VMAPI上で管理しているものほぼ全てのオブジェクトっぽいです。
http://www.vmware.com/support/developer/vc-sdk/visdk25pubs/ReferenceGuide/vim.ManagedEntity.html
Managed Objectを渡すことで対象のentity(実体)を特定するぜーといった感じ

サンプルコードを見ると以下の様な感じでManaged Objectの配列がとれるみたい。

dc.hostFolder.children.first.host.grep(RbVmomi::VIM::HostSystem)
# => [HostSystem("ha-host")]

VMマシンが2台存在すれば以下のような感じ。

dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine)
# =>[VirtualMachine("1"), VirtualMachine("2")]

一個ずつループで処理

dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).each |x|
     〜ほげほげ
end
調査続き

RbVmomiのドキュメントを漁っているとPerfQueryを叩いている箇所を発見!(^ω^)
http://www.rdoc.info/github/vmware/rbvmomi/master/RbVmomi/VIM/PerformanceManager:retrieve_stats

def retrieve_stats objects, metrics, opts = {}

渡す引数は objects,metrics,optsですね。

optsは指定しないでもいいようなのでhostのManagedObjectとmetrics(取得する項目)を渡してみる。
metricsではvSphere Clientでいうチャートの項目を指定します。
f:id:ma2k8:20121220002446p:plain
※ちなみにチャート設定でチェックが入ってなくてもAPIで値は取得できます。

dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).each |x|
     vim.serviceContent.perfManager.retrieve_stats(x, "cpu.usage")
end

んでこんなのが取れます。

{HostSystem("ha-host")=>
  {:metrics=>{"cpu.usagemhz"=>[147]},
   :sampleInfo=>
    [PerfSampleInfo(
       dynamicProperty: [],
       interval: 20,
       timestamp: Fri Nov 30 11:03:20 UTC 2012
     )]}}

FuelPHP + Gitで幸せになれた。

概要

背景

FuelPHPをはじめるにあたり、ソースコードをGitで管理しようと思い立ち、敢行。
Gitについては、ちょっと調べては『どうせ一人で開発してるし不要かなー』と挫折するというヘタレ具合だったので少しまとめてみました。

環境
  • ローカル:mac
  • リモート:さくらVPS

※gitのバージョンは両方1.7.1です。

やりたいこと

FuelPHPで作成したVPS上のアプリケーションを

  • ローカル(mac)に同期
  • ローカル(mac)での更新内容を反映
  • FuelPHPのマニュアル、core、モジュールは『github上のFuelPHPプロジェクト(以下Official-PJ)』からもらう。



リポジトリ作成〜ローカルへコピー(clone)

リモートでの作業

FuelPHPでプロジェクトを作成

# oil create hogehoge  
# cd hogehoge


gitの設定&Official-PJで管理したいディレクトリを一旦削除

# rm -rf .git .gitmodules *.md docs fuel/core fuel/packages


リポジトリの作成

# git init 


Official-PJで管理したいディレクトリをサブモジュールとして登録

# git submodule add git://github.com/fuel/core.git fuel/core
# git submodule add git://github.com/fuel/oil.git fuel/packages/oil
# git submodule add git://github.com/fuel/auth.git fuel/packages/auth
# git submodule add git://github.com/fuel/parser.git fuel/packages/parser
# git submodule add git://github.com/fuel/orm.git fuel/packages/orm
# git submodule add git://github.com/fuel/email.git fuel/packages/email
# git submodule add git://github.com/fuel/docs.git docs

※これでFuelPHP関連のファイルはOfficial-PJで管理することができる。
 アップデートはgit submodule foreach 'git pull'で一撃。幸せ。

チェックアウト

# git submodule foreach 'git checkout 1.4/master'

※foreachでサブモジュール全てに対して''内のコマンドを実行してくれる。

ローカルリポジトリにコミット

# git add .
# git commit -m "first commit"


これでリモート上にリポジトリが作られました。


ローカルでの作業
# git clone --recursive root@49.212.164.105:~/hogehoge/

※--recursiveでサブモジュールごと引っ張ってこれました。

これでローカルにクローンが作成されました。


ローカルで編集〜リモートへアップ

ローカルでの作業

新たにapp.phpを作成し、インデックスへ追加

# cd fuel/app/classes/controller/
# vim app.php
# git add app.php


app.phpをコミット

# git commit -m "add app.php"


リモートへ反映

# git push origin master:master 

※構文:git push {送信先リポジトリ} {送信元ブランチ}:{送信先ブランチ}


これでリモートに反映される

参考

以下を参考にさせて頂きました。ありがとうございました!
http://d.hatena.ne.jp/Kenji_s/20111202/1322783183http://transitive.info/