funini.com 自由研究 Disks

ディスク管理

Linux, Linux LVMとSolarisについて。

Linux

普通のLinuxのディスク管理
Linuxでは、ディスクの見え方は次のようになっています。 それぞれ、次の fdiskではディスクをいくつかの領域に分け、それをmkfsでフォーマットして、それをmountでマウントします。
Linux LVMで2TB以上のパーティションを作る
Linux LVMでは、fdiskパーティションがひとつでも、その中に仮想的に複数のディスクを作ることができます。 では、ディスクの見え方は次のようになっています。 ふつうの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ではコマンドの体系や概念が少し違います。
コマンドは、 と対応します。

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
これで完了です。