LVMを使用しインストールしたDomain Uのディスク拡張


我が家の回線はADSL 8Mと非常に貧弱なので、yum updateなどが非常に遅いです。
さらにyum updateをやっている間はインターネットへの疎通全体が遅くなるというなんとも微妙な感じでした。
なので、ローカルにCentOSのミラーサーバーを構築しようと思い、Xen上に構築してある自宅内の雑多サービスサーバ(DNSやLDAPなどなど)にrsyncをしていたらDisk fullに…orz
20GBのディスクイメージだとちょっと足りなかったようです。

再インストールするというのも非常に面倒なのでXenのディスクイメージを拡張してみました。

まず、ここを参考に以下の手順でやってみたんですが、うまくいかず。

  • DomainUをシャットダウン
  • 普通にshutdown -h nowコマンドを使用しました。

  • ddで拡張したい分の空のディスクイメージを作成する
  • 今回は12G拡張したいので12GBのイメージを作成しました。

    # dd if=/dev/zero of=12GB.img bs=1024k count=12288
  • catコマンドで既存のディスクイメージと結合
  • なんてことはなくcatでくっつけるだけです。haruka.imgというのが古いイメージです。

    # mv haruka.img haruka.img.old
    # cat haruka.img.old 12GB.img > haruka.img
  • e2fsck -vfでディスクイメージをチェック
  • ここで下記のエラーが出て先に進めませんでした。

    e2fsck -vf haruka.img
    e2fsck 1.39 (29-May-2006)
    Couldn't find ext2 superblock, trying backup blocks...
    e2fsck: Bad magic number in super-block while trying to open haruka.img
    
    The superblock could not be read or does not describe a correct ext2
    filesystem.  If the device is valid and it really contains an ext2
    filesystem (and not swap or ufs or something else), then the superblock
    is corrupt, and you might try running e2fsck with an alternate superblock:
        e2fsck -b 8193 
    

    指示のとおりにe2fsck -b 8193 -vf haruka.imgとやってみたも変わらず。

ここでだいぶはまりました。
原因はDomainUのOSをLVMで導入したためでした。
最近はほとんどデフォルトだとLVMで導入されますよね。
LVMでなければ、外部からe2fsckなどのコマンドを使用しイメージを操作できるのですが、LVMの場合はその仕組み上違った方法を使用する必要があります。
下記の手順でうまくいきました。ちなみに上記手順のcatでイメージをつけるところまでは同じなので、その続きから書きます。

  1. losetupコマンドでディスクイメージをループバックマウントする
  2. losetupコマンドを使用してループバックマウントします。
    losetupなんてコマンドがあるんですね、初めて知りました。

    # losetup -f
    /dev/loop1
    # losetup /dev/loop1 haruka.img
  3. fdiskコマンドで領域の拡張を行う
  4. 一度、LVMパーティションの削除を行って再設定を行います。
    この辺のログを取りのがしたので参考サイトのをコピペさせてもらいます。

    # fdisk  /dev/loop1
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-652, default 14):
    Using default value 14
    Last cylinder or +size or +sizeM or +sizeK (14-652, default 652):
    Using default value 652
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/loop1: 5368 MB, 5368709120 bytes
    255 heads, 63 sectors/track, 652 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
          Device Boot      Start         End      Blocks   Id  System
    /dev/loop1p1   *           1          13      104391   83  Linux
    /dev/loop1p2              14         652     5132767+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 22: Invalid argument.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    

    最後にループバックでバイスをアンマウントします。

    losetup -d /dev/loop1

    最後にDomainUを起動しておきましょう。

    xm create haruka
  5. PVのリサイズとLVの拡張
  6. DomainUが起動したらPVを現在のデバイスのサイズに合わせて拡張し、LVの拡張も行います。
    いろいろログとり忘れてしまったのでコマンドだけ。

    # pvresize /dev/xvda2
    # lvresize -L +12G /dev/VolGroup00/LogVol00

これで無事ディスク領域の拡張ができました。

参考サイト

あわせて読みたい