ディスク管理
Linux, Linux LVMとSolarisについて。
Linux
普通のLinuxのディスク管理
Linuxでは、ディスクの見え方は次のようになっています。
- /dev/sda
- /dev/sda1
- /mnt/data/
それぞれ、次の
- fdisk : sdaからsda1を作る
- mkfs : sda1をマウントできるようにする
- mount : /dev/sda1を/mnt/data/にマップする
fdiskではディスクをいくつかの領域に分け、それをmkfsでフォーマットして、それをmountでマウントします。
Linux LVMで2TB以上のパーティションを作る
Linux LVMでは、fdiskパーティションがひとつでも、その中に仮想的に複数のディスクを作ることができます。
では、ディスクの見え方は次のようになっています。
- /dev/sda
- /dev/sda1
- /dev/raid-vg/data/lv
- /mnt/data/
ふつうのLinuxのFSではfdiskで作ったパーティションと、mkfsでフォーマットするパーティションが1:1に対応していますが、LVMではそうではありません。
fdisk (2TB以上ではparted)を実行したあと、LVMのvg (ボリュームグループ)、lv (ロジカルボリューム)を作り、これをmkfsでフォーマットして、マウントします。
実際のコマンド実行例は、以下のようになります。
fdiskの結果
Disk /dev/sdb: 6499.9 GB, 6499997843456 bytes
255 heads, 63 sectors/track, 790246 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
見かけ上cfdiskで6TBのパーティションを作れるけど、出来てない。
まずpartedでパーティショニング(fdiskの代わり) http://www.coraid.com/support/linux/contrib/chernow/gpt.html
parted /dev/sdb
(parted) mklabel gpt
(parted) print
Disk geometry for /dev/sdb: 0kB - 6500GB
Disk label type: gpt
(parted) mkpart primary 0 6500G
で、そのあとLVMのPVとVGを作る。これらは/dev以下に見える。今回はcharlie-pvの中にroot-vgを作った。
# pvcreate /dev/hdb1
Physical volume \"/dev/sdb1\" successfully created]
# pvdisplay /dev/sdb1
PV VG Fmt Attr PSize PFree
...
# vgcreate -s 32m charlie-vg /dev/sdb1
# vgdisplay charlie-vg
...
# lvcreate -L 6500G -n export-lv charlie-vg
# lvdisplay /dev/charlie-vg/export-lv
reiserfsでフォーマットした。
なんかすごく時間かかるけど、mount後は普通に使えます。
# mount -t reiserfs /dev/charlie-vg/export-lv /export
# dmesg
SCSI device sdb: drive cache: write back
sdb:
sdb : very big device. try to use READ CAPACITY(16).
...
ReiserFS: dm-0: found reiserfs format "3.6" with standard journal
ReiserFS: dm-0: using ordered data mode
ReiserFS: dm-0: journal params: device dm-0, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
ReiserFS: dm-0: checking transaction log (dm-0)
ReiserFS: dm-0: Using r5 hash to sort names
Solaris
Solarisではコマンドの体系や概念が少し違います。
コマンドは、
- format : fdisk
- newfs : mkfs
- mount : mount
と対応します。
Solarisにおけるディスクのデバイスファイルは、/dev/dsk以下にあります。
表示はLinuxに比べて少しわかりにくいです。
ここに並んでいるのは、
c3t2d0s0
のような名前のデバイスファイルです。ここで、
c3t2d0
までがディスクの名前です。LUNだったり、実際のディスクそのものだったりします。
c3がscsiの3番目のアダプタ、t2が2つめ(scsi-id)のデバイス、d0が0番目のLUNということを示します。
最後のs0は、パーティション0番という意味です。特に作成の操作をしなくても0から7までありますが、すべてを同時に使えるわけではありません。これについては後述します。
パーティション編集
fdiskに相当するのはformatコマンドです。
# format
AVAILABLE DISK SELECTIONS:
0. c1t0d0
/pci@1f,700000/scsi@2/sd@0,0
1. c1t1d0
/pci@1f,700000/scsi@2/sd@1,0
2. c1t2d0
/pci@1f,700000/scsi@2/sd@2,0
3. c1t3d0
/pci@1f,700000/scsi@2/sd@3,0
4. c3t2d0
/pci@1d,700000/fibre-channel@1/fp@0,0/ssd@w2100000b5c030087,0
5. c3t2d1
/pci@1d,700000/fibre-channel@1/fp@0,0/ssd@w2100000b5c030087,1
6. c3t2d2
/pci@1d,700000/fibre-channel@1/fp@0,0/ssd@w2100000b5c030087,2
7. c3t2d3
/pci@1d,700000/fibre-channel@1/fp@0,0/ssd@w2100000b5c030087,3
format>
この画面で0-7でスライスを選択します。このスライスは、raidで作られたLUNに対応しています。
raidシステムでないときは、一ディスク1エントリになってはいますが、実際のディスクスロットには対応していないので注意しましょう。
このraidでは16個のディスクで4個のLUNを構成しています。LUNの分け方を変更するには、telnetやwebのユーティリティを用います。
format> partition
partition> print
Part Tag Flag Cylinders Size Blocks
0 root wm 0 - 5 143.72MB (6/0/0) 294336
1 unassigned wm 6 - 39812 931.15GB (39807/0/0) 1952772192
2 backup wu 0 - 39812 931.29GB (39813/0/0) 1953066528
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
この"Part"に書かれているのが、Partitionの番号です。このパーティションは、今あるディスクをいくつかに分ける、という考え方ではなく、「パーティション1はディスクのここからここまで」という定義がばらばらに色々書かれています。慣例として、partition 0は先頭の数シリンダ、2は全部ということになっていますが、すべて編集可能です。今回は、0にmetadbを、1にデータを置くことにします。
編集する場合は、番号を入力して、その後必要なパラメータを入力します。
formatユーティリティでは、そのままこの各パーティションにファイルシステムを作ることができます。あるいは、新たにnewfsコマンドで作ってもよいです。パーティションの指定には、先ほどのデバイスファイルを用います。
# newfs /dev/dsk/c3t2d0s1
とすると、上のパーティションテーブルの1番のパーティションにファイルシステムが作られます。
この後、普通にmountを行うことができます。
# mount /dev/dsk/c3t2d0s1 /mnt/raid/
Disk Suiteを用いてコンカチ(結合)_
Solaris 10では、複数のパーティションを結合して、ひとつの大きなディスクを作ることができます。これを用いると、1TB以上のパーティションを作ることも可能です。(SolarisではLUNの最大値は1TBまでにするのが一般的です)
このためには、まず変換を行うMetadbというものを作って、それに仮想ディスクと実際のディスクの対応を格納します。metadbを作るコマンドはmetadb, 仮想ディスクを作成するコマンドはmetainitです。
Metadb作成
今回は四つのスライス(ディスク)を結合します。それぞれが8つのパーティションを持っていて、そのうちすべてのディスクの0番にmetadbを格納します。
# cd /dev/dsk/
# metadb -c 4 -a -f c3t2d0s0 c3t2d1s0 c3t2d2s0 c3t2d3s0
で、MetaDBが-fで指定したスライスに作られます。-c 4の指定で、4つにミラーしています。
このMetaDBは大した要領を取らないので、
どこにMetaDBが作られたかは、
# metadb
flags first blk block count
a m p luo 16 8192 /dev/dsk/c1t2d0s1
a p luo 16 8192 /dev/dsk/c1t3d0s1
a p luo 16 8192 /dev/dsk/c1t0d0s6
a p luo 16 8192 /dev/dsk/c1t1d0s6
とすると確認できます。(右側にDBがあるパーティションが表示されています)
失敗したら、
# metadb -d c3t2d0s0
のようにして削除しましょう。
コンカチを行う
結合の設定ですが、基本的にはmetainitにパラメーターを指定することで行います。
ただ、あとから見やすいように、一度設定ファイルに書いてから読み込ませる方がおすすめです。
この設定ファイルは動的に読み込んでくれるわけではなく、metainitを実行するときに、コマンドラインでは足りないパラメータを補ってくれるだけです。
たとえば、次のような一行を書いてみます。
[/etc/lvm/md.tab]
d90 4 1 /dev/dsk/c3t2d0s1 1 /dev/dsk/c3t2d1s1 1 /dev/dsk/c3t2d2s1 1 /dev/dsk/c3t2d3s1
このあと、以下のコマンドを実行すると、実際にmetadbに結合された仮想ディスクが作成されます。
# metainit d90
このコマンドで、ディスクが/dev/md/dsk/d90に出来ました。このディスクはnewfsする必要はありません。
あとは普通にmountしましょう。
# mount /dev/md/dsk/d90 /mnt/newhome
ルートファイルシステムをメタデバイスにする
たとえば、d102をルートデバイスにする。
# metaroot d102
再起動します。
# lockfs -fa
# reboot
これで完了です。