FreeBSD 8.4: LVMを使ってみる、その1

LVM(Logical volume Manger) は 私の記憶では HP-UX ver.9 の頃から実装されているハードディスクの管理技術で、複数のHDDをくっつけて一つのパーティションとして使ったり、単一HDDに導入しておいてパーティション容量が不足してきたら、新しいHDDを追加して、不足してきたパーティションに容量を追加できるという柔軟なパーティション管理が出来るファイルシステム管理の仕組みの一つです。当然、ミラーやRAIDを組むことも出来ますが、これはRAIDコントローラなど他の仕組みでも出来るので私にとっては特にありがたいものではありません。

何が良いかと言って、通常HDDはパーティショニングで分割して使うことは出来ますが、複数HDDをくっつけて使うことはできず、くっつけるにはハードウェアRAIDを使うことになりますが、LVM では空いているHDDインタフェース(SATA, IDE, SCSI, USB など)があれば、OSとドライバーレベルで利用可能だということ。1GBのHDDと1GBのHDDをくっつけて、一つの2GBパーティションとして使うような設定が出来ます。この仕組みから、今の時代なかなか使い道が限られる4GBとか10GBという容量のHDDを他のパーティションと組み合わせることにより使い続けることが出来ます。

LVM は Linux には標準で導入されているので、インストール時から使うことが出来るのですが、私のサーバーはFreeBSD。FreeBSDでは lvcreate など lvxx というコマンドを見たことがないので FreeBSD は LVM を使えないものと思っていました。ところが先日 Linux のLVMを調べていたときにFreeBSDは別のコマンドで LVM が実装されていることに気がつきました。コマンドは /sbin/gvinum

今、私のサーバーの特定パーティション容量が不足気味なのですが、長期的には解消して行く方向なのでHDDの増設はしたくない!しかし、来週中にもパンクしそうな気配なので一時しのぎで2GBくらいの増量をしたい。という差し迫った問題が発生しています。本来ならこういうときが LVMの出番!のはず。
しかし、サーバーのHDDはLVM(gvinum)で組んでいないので、今の時点で gvinum を使って容量追加することは出来ません。パーティションを圧迫中のディレクトリのコンテンツを、新たに追加するパーティションに移し替えたいのですが、ターゲットディレクトリの容量が約10GB で更に増量予定。12GBあれば足りそうですが、スケジュールが変わって15GBくらいにはなるかも。
今回は空いているUSBメモリでしのぐ予定なのですが、8GB x2個 + 2GB x1個 を使うことにしました。(厳密にはカードリーダー + フラッシュメモリ)
FreeBSD のバージョンは、8.4。

FreeBSD サーバーに USBメモリを差し込むと、/dev/da0, /dev/da2, /dev/da3 として認識されました。

    1. sysinstall の fdisk と disklabel で、usbメモリ上に freebsd パーティションを作成(ただし、この操作が必要かどうかは未確認。無くてもいいんじゃない?次回試してみようと思っています。)
    2. gvinum concat コマンドで、3つのフラッシュドライブを登録
      # gvinum concat /dev/da0 /dev/da2 /dev/da3

      ちなみに、concat コマンドで、単純にパーティションをくっつけましたが、MIRROR, RAID5 も可能でした。今回のように USB ver.1.1 ポートを使うフラッシュドライブはconcat が最適でしょう。
      ドライブ名(デバイスファイル名)を指定しなかったので、自動で /dev/gvinum/gvinumvolume0 が作られました。次回からは -n オプションでドライブ名を指定することにしましょう。

    3. newfs でファイルシステムを作成(フォーマット)
      # newfs /dev/gvinum/gvinumvolume0
      /dev/gvinum/gvinumvolume0: 17383.9MB (35602324 sectors) block size 16384, fragment size 2048
      using 95 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
      super-block backups (for fsck -b #) at:
      160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976, 3387328, 3763680, 4140032, 4516384,
      4892736, 5269088, 5645440, 6021792, 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
      9408960, 9785312, 10161664, 10538016, 10914368, 11290720, 11667072, 12043424, 12419776, 12796128, 13172480,
      13548832, 13925184, 14301536, 14677888, 15054240, 15430592, 15806944, 16183296, 16559648, 16936000, 17312352,
      17688704, 18065056, 18441408, 18817760, 19194112, 19570464, 19946816, 20323168, 20699520, 21075872, 21452224,
      21828576, 22204928, 22581280, 22957632, 23333984, 23710336, 24086688, 24463040, 24839392, 25215744, 25592096,
      25968448, 26344800, 26721152, 27097504, 27473856, 27850208, 28226560, 28602912, 28979264, 29355616, 29731968,
      30108320, 30484672, 30861024, 31237376, 31613728, 31990080, 32366432, 32742784, 33119136, 33495488, 33871840,
      34248192, 34624544, 35000896, 35377248

      でフォーマットが完了。

    4. ファイルシステムにマウント
      # mount /dev/gvinum/gvinumvolume0 /mnt

      テストで /mnt にマウントしてみました。

実際に、ここまでたどり着くには時間が掛かりましたが、作業の流れとしては非常にシンプル。

/mnt にコンテンツをコピーした後、オリジナルのディレクトリを消去し、消去したディレクトリにマウントポイントを変えれば作業終了。ただし、リブートしちゃうと情報が消えるので、マウントポイントを fstab に追加登録。(しかし、gvinum コマンドがリブート時に保持されるのかどうかが分からない。)

一時的なパーティション容量不足に陥り、あくまでも FreeBSD で LVM を使ってみるという観点で作業を行ったため、あっさり容量追加が終了しましたけど、再起動時、HDDやパーティションの故障時、フラッシュメモリの書き込み寿命 などのことを考えると、長期間利用できないことは明白。今度、しっかり考えてLVM/gvinum を導入してみたいと思っています。

今回は、FreeBSD で LVM を使えるかどうかを試すという視点での情報になります。

コメントを残す