LVMの中にスワップ領域を作ると調子の悪いサーバーではvmshrinkも調子が悪くなる

VMWare4のせいか
vmshrinkでディスクファイル(VMDKファイル)がうまく圧縮できない。
この時点で使用容量は4.4Gバイト。なのにVMDKファイルは12Gバイトもある。
仕方が無いので、X-Window上のVMWare-Toolboxを使うことにする。
しかし、X-Windowは入れてない・・・。
まずはX-Windowをインストから、

# yum -y groupinstall “X Window System”

# yum -y groupinstall “Desktop”

# yum -y groupinstall “General Purpose Desktop”

このまま startx するとマウスもキーボードも使えなかったので日本語化パッチも入れる。

# yum -y groupinstall “Japanese Support”

# startx

やっと動く。
本体のCPUがAMD E350論理CPU1個メモリ512MBしか割り当ててないのに、初期のVistaよりちゃんと動く、X-Windowって、とっても凄いと思う。
だがVMWareToolboxの動作が心配なので、一旦X-Windowを終わり、前にインストしたVMwareTools-8.8.1-528969.tar.gzをインストしなおす。

# ./vmware-install.pl

いっぱい応答入力が必要だが、全部[ENTER]で済ませる。

ここまでで使用容量は5.3Gバイトまで増量。環境整備で0.9Gバイトも増えた。
再起動した後に# startx
メニュー⇒アプリケーション⇒システムツール⇒Terminalを起動。

中でVMツールをバックグラウンドで起動する。

# su –

# /usr/bin/vmware-toolbox &        (必ずバックグラウンドで起動すること。)

で、やっとVMWare-Toolboxの画面が出たら、先のTerminalのウインドウを必ず閉じる。

※閉じないとサービス終了待ちのプログレスバーが何時までも終わらなくなる。

shrinkタブを選択し、『 / 』を選択して下の【shrink】ボタンを押す。

確認メッセージで【Yes】を押す。

プログレスバーが長いので圧縮処理かと思ったら、ネットワークサービスを止めた後に、Nulデータを書き込んでいるらしい。

そのせいか、/rootディスクがいっぱいです、とかメッセージが出る時もあるが、当然【Ignore】だ。

先のプログレスバーが100%(バーに隠れて見えないけど)になったら、shrinkしますか?で【Yes】を押してからが、本当のshrink処理が始まる。

そして長い長い処理が始まる。

終わったらちゃんとメッセージが出る。

でも、まだ9Gバイトまでしか圧縮できない。あと4Gバイトくらい圧縮できるハズなんだが・・・
すぐには思いつかなかったが、CentOS6は標準でディスクを2つのパーテーションに分ける。
1つ目は、ブートローダやカーネルが入っていて「/Boot」にマウントしているブート可能なパーテーション。

2つ目は、LinuxのLVMファイルで、

この中身は15Gバイトの「/」ファイルシステムと3.9Gバイトのスワップファイルだった。

# lvscan
  ACTIVE            ‘/dev/vg_******/lv_root’ [15.54 GiB] inherit
  ACTIVE            ‘/dev/vg_******/lv_swap’ [3.97 GiB] inherit

このスワップファイルは普通空のままだが、何かの原因でメモリ不足になると、とりあえず後回しにするデータが書き込まれる。実は、vmshrinkは「/」ファイルシステムの未使用部分にNulデータを書き込み、VMToolのディスク圧縮機能が働くようにしている様で、スワップパーテーションなんて眼中に無いようだ。
しかし、バックアップなどを簡単にするため、VLMにスワップファイルを入れることが多い、そうなると一度メモリ不足に陥ったサーバーでは、スワップファイルが最大まで実体化するので、このスワップデータ分がちゃんと圧縮できなくなるのだ。
ではどうすればよいのか?
一旦PowerOffし、VMWareでスワップ用のVMDKファイルを作り、2番目のディスクとして追加する。
起動後にスワップ用のVMDKファイルの中をスワップ形式でフォーマットし、再起動すればカーネルがSWAPパーテーションを勝手に認識するハズだったが、lvscanしてみると変化が無かったのでちゃんと開放した方がよさそうだ。
LVの情報を再確認。

# lvdisplay /dev/vg_******/lv_swap
  — Logical volume —
  LV Name                /dev/vg_******/lv_swap
  VG Name                vg_******
  LV UUID                ******- ******- ******- ******- ******
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                3.97 GiB
  Current LE             1016
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  – currently set to     256
  Block device           253:1

LVを削除。

# lvremove /dev/vg_******/lv_swap
Do you really want to remove active logical volume lv_swap? [y/n]: y
  Logical volume “lv_swap” successfully removed

削除後の情報を確認。

# lvdisplay
  — Logical volume —
  LV Name                /dev/vg_******/lv_root
  VG Name                vg_******
  LV UUID                ******- ******- ******- ******- ******
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                15.54 GiB
  Current LE             3978
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  – currently set to     256
  Block device           253:0

再び、X-WindowのDiskUtilityで見ると消したパーテーションがチャント消えていた。
再起動した後、VMWare-Toolboxのshrinkを再び実行すると、VMDKファイルは5.36Gバイトまで圧縮された。
本来は「/」を容量いっぱいに拡張した方がいいのだろうが管理用の領域が増えるだけなのでこのままにしておく。

VMDKファイルが半分未満になったせいか、ブログの動きも速くなったかな。

しかし、唐突に
No root device found.
Boot has failed.sleeping forever.
になる。
再起動すると100%再現する。
色々やってみたら、

1.スワップ領域を減らした場合は

swapoff     /dev/vg_******/lv_swap

lvreduce -L -128M  /dev/vg_******/lv_swap

resize2fs  /dev/vg_******/lv_swap

再起動しても問題ない。

2.スワップ領域を削除し、

swapoff     /dev/vg_******/lv_swap

lvremove /dev/vg_******/lv_swap

再起動すると、

No root device found.
Boot has failed.sleeping forever.

になった。

/etc/fstabからスワップの設定を削除し再起動した後にスワップ領域を削除しても同じだった。

インスト時に作成されたスワップ領域を削除すると、起動時にroot deviceが見つからなくなるようだ。
これはカーネルがLVMをどう検索してるのか調べてみないと直らないなぁ。
あ、スワップ領域を消した跡を/ に割り当てるなら、

lvextend -l +100%FREE /dev/vg_******/lv_root

resize2fs /dev/vg_******/lv_root

でいいらしい。
 




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA