mixiのほうではちょいと書いたのですが、1ヶ月ほど前にNECのExpress5800/110Gdを購入しました。

Dscn0598_20080524_182028
こんなかんじに。しかしこれでミドルタワー3台(1台はミニタワーだけど)…。

で、このサーバのアップグレードの一環として、余ったHDDを増設してみたわけですが、今回はその手順なんかを自分用のメモを兼ねてご紹介。


まずOSのバージョンですが
[crusader@telemachus leafcatch]$ cat /etc/redhat-release
CentOS release 5 (Final)

となっております。CentOSの5.1ですな。
ついでにuname -aの内容は
[crusader@telemachus leafcatch]$ uname -a
Linux telemachus.tinynet 2.6.18-53.1.21.el5 #1 SMP Tue May 20 09:34:18 EDT 2008 i686 i686 i386 GNU/Linux

こんな感じ。ちなみに気づかれた方もいるかもしれませんが、今回のマシン名は「Telemachus」です。テレマコス…というとまぁ、オデュッセイアのあの人ですね。

まず前提として。今回入れるマシンは、インストール時にLVM(Logical Volume Manager)をONにしてインストールしました。そのため通常であれば


  1. /dev/sdbあたりに/dev/sdb1というパーテーションを作成

  2. /dev/sdb1をext3でフォーマット

  3. /dev/sdb1を適当に/mnt配下にマウント



という今までの方法が使えません。ここでまぁ色々悩むことひとしきりした結果が、以下の手順です。

まず現在の状況を確認します。LVMの情報を表示するには - @ITを参考に。
まず現在のボリュームマウント状況をチェック。
[root@telemachus ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

[root@telemachus ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/mapper/VolGroup00-LogVol01 partition 1048568 0 -1

名前から察するに、/dev/mapper/VolGroup00-LogVol00と/dev/mapper/VolGroup00-LogVol01の2つがLVMのパーテーションのようです。で、VolGroup00-LogVol00が/に、VolGroup00-LogVol01がswapとして割り当てられています。
続いて物理ボリュームの状況をチェック。
[root@telemachus ~]# pvdisplay -m
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 74.41 GB / not usable 31.09 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 2380
Free PE 0
Allocated PE 2380
PV UUID ONZ9Zf-JHB5-x7E5-SRzG-9Lwh-zl3e-LiWBnK

--- Physical Segments ---
Physical extent 0 to 2347:
Logical volume /dev/VolGroup00/LogVol00
Logical extents 0 to 2347
Physical extent 2348 to 2379:
Logical volume /dev/VolGroup00/LogVol01
Logical extents 0 to 31

/dev/sda2という物理ボリュームが、VolGroup00というボリュームグループに割り当てられていること、なおかつ/dev/sda2のうち2348エクステントが/dev/VolGroup00/LogVol00という論理ボリュームに、32エクステントが/dev/VolGroup00/LogVol01という論理ボリュームに割り当てられていることが分かります。
1エクステントは32768kbとありますから、LogVol00は73.375GB、LogVol01は1GB割り当てられていることが分かります。/に73GBにswapに1GB…まぁ普通ですね。
続いてはボリュームグループの状態をチェック。
[root@telemachus ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.38 GB
PE Size 32.00 MB
Total PE 2380
Alloc PE / Size 2380 / 74.38 GB
Free PE / Size 0 / 0
VG UUID pPYluP-97H0-SRgs-cfzy-CGZg-seWj-DQAn0L

(さっきの結果でうっすらと分かっていましたが)VolGroup00というボリュームグループがあること、74.38 GB割り当てられていることが分かります。
最後に論理ボリュームの状況をチェック。
[root@telemachus ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID QhR0bE-t112-XYkd-aw9c-kmIw-pbYt-hcMyX5
LV Write Access read/write
LV Status available
# open 1
LV Size 73.38 GB
Current LE 2348
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0

--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID L3tHSQ-4rkU-BV2b-ilv0-Znpr-xg6o-KU9QBF
LV Write Access read/write
LV Status available
# open 1
LV Size 1.00 GB
Current LE 32
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1

これまたさっきの結果でうっすらと分かってはいましたが、/dev/VolGroup00/LogVol00と/dev/VolGroup00/LogVol01という論理ボリュームがあること、それぞれの論理ボリュームに73.38 GBと1GB割り当てられていることが分かります。

で、ここまで調べた上で、新たに取り付けたHDDをどうLVMで追加するか、の設定を決めます。
新しいHDDは250GBなので、ある程度大容量のデータを管理したい、と考えています。そのためシステムや設定ファイルなんかが入る、/へマウントするのに使っているVolGroup00というボリュームグループとは別にした方がよろしかろう、と考えられます(LVMを使うと論理パーテーションのサイズ変更が容易にできるため)。
そこで、新しくVolGroup01というボリュームグループを作成、その下にLogVol00という論理ボリュームを作成する、という形をとりたいと思います。

まずHDDを取り付け後、dmesgで実際に取り付けられているかどうかを確認します。
---(前略)---
Vendor: ATA Model: Maxtor 6L250S0 Rev: BACE
Type: Direct-Access ANSI SCSI revision: 05
SCSI device sdb: 490234752 512-byte hdwr sectors (251000 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
SCSI device sdb: 490234752 512-byte hdwr sectors (251000 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
sdb: sdb1
sd 1:0:0:0: Attached scsi disk sdb
---(後略)---

Maxtor 6L250S0がsdbとして認識されていることが分かります。今はなきMaxtor…(泣
続いてfdiskで、現在のパーテーションの状況を確認します。
[root@telemachus ~]# fdisk -l

Disk /dev/sda: 80.0 GB, 80000040960 bytes
255 heads, 63 sectors/track, 9726 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 9726 78019672+ 8e Linux LVM

Disk /dev/sdb: 251.0 GB, 251000193024 bytes
255 heads, 63 sectors/track, 30515 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System

/dev/sdbにはパーテーションが存在しないことが分かります。

というわけで、fdiskでパーテーションを作成します。今回はディスク1本を丸ごと1つのパーテーションにします。将来は拡張しよう、という勢いなので、根っこの方でちまちまとしたパーテーションを作る意味はあまりないのです。
パーテーションを作成する場合の注意としては、パーテーション作成後、パーテーションのタイプを8e(Linux LVM)に変更する必要がある、という点です。
[root@telemachus ~]# fdisk /dev/sdb

このディスクのシリンダ数は 30515 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-30515, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-30515, default 30515):
Using default value 30515

コマンド (m でヘルプ): p

Disk /dev/sdb: 251.0 GB, 251000193024 bytes
255 heads, 63 sectors/track, 30515 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdb1 1 30515 245111706 83 Linux

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

パーテーションの作成が完了したら、次は物理ボリュームの作成です。
[root@telemachus ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

[root@telemachus ~]# pvdisplay
---(前略)---
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 233.76 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID F6hdhX-3a0z-Nzw4-4lNP-qKEj-VKKB-7l9jzQ

/dev/sdb1という物理ボリュームが作成されたことが分かります。ボリュームグループにはまだ登録されていないので、VG Nameの欄はまだ空欄になっています。
続いて、ボリュームグループへ作成した物理ボリュームを登録します。
[root@telemachus ~]# vgcreate VolGroup01 /dev/sdb1
Volume group "VolGroup01" successfully created

今回はVolGroup01というボリュームグループの作成と、物理ボリュームの登録を一緒に行うのでvgcreateコマンドですが、既にあるボリュームグループに物理ボリュームを追加する場合はvgextendコマンドを使います。
で、ボリュームグループに/dev/sdb1を追加すると
[root@telemachus ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name VolGroup01
PV Size 233.76 GB / not usable 2.90 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 59841
Free PE 59841
Allocated PE 0
PV UUID F6hdhX-3a0z-Nzw4-4lNP-qKEj-VKKB-7l9jzQ
---(後略)---

pvdisplayの表示中、/dev/sdb1のVG Nameの所に、VolGroup01が表示されていることが分かります。
で、注目していただきたいのは「Allocated PE」の箇所で、これは空きエクステントの量を示します。/dev/sdb1の場合ここが0になっていますが、これは/dev/sdb1の領域が1エクステントも論理ボリュームに割り当てられていないことを示します。まぁ、論理ボリュームの作成を行っていないので、当然ではありますが。
というわけで、論理ボリュームを作成します。
[root@telemachus ~]# lvcreate -L 233GB -n LogVol00 VolGroup01
Logical volume "LogVol00" created

サイズは適当です。ファイルシステム作成前であれば、コマンド一発でボリュームのサイズは変更できるので、ある程度小さく作っておき、空きエクステントの量を見て残りを決め打ちする、というやり方がいいかもしれません。最初っから「エクステントがたりねぇぞゴルァ」といわれるとへこむので。
で、上のコマンドでVolGroup01という論理ボリュームを作成した結果が
[root@telemachus ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup01/LogVol00
VG Name VolGroup01
LV UUID TYPPhS-HYjK-sKW0-XGcv-SXlw-k1r6-oy2YDe
LV Write Access read/write
LV Status available
# open 0
LV Size 233.00 GB
Current LE 59648
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2
---(後略)---

こちら。確かに233GBのディスク容量が割り当てられています。
で、この状態でpvdisplayを実行すると
[root@telemachus ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name VolGroup01
PV Size 233.76 GB / not usable 2.90 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 59841
Free PE 193
Allocated PE 59648
PV UUID F6hdhX-3a0z-Nzw4-4lNP-qKEj-VKKB-7l9jzQ
---(後略)---

と、193エクステントあいていることが分かります。193*4096KBで、空き容量は772MB。
というわけで、論理ボリュームを772MBきっかり広げます。
[root@telemachus ~]# lvextend -L +772MB /dev/VolGroup01/LogVol00
Extending logical volume LogVol00 to 233.75 GB
Logical volume LogVol00 successfully resized

[root@telemachus ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name VolGroup01
PV Size 233.76 GB / not usable 2.90 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 59841
Free PE 0
Allocated PE 59841
PV UUID F6hdhX-3a0z-Nzw4-4lNP-qKEj-VKKB-7l9jzQ
---(後略)---

拡張が完了し、Free PEが0になったことが確認できます。
ここまで来れば、後はファイルシステムを作成するのみです。
[root@telemachus ~]# mkfs.ext3 /dev/VolGroup01/LogVol00
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
30654464 inodes, 61277184 blocks
3063859 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1871 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

(たぶん)無事作成完了。もう使えるようになったので、適当なディレクトリにマウントして終了、です。
[root@telemachus ~]# cd /mnt
[root@telemachus mnt]# mkdir 6l250s0
[root@telemachus mnt]# mount /dev/VolGroup01/LogVol00 /mnt/6l250s0/
[root@telemachus mnt]# df -h 6l250s0/
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/mapper/VolGroup01-LogVol00
231G 188M 219G 1% /mnt/6l250s0

…なんか空き容量妙に小さくないか!?
まー、fsckで調べても特にエラーは出ないし、とりあえずこれでOK、としますか…。