2016年6月13日月曜日

iSCSIを利用しようその3

前回、iSCSIで10GBのディスク容量を確保出来た。

今度はそれをLVMでボリューム作成、ファイルシステム作成、及びマウントと読み書きをしてみたい。

その前にLVMって何?って話だけど…。
既にLinuxディストリビューションを使っていたり、HP-UXやAIXを使っている人なら説明は要らないと思うけど、念の為に書いておく。

LVMというのは、Logical Volume Managerの略だ。
物理HDDを、一度論理的に束ねて、それを今度は論理的に分割、ファイルシステムを載せるためのブロックデバイスにする仕組みだ。
これは、HDDの容量不足が起きた時に、システム停止をゼロもしくは出来るだけ短くするための仕組みだ。(実際には、さらに拡張され、ミラーリングやRAID5等の冗長構成も組めるようになっている。)

で、LVMを説明する時に、自分が必ず描く画がある。

これは、HDDからファイルシステム、ファイルまでの各層を示したものだ。
私は必ず、こういった画を描くようにしている。

実際のHDD(今回はiSCSIで見えてきた /dev/sdb を意味する)からファイルシステムまでの間に、複数の層が存在し、これらの層を通ってようやくファイルへのI/Oが出来るようになっている。

この内、LVMとなっている3つの層が、LVMで扱う層だ。
LVMが無かった頃は、mbr/gptパーティションのすぐ上に、File Systemの層が来ていた。

LVMの層をよく見て欲しいのだが、Volume Groupによって、複数のPhysical Volumeを一つにまとめ、それをLogical Volumeとして分割している。
これが、複数のHDDにまたがっている点が重要だ。

10GBのHDDが3本あるが、25GBの大きな一つの領域が必要だという場合、従来ならもっと容量の大きなHDDを買ってくる必要があった。
LVMによって、3つのHDDを束ね、25GBという大きなLogical Volumeを作れば、25GBという容量のファイルシステムを用意することが出来る。

また、使っている容量が不足気味になってきた場合に、新しいHDDを足して、Volume Groupに追加すれば、その上のLogical Volumeを拡張することが出来る。

これらが、LVMを使用する最大のメリットだ。

また、HDDを操作する場合、上記の層を意識しながら操作することで、自分が今何をやっているのか?それがドコに影響を及ぼすのか?が分かる。
より安全に操作することが出来る様になる訳だ。

では、先ほどの図に従って、下から順に作っていこう。(HDDは1本だけだけどね。)

まずは、mbr/gptパーティションの作成だ。
今回は、容量が10GBということもあって、mbrパーティションでも良いわけだが、敢えてgptで作ってみよう。
$ sudo parted /dev/sdb print
「ディスクラベルが認識できません」というようなエラーが出たはずだ。
これは、「このディスクをmbrで使いますか?gptで使いますか?」というフラグが立っていないために出るメッセージだ。
gptで使うよ、という指示をしておこう。
$ sudo parted /dev/sdb mklabel gpt
$ sudo parted /dev/sdb print

成功したら、パーティションの作成だ。今回は全体を使って、一つのパーティションにしよう。
$ sudo parted /dev/sdb mkpart primary 0% 100%
$ sudo parted /dev/sdb set 1 lvm on
$ sudo parted /dev/sdb print
"primary"と指定しているのは、名前に相当する部分らしい。マニュアルを見ると、primary / extended / logical を指定しろ、とのことだが、gptの場合は関係が無いはず。だが、コマンドラインでは何かを指定しないとパーティションが作成できない。
そのため、primaryを指定した。
先頭を0%と指定しているのに、出来上がったパーティションは1029kBから、となっていると思う。(ディスクのタイプによって異なるかも)
これは、gptの場合は先頭部分が少し利用できない(予約領域)からだ。1MB程度の容量減なので、気にしないでおこう。
また、2行目は、「この領域をLVMで使用するよ」というフラグだ。必要かどうかはイマイチ分かっていない。

パーティションが出来上がったら、/dev/sdb1が出来上がっているはずだ。
$ ls -l /dev/sdb*
この/dev/sdb1が、sdbに作った一つ目のパーティションだ。(一つしか作っていないので、sdb1しか無いのは正常だ)

今度は、これ(/dev/sdb1)を、LVMのPhysical Volume(PV)として定義しよう。
$ sudo pvcreate /dev/sdb1
$ sudo pvdisplay /dev/sdb1
$ sudo pvs /dev/sdb1
一つ目のコマンドが、/dev/sdb1をPVとして定義するコマンド。
二つ目、三つ目のコマンドは、PVとして定義されているかどうかの情報を見るコマンドだ。
PVとして定義されてなかった場合はエラーになる。

PVとして定義出来たら、今度はVolume Group(VG)を作成し、このPVをVGの1つとして定義する。
$ sudo vgcreate vg-test /dev/sdb1
$ sudo vgdisplay -v vg-test
$ sudo vgs vg-test
一つ目のコマンドがVGを作るコマンドだ。vg-testというのが今回作成したVGの名前で、既に存在しているVG名は使えない。また、最後のコマンドが、そのVGに格納するPVのデバイスファイル名だ。
二つ目、三つ目が、そのVGの詳細情報を確認するコマンドになる。
また、PVを確認する時の pvdisplay 及び pvs コマンドも、先ほどと若干異なる出力になるはずだ。(属するVGの名前の欄が、先程まで空欄だったのが、vg-testと入っているはずだ)

また、vgcreateには多くのオプションがあり、細かなチューニングが可能だが、デフォルトで特に不都合は無く使えるはずだ。この辺りは、いずれ必要になったら記載する。

これで、VGの作成が完了した。

VGが作られたら、次はLogical Volume(LV)だ。
上の図では、LVは4つ作っているが、今回はあくまでテスト的なものなので、1つだけ作る。
$ sudo lvcreate -L 5G -n lv-test1 vg-test
$ sudo lvdisplay -v vg-test/lv-test1
$ sudo lvs vg-test/lv-test1
例によって、一つ目がLVを作成するコマンドだ。
ここでは、vg-testから5GBの容量で、lv-test1というLVを作成する、というコマンドになっている。
二つ目、三つ目が詳細確認になる。
また、併せてVG確認コマンド、PV確認コマンドも使ってみて欲しい。
若干の変化があるはずだ。

ココまで来たら、今度はファイルシステムを作る流れだ。
ext4で作っておけばいいだろう。
$ sudo mkfs.ext4 /dev/vg-test/lv-test1
$ sudo blkid /dev/vg-test/lv-test1

そこまで行ったら、マウントしてI/O出来るか確認してみよう。
$ sudo mkdir -p /mnt/tmp
$ cat /etc/mtab | grep /mnt/tmp
$ sudo mount -t ext4 /dev/vg-test/lv-test1 /mnt/tmp
$ cat /etc/mtab | grep /mnt/tmp
$ sudo touch /mnt/tmp/hogehoge
$ sudo sh -c 'echo "foobar" >> /mnt/tmp/hogehoge'
$ cat /mnt/tmp/hogehoge
$ sudo rm -i /mnt/tmp/hogehoge
$ sudo umount /mnt/tmp

これで、iSCSI領域をI/Oすることが出来るようになった。

本来ならここで、LVMの活用例として
  • HDDの追加
  • VGの拡張
  • LVの拡張
  • FSの拡張
  • PVの移動
  • LVMミラー
  • FSの縮小
  • LVの縮小
  • VGの縮小
  • PVの取り外し
あたりを書くべきだと思うけど、それはおいおいやっていくことにして、ぼつぼつKVM周りのことを検証していきたい。

0 件のコメント:

コメントを投稿