BigAdmin System Administration Portal
投稿記事: Solaris オペレーティングシステムの「format」ユーティリティー
Print-friendly VersionPrint-friendly Version
この記事は、BigAdmin ユーザーの投稿です。 Sun Microsystems では、読みやすくするために若干の編集を行なった箇所もありますが、技術的な正確さについては見直していません。 間違いを見つけた場合や記事にコメントする場合は、投稿者に連絡するか、記事の末尾にある「コメント:」フィールドを使用してください。 コミュニティーの投稿は、Sun の商標ガイドラインに従っていない場合があります。 Sun の商標については、http://www.sun.com/suntrademarks/ を参照してください。
 
 

Solaris オペレーティングシステムの「format」ユーティリティー

執筆者: Greg (shoe) Schuweiler (2004 年 11 月)

多くの人にとって、ハードディスクは「ブラックボックス」であり、データ、プログラム、オペレーティングシステムなどを何らかの方法で格納する小さなデバイスとみなされています。もちろん、それ以外のことに関心を持たないですむかぎり、このアプローチで何の問題もありません。しかし、システム管理者であれば、主な関心事の 1 つはデータの保護であるはずです。もう 1 つ、優先順位の高い関心事として、メモリーと物理ディスク間における効率的なデータ移動があるはずです。この記事では、Solaris OS で利用可能な基本ユーティリティーの 1 つである、format について解説します。

ディスク上のスライスの管理に使用される format ユーティリティーは元来、SCSI 接続されたディスクの管理用として開発されたものであるため、IDE 経由で接続されたディスクではパフォーマンスが異なる可能性があります。また、適切なドライバが正しくインストールおよび構成されていれば、RAID エンジンによって提供されるファイバチャネル接続されたドライブまたは LUN の管理も行えるはずです。

format 以外のコマンドもいくつか取り上げますが、それらは 2 つの種類に分けられます。破壊的でないものと破壊的なものです。破壊的なコマンドは常に太字および斜体にし、その先頭に「警告」という単語を付けます。次に例を示します。«警告: cd / ; rm –r * » を root として実行すると、システムディスクが完全に破壊されてしまいます。

もう 1 点、警告しておきたいことがあります。破壊的でないコマンドは破壊的な結果をもたらさないはずですが、実際のシステム上でそれらを実行するかどうかは、読者各自の判断に委ねられています。破壊的なコマンドはディスク上のデータを破壊します。これらのコマンドを実行するのは、その意味を理解できていると確信が持てる場合だけにしてください。

この記事で使用するコマンドは次のとおりです。formatprtvtocddodcat、および fmthard。最初に、ここで使用するディスク関連用語をいくつか定義しておきます。

ディスクラベル:
この特殊な領域には、ジオメトリやスライスなど、ディスクに関する情報が格納されます。これは VTOC (Volume Table of Contents) とも呼ばれます。ディスクラベルは、ディスク上の先頭から 512 バイトになります。今日では、ほとんどのディスクが、工場出荷時にすでにラベルが付けられた状態になっています。

欠陥領域リスト:
これはディスク上の、読み書きが行えない領域のリストです。製造元の欠陥領域リストと後述する「増分」リストが必ず存在します。後者は時間の経過とともに増加する欠陥領域のリストです。

パーティションテーブル:
パーティションテーブルはディスクの VTOC の一部であり、ディスク上のスライス (パーティションとも呼ばれる)、スライスの境界、およびスライスのサイズが含まれます。スライスは、ディスク上の隣接する一連のブロックから構成されます。1 つのディスク上には 8 個のスライス (0 ~ 7) が存在します。ただし、ディスクに EFI (Extensible Firmware Interface Label) のラベルを付ける場合は例外です。その場合については若干後述します。スライス 2 はディスク全体を表すため、ほとんど使用しません。

この記事を読み進める際には次の点に注意してください。

  • 各ディスクスライスに格納できるファイルシステムは、1 つだけです。
  • 複数のスライスにまたがるファイルシステムを作成することはできません (論理ボリュームマネージャーを使用しない場合)。
  • あるファイルシステムの作成後にそのサイズを変更するには、ディスク全体のパーティション分割をやり直す必要があります。
  • 複数のディスクにまたがるスライスを作成することはできません。(RAID エンジンが n 個のディスクを管理し、それらを 1 つのディスクとしてシステムに提供する場合、format ユーティリティーが認識するディスクは 1 つだけとなる。)

この記事を対話形式にするために、テスト可能なディスクが搭載されたシステムを用意することをお勧めします。まず、使用するディスクを format を使って選択します。

r_gps@holstein: format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
0.c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  boot
  /pci@1f,4000/scsi@3/sd@0,0
1.c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  home
  /pci@1f,4000/scsi@3/sd@1,0
2.c2t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  trashme
  /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number):

「quit」と入力すれば、終了するか 1 つ前のメニューに戻ることができ、Ctrl+D キーを押せば、format ユーティリティーが完全に終了します。ここでは、「AVAILABLE DISK SELECTIONS」の「2」を使用します。前述したとおり、Sun、または Sun 製の装置を販売する Sun 以外のベンダーからディスクを購入した場合、そのディスクにはすでに Sun のラベルが付けられているはずです。一方、異機種システム混在環境で SCSI ディスクを使い回す場合は当然ながら、HP、AIX、または Windows サーバーから取り外した 36G バイトのドライブには (少なくとも Solaris OS にとって) 認識不可能なラベルが付けられているため、ラベルを追加する必要があります。したがって、基本操作を学んでテストを実施できるように、操作中のディスクのディスクラベルを破壊します。

« 警告: echo "adios data" | dd of=/dev/dsk/c2t1d0s2 bs=1 count=512 »

ここで、format コマンドを実行すると次のようになります。

r_gps@holstein: format
Searching for disks...done

c2t1d0: configured with capacity of 33.92GB

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  boot
          /pci@1f,4000/scsi@3/sd@0,0
       1. c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  home
          /pci@1f,4000/scsi@3/sd@1,0
       2. c2t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number): 2
selecting c2t1d0
[disk formatted]
Disk not labeled. Label it now?

ここで、ディスクにラベルを付ける場合は「y」と入力します。そうすると、このディスクが Solaris OS から使用可能になるため、好都合です。その後、format コマンドを終了し、prtvtoc を使ってディスクのジオメトリとパーティション分割に関する情報を表示します。

r_gps@holstein: prtvtoc /dev/dsk/c2t1d0s2                            
* /dev/dsk/c2t1d0s2 partition map
*
* Dimensions:
*       512 bytes/sector
*       107 sectors/track
*         27 tracks/cylinder
*     2889 sectors/cylinder
*   24622 cylinders
*   24620 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
*                          First        Sector       Last
* Partition  Tag  Flags    Sector        Count       Sector     Mount Directory
   0	       2    00	   0		262899	     262898
   1	       3    01	   262899	262899	     525797
   2	       5    01	   0		71127180     71127179
   6	       4    00	   525798	70601382     71127179

これと同じ情報の一部は format コマンドからも得ることができますが、この出力から 4 つのパーティションが存在していることがわかります。「Tag」列からは、root (2)、swap (3)、backup (5)、および usr (4) パーティションが存在していることがわかります。「Flags」列からは、読み書きアクセス権を持つマウント可能なパーティション (00) が 2 つと、マウント不可能なパーティション (01) が 2 つ存在していることがわかります。パーティションごとに、「First Sector」列にパーティションの開始位置が、「Sector Count」にセクター数が、「Last Sector」にパーティション内の最後のセクターの位置が、それぞれ表示されています。マウント済みのファイルシステムが存在する場合には、そのパーティションのマウント位置が「Mount Directory」に表示されます。詳しい説明やテストに入る前に、新しくラベル付けしたディスクに対して format コマンドがどのような内容を表示するかを確認しておきましょう。次のコマンドを実行します。

r_gps@holstein: format /dev/rdsk/c2t1d0s2

format のプロンプトで partition と入力したあと、partition メニューで print と入力します。すると次の表が表示されます。

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part    Tag     Flag     Cylinders        Size       Blocks
  0     root	  wm	0 - 90     	128.37MB  (91/0/0)        262899
  1        swap	  wu	91 - 181      	128.37MB  (91/0/0)        262899
  2       backup  wu	0 - 24619       33.92GB	  (24620/0/0)   71127180
  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          usr  wm	182 - 24619      33.67GB   (24438/0/0)  70601382
  7   unassigned  wm	0      	0       (0/0/0)         0

partition>

prtvtoc コマンドの場合と同じ情報がいくつか表示されています。形式が若干異なっているほか、未使用のパーティションが表示されています。使用するディスクを筆者が format に指定したことに、お気づきになったでしょうか。そのようにしたのは、テストに使用しているシステムに搭載されたほかのディスクのいずれかで、誤って問題が生じないようにするためです。ディスクラベルを確認する別の方法として、dd コマンドを使ってラベルをダンプすることが挙げられます。

r_gps@holstein: dd if=/dev/dsk/c2t1d0s2 of=wart.bin bs=512 count=1  
1+0 records in
1+0 records out

これによりバイナリファイルが得られますが、このファイルに対して od コマンドを使用できます。

r_gps@holstein: od -x wart.bin
0000000 5355 4e33 3647 2063 796c 2032 3436 3230
0000020 2061 6c74 2032 2068 6420 3237 2073 6563
0000040 2031 3037 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0000200 0000 0001 0000 0000 0000 0000 0008 0002
0000220 0000 0003 0001 0005 0001 0000 0000 0000
0000240 0000 0000 0000 0004 0000 0000 0000 0000
0000260 0000 0000 0000 0000 0000 0000 600d deee
0000300 0000 0000 0000 0000 0000 0000 0000 0000
*
0000640 0000 0000 2729 602e 0000 0000 0000 0001
0000660 602c 0002 001b 006b 0000 0000 0000 0000
0000700 0004 02f3 0000 005b 0004  02f3  0000 0000
0000720 043d 508c 0000 0000 0000 0000 0000 0000
0000740 0000 0000 0000 0000 0000 0000 0000 00b6
0000760 0435 4aa6 0000 0000 0000 0000 dabe 4297
0001000

このバイナリダンプには多くの情報が含まれていますが、それについては Sun による非常に優れたドキュメントが存在するため、その情報をここで繰り返すつもりはありません。SunSolve でドキュメント ID 74087 を検索してください。一言だけ注意しておくと、od は繰り返されている行 (*) を常にスキップします。また、VTOC_SANE は常にオフセット 0xbc 位置の 0x600ddeee になり、DKL_MAGIC は常にチェックサムの直前のオフセット 0x1fc 位置の 0xdabe になります。さて、以上でディスクへのラベル付けが完了しましたが、それで我々は (そして format コマンドは) 何を行えるのでしょうか。まず、次のメニュー一覧を参照してください。筆者がまず説明するのは、volname オプションを除き、破壊的でない format メニューオプションについてです。それらのオプションを次に太字で示します。

r_gps@holstein: format /dev/rdsk/c2t1d0s2
selecting /dev/rdsk/c2t1d0s2
[disk formatted]

FORMAT MENU:
        disk       	- select a disk
        type       	- select (define) a disk type
        partition  	- select (define) a partition table
        current    	- describe the current disk
        format     	- format and analyze the disk
        repair     	- repair a defective sector
        label      	- write label to the disk
        analyze    	- surface analysis
        defect     	- defect list management
        backup     	- search for backup labels
        verify     	- read and display labels
        save       	- save new disk/partition definitions
        inquiry    	- show vendor, product and revision
        volname    	- set 8-character volume name
        !<cmd>     	- execute <cmd>, then return
        quit
format>

筆者は必ず、各ディスクにボリューム名を付けるようにしています。なぜなら、そうするとシステムがより親しみやすくなるからです。また、高可用性クラスタ内では同じディスクドライブを複数のシステムが参照することが起こりえますが、これはそうした場合にも非常に便利です。筆者は、1 対の RAID エンジンによって提供された 120 個を超えるディスクのすべてが、VERITAS クラスタ内の 15 台のシステムから可視になっているケースに出会ったことがあります。各ディスクにボリューム名を付けると、すでに使用されているディスクを特定しやすくなります。ボリューム名の付いていないディスクは未使用です。次の例のようにして volname メニューオプションを使用する際に注意すべき点が 1 つあります。

format> volname
Enter 8-character volume name (remember quotes)[""]:"pigsnot"
Ready to label disk, continue? y

format>

volname オプションはディスクラベルに書き込みます。筆者は、マウント済みのファイルシステム上に有効なデータが格納されたディスクに対して、それを行ったことがあります。最初は誤って書き込んでしまったのですが、結局世界が破滅することもなく、重力の法則も有効なままでした。そこで、筆者はディスクドライブに対するいくつかのテスト、具体的にはマウント済みのファイルシステムを含むディスクとマウント解除済みのファイルシステムを含むディスクでボリューム名を変更するテストを行いました。ラベルを変更してもデータが失われたことは決してありませんでした。もちろん、次のようなお決まりのただし書きが適用されます。「使用環境によって異なる可能性があります。自己責任で処理を進めてください。入力ミスの責任は負いかねます、などなど。」

disk オプションでは format ユーティリティー内でディスクを変更できますが、ここでは操作対象のディスクを選択したため、表示されるのはそのディスクだけです。

format> disk

AVAILABLE DISK SELECTIONS:
       0. /dev/rdsk/c2t1d0s2 <SUN36G cyl 24620 alt 2 hd 27 sec 107> pigsnot
          /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number)[0]:

current オプションでは、format コマンドの起動後に選択されたカレントディスクが表示されます。この記事ではディスク 2 を操作しているため、current オプションの表示結果は次のようになります。

Current Disk = c2t1d0: pigsnot
<SUN36G cyl 24620 alt 2 hd 27 sec 107>
/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0

current オプションでは、最後の行にディスクの物理的な場所が表示されます。この物理的な場所には先頭に /devices を付加する必要があり、パーティション番号を表す文字が存在しています。

r_gps@holstein: ls /devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0*

/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:a
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:a,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:b
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:b,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:c
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:c,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:d
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:d,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:e
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:e,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:f
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:f,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:g
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:g,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:h
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:h,raw

単語「raw」の付いた物理デバイス名は文字デバイスであり、その他はブロックデバイスです。文字「a」はパーティション 0、文字「b」はパーティション 1、といった具合になります。

defect オプションを選択すると defect メニューが開きますが、これを使えば、ディスクの工場出荷時の欠陥領域数を表示できます。これを表示するには primary オプションを使用します。筆者のデスクトップに搭載された 3 個のディスクの主要欠陥領域数は、72 から 2922 の範囲です。ただし、ここでは grown オプションに注目します。ディスク上の「増分」欠陥領域数は時間とともに増加する可能性がありますが、我々が関心を持つのはその増加率です。当然、欠陥領域数が急激に増加していれば、ディスク障害がまもなく発生する可能性があります。

print オプションを選択すると、欠陥領域とそのディスク上の場所が一覧表示されます。ディスクの欠陥領域リストをファイルにダンプ (保存) することもできます。筆者も、疑わしいディスクに対してこれを短期間行ったことがあります。

verify オプションでは多くの情報が表示されますが、それには、先に我々が prtvtoc コマンドを使って表示した情報と、format コマンドでパーティションを表示した際の情報が含まれます。

format> verify

Primary label contents:

Volume name 	= < pigsnot>
ASCII name  	= <SUN36G cyl 24620 alt 2 hd 27 sec 107>
pcyl        	= 24622
ncyl        	= 24620
acyl        	=    2
nhead       	=   27
nsect       	=  107
Part   Tag   	 Flag   Cylinders       Size       	Blocks
  0        root  wm	0 - 90        128.37MB	 (91/0/0)         262899
  1        swap  wu	91 - 181      128.37MB	 (91/0/0)         262899
  2      backup  wu	0 - 24619      33.92GB	 (24620/0/0) 	71127180
  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         usr  wm	182 - 24619    33.67GB   (24438/0/0)    70601382
  7   unassigned wm	0      	0     (0/0/0)    0

save オプションは、format.dat ファイル (または読者が付けた任意の名前) を書き出します。この dat ファイルには、format コマンドがドライブ構成時に使用可能な情報が含まれています (このファイルの詳細は man -s4 format.dat を参照)。新しく作成された format.dat ファイルに対して 1 つのウィンドウで cat を実行したあと、別のウィンドウで verify コマンドを使用すると、異なる表示形式で同じ情報が多数表示されます。場合によってはこのほうが読みやすいことがあります。save オプションで作成された format.dat ファイルには、ある情報が追加されています。それはディスクの rpm です。

#
# New disk/partition type  saved on Fri Aug  6 06:34:05 2004
#
disk_type = "SUN36G" \
         : ctlr = SCSI : ncyl = 24620 : acyl = 2 : pcyl = 24622 \
         : nhead = 27 : nsect = 107 : rpm = 10025
...

そして、ディスク上の情報を収集するためのオプションのなかで最後に紹介するのは、inquiry オプションです。これは、次のように非常に基本的な情報を表示します。

format> inq
Vendor:   FUJITSU 
Product:  MAN3367M SUN36G 
Revision: 1502
format>

ここで注意すべき情報は、リビジョンのレベルです。ファームウェアの更新は、ディスクドライブに対して行われます。このオプションを使えば、使用中のディスクのリビジョンのレベルと、ディスクベンダーから入手可能なリビジョンのレベルとを比較できます。筆者は大規模 RAID アレイ上のディスクのドライブファームウェアをベンダーに更新してもらったことがありますが、彼らはそれをすぐに行いました。筆者はかなり昔に一度か二度、SCSI ディスクのファームウェアを更新したことがあります。その後、そうした面倒な作業は行わなくなりました。その最大のネックは、昨今の環境に含まれるディスクの数と、必要とされる停止時間の長さです。それに、「壊れていないものは直すな」という古い格言が当てはまる場合もあるからです。筆者の場合、システムを停止しないでアップグレードする方法をまだ編み出せていません。

format コマンドの優れた特徴の 1 つは、コマンドファイルを読み込ませることができる点です。たとえば、次の内容のコマンドファイルを使うと欠陥領域リストをファイルにダンプできます。

defect
both
dump /disks/c2t1d0-defect.dat

r_gps@holstein: format -f c2t1d0.cmd /dev/rdsk/c2t1d0s2

ただし、format コマンドには破壊的な力があるため、マウント済みのパーティションがディスクに含まれる場合にはコマンドファイルを渡すことはできません。これが有用であると考える読者には、Perl と Expect を使ってこの情報を取得することをお勧めします。

警告: format メニューを再度掲載します。これから残りのオプションについて説明しますが、それらはディスク上のデータを破壊する可能性のあるオプションです。破壊されるデータは読者自身のものですから、必ず注意しながら処理を進めてください。

r_gps@holstein: format /dev/rdsk/c2t1d0s2
selecting /dev/rdsk/c2t1d0s2
[disk formatted]

FORMAT MENU:
        disk       	- select a disk
        type       	- select (define) a disk type
        partition  	- select (define) a partition table
        current    	- describe the current disk
        format     	- format and analyze the disk
        repair     	- repair a defective sector
        label      	- write label to the disk
        analyze    	- surface analysis
        defect     	- defect list management
        backup     	- search for backup labels
        verify     	- read and display labels
        save       	- save new disk/partition definitions
        inquiry    	- show vendor, product and revision
        volname    	- set 8-character volume name
        !<cmd>     	- execute <cmd>, then return
        quit
format>

type オプションは、昨今ではほとんど使用されません。これが頻繁に使用されていたのは、(主に SCSI 以外の) ディスクが必ずしも自身に関する情報を内蔵していなかったころのことです。年配のシステム管理者であれば、シリンダ数、代替シリンダ数、物理シリンダ数、ヘッド数、物理ヘッド数、1 トラック当たりのデータセクター数、その他の各種項目などの情報を入力した覚えがあるはずです。これらの多くに対して我々はデフォルトを使用しました。なぜなら、そうした情報が見つからない場合もあったからです。ディスクベンダーは当時は今日と比べものにならないほど多数存在していましたが、そうしたベンダーは自社独自の情報を強固に保護していました。我々は、正しい値が見つかるまで、さまざまな値を試したこともありました。読者もそれを試すことができますが、そうする前に、これまでに収集したディスクに関する情報のすべてを保存しておくべきです。もちろん、この情報はディスク上の何らかの読み取り専用デバイス内に存在しているはずですが、早朝まで徹夜することになるよりも、安全な方法を選択したほうが賢明です。比較的古いディスクを使ってこの記事の内容を試している場合は特に、ディスクのパラメータの設定を正しい値に戻すためにその情報が必要になる可能性があります。

今までにこの設定を行う必要のあったドライブは、IPI ドライブおよび SMD ドライブでした。興味を持った読者は、Google で「ipi smd disk drive」で検索してみてください。その若干の歴史を学べるほか、どこでこれらのタイプのドライブを今でも購入できるかを知ることができます。

partition オプションはおそらく、format ユーティリティー内でもっとも使用頻度の高いオプションです。このオプションを選択すると partition メニューが起動され、ここからディスクのパーティションを変更できます。2 番目のパーティション (パーティション番号 2) はバックアップパーティションと呼ばれ、ディスク全体を表していることに注意してください。ここではバックアップパーティションの変更は行いません。ただし、バックアップパーティション上にファイルシステムを作成し、それだけをマウントする場合がごくまれにあります。それは通常、データベースを使用する場合です。しかし、これは賢明な方法ではありません。自身をディスク上のあるパーティションに関連付けるようなソフトウェアを使用すると、問題が発生する可能性があります。そうした動作を行うアプリケーションを筆者は仕事で扱ったことがありますが、そのアプリケーションの保守やアップグレードを行うのは悪夢でした。不注意なベンダーのある製品でスライス 2 を使用する必要が生じた場合、そのソフトウェアは VTOC を完全に破壊してしまう可能性があります。

さて、ここから、筆者と Sun の見解が大きく異なる分野の話に入ります。たとえば、Sun や筆者が知る Sun のシステムエンジニア (SE) は最近、システムディスクでは、1 つのルートパーティションと、その他すべてで使用するためにもう 1 つのパーティションを作成するように勧めています。これはナンセンスな考えです。ディスク上の各スライスは、OS からは個別のディスクとみなされます。したがって、我々のテストディスクをスライスに分割する前に、筆者がこの点について Sun に同意できない理由を説明しておきましょう。読者も筆者に同意する必要はありませんが、その場合はむしろ、自身で別の記事を書いてください。

あるアプリケーションが暴走して /var/tmp がいっぱいになり、/ (ルート) がいっぱいになったとしたら、どうでしょうか。そうなっても OS が被害を被ることはなく、その問題のアプリケーションさえも被害を被らない可能性があります。しかし、この場合もやはり、その問題のアプリケーションが修正されるまで、すべてのプロセスがさらなる処理を行えなくなる可能性があります。したがって、ファイルシステムを作成して / をマウントするためのパーティションが必要になります。Sun と筆者の見解はここでは一致しています。パーティションが 1 つ。しかし、その /var を別のファイルシステム上に配置する必要もあります。したがって、/var 用のパーティションが別途必要になります。パーティションが 2 つ。さらに、/usr も別のパーティション内に配置します。/usr ファイルシステムに格納するのは、実行可能ファイルと ASCII ファイルだけにすべきです。パーティションが 3 つ。/opt 内に配置するファイルはシステムの実行には必要ないため、これも別のファイルシステムにします。パーティションが 4 つ。/tmp 用のファイルシステムも作成します。これにはシステムによって生成された一時ファイルのみを格納すべきです。パーティションが 5 つ。これはシステムディスクなのでスワップパーティションが必要となります。これで 6 つ。以上で、任意の用途に使用可能なパーティションが 1 つ残ることになります。セキュリティー上の理由によりシステムをロックする場合には、/tmp/var/tmp 以外のすべてのファイルシステムを読み取り専用にします。

オペレーティングシステムは、各パーティションをそれぞれ個別のファイルシステムとみなします。これは、キャッシュとバッファーがこれらのファイルシステムごとに作成されることを意味します。追加のキャッシュやバッファーによって入出力の負荷がわずかに分散されます。もちろん、バックアップ、相互接続速度、およびディスクコントローラによる制限は受けます。しかし、高入出力負荷時の問題の発生確率が低くなります。

さて、このあたりで筆者の持論を述べるのは終わりにし、partition メニューの説明に移りましょう。これを選択すると、次のような別のメニューが開かれます。

PARTITION MENU:
        0	- change `0' partition
        1	- change `1' partition
        2	- change `2' partition
        3	- change `3' partition
        4	- change `4' partition
        5	- change `5' partition
        6	- change `6' partition
        7	- change `7' partition
        select	- select a predefined table
        modify	- modify a predefined partition table
        name	- name the current table
        print	- display the current table
        label	- write partition map and label to the disk
        !<cmd>	- execute <cmd>, then return
        quit

筆者が発見したもっとも簡単なパーティション分割の方法は、次のとおりです。partition メニューに入ったらすぐに、print オプションを表す「P」キーを押します。すると、我々が作業を開始するために必要な情報が表示されます。これにより次の出力が得られますが、これは前出の出力と同じものです。

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part    Tag     Flag     Cylinders     Size       	Blocks
  0        root	wm	0 - 90     128.37MB	(91/0/0)      	  262899
  1        swap	wu	91 - 181   128.37MB 	(91/0/0)     	  262899
  2      backup	wu	0 - 24619   33.92GB	(24620/0/0) 	71127180
  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         usr	wm	182 - 24619 33.67GB	(24438/0/0) 	70601382
  7  unassigned	wm	0     0    (0/0/0)        0

これはデフォルトのパーティションテーブルであり、どのパーティションも決してオーバーラップしないように注意しながら変更する必要があります。パーティションを変更するためのもっとも安全な方法は、modify オプションを使用することです。これには free hog スライスと呼ばれるものが関与しますが、このスライスは、パーティション分割のオプションに応じて自動的に拡張および収縮する一時的なパーティションです。free hog スライスが存在するのは、format ユーティリティーを実行している間だけです。

modify と入力するとパーティションベースを選択する機会が与えられ、現在のパーティション、「All Free Hog」パーティションのいずれかを変更できます。

partition> modify
Select partitioning base:
        0. Current partition table (original)
        1. All Free Hog
Choose base (enter number) [0]?

デフォルトでは現在のパーティションを変更することになりますが、それで問題ありません。実際、結果にさほどの違いは生じません。「Current partition table」を選択した場合、format ユーティリティーによって現在のパーティション分割がまず表示されます。「All Free Hog」を選択した場合、領域が割り当てられたパーティションはバックアップパーティションだけとなります。modify オプションを使用すると、バックアップパーティションを除くすべてのパーティションを変更できるようになります。modify オプションで気に入らない点の 1 つは、作成したパーティションに「タグ」を付けたり「フラグ」を設定したりできないことです。あとで各パーティションを個別に選択すればそれを行えるのですが、それは筆者には冗長に感じられます。

modify オプションを使用しないことにした場合は、各パーティションを個別に変更できます。筆者の場合、36G バイトのドライブを使用しているので、ルートパーティションを若干大きくした方がよいでしょう。まず変更対象のパーティションを選択してそのアクセス権を設定し、続いて開始シリンダを指定し、最後にサイズを指定します。

partition> 0
Part      Tag    Flag     Cylinders         Size      		Blocks
  0       root    wm       0 -    90      128.37MB    (91/0/0)      262899

Enter partition id tag[root]: 
Enter partition permission flags[wm]: 
Enter new starting cyl[0]: 
Enter partition size [262899b, 91c, 90e, 128.37mb, 0.13gb]: 256mb

パーティション ID タグとアクセス権フラグの質問には「?」を入力することもできますが、その場合、使用可能な応答が表示されます。「P」キーを再度押すと、解決すべき問題が発生していることがわかります。

Part      Tag   Flag     Cylinders      Size          		Blocks
  0      root	wm	0 - 181      	256.74MB	(182/0/0)   525798
  1      swap	wu	91 - 181      	128.37MB	(91/0/0)    262899
		...

パーティション 0 とパーティション 1 がオーバーラップしています。パーティションを作成する際には、作成するパーティションがどれもオーバーラップしていないことを必ず確認してください。作成するパーティションの個数やサイズは実際のところ、読者のサイトやニーズ、経験などに依存します。筆者の場合、作業完了後に次のようになりました。

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part      Tag   Flag     Cylinders         Size    		Blocks
  0        root	wm	0 -  181      	56.74MB		(182/0/0)        525798
  1        swap	wu	182 - 272      128.37MB		(1452/0/0)     	4194828
  2      backup	wu	0 - 24619      	33.92GB		(24620/0/0)    71127180
  3  unassigned	wm	3540 - 4265      1.00GB   	(726/0/0)      	2097414
  4  unassigned	wm	0      0    	(0/0/0)   	0
  5  unassigned	wm	4266 - 4991      1.00GB   	(726/0/0)      	2097414
  6         usr	wm	273 - 2087     	 2.50GB		(1815/0/0) 	5243535
  7         var	wm	2088 -	3539     2.00GB   	(1452/0/0)   	4194828

さらにパーティションテーブルを書き込む必要があります。それを行うのは簡単で、label と入力し、続行を確認する質問に「Y」で答えるだけです。読者はおそらく、/home はどこにあるのだと疑問に思っているはずです。筆者の場合、ユーザー情報をシステムディスク上に配置することはほとんどありません。それにより、ある OS レベルから別の OS レベルへの移行が若干容易になります。

Sun からディスクを購入した場合、format オプションを使用する必要はあまりないはずです。中古のディスクを購入する場合、別の OS からディスクを移設する場合、あるいは欠陥領域リストが過大である場合、format オプションはディスクを Solaris OS 用に準備します。欠陥領域リストに多数のエントリが含まれるディスクは、これによってある程度クリーンアップされる可能性があります。このオプションが必要になる理由の 1 つとして、システムが接続された RAID エンジンがあまり賢くないために、作成された LUN を Solaris OS が理解できる形式で提供できないような場合が挙げられます。こうしたハードウェアを所有している場合は、おそらく新しい装置を探すべきです。サイズにもよりますが、帰宅前か朝の作業開始時にディスクのフォーマットを開始することをお勧めします。筆者の Ultra Enterprise ワークステーション (UE-60) 上の 36G バイトのドライブの場合、完了までの予想時間は 332 分です。

repair オプションを使えば、ディスク上の欠陥ブロックを修復できる可能性があります。筆者はもう何年もこれを使用していません。実を言うと、この記事の執筆を開始するまで、このオプションのことを忘れていました。昨今のディスクドライブの安さを考えると、ディスクをいじくり回し、あちこちのブロックを復旧しようと何時間も費やすよりも、そのディスクを交換してしまったほうが、安全でしかも、おそらく安上がりになります。楽しみは減ってしまいますが、しかし、おそらくそのほうが安全です。

label オプションについてはすでに十分すぎるほど説明したと思うので省略し、analyze オプションへと進みます。defect オプションの場合と同じく、analyze オプションを選択すると別のメニューが開きます。筆者の場合、何かを試す場合や記事を書く場合などを除き、analyze オプションを使用することはほとんどなくなりました。analyze メニューは、文字どおりディスクの解析には使用できます。お気づきのように、いくつかの選択肢には、データが破壊されるというただし書きがついています。

backup オプションはバックアップラベルを検索します。ただしまず、このオプションは主ラベルの有無をチェックします。そしてラベルが見つかった場合、format は処理を続行するか読者に尋ねます。読者が続行を選択すると、backup オプションは、見つかったバックアップラベルで主ラベルを置き換えます。筆者はこれを行う必要に迫られたことはこれまで一度もなく、どのように使用すればよいのか疑問に思っています。筆者が知るかぎり、主ラベルが存在しなければ、format コマンド内の backup オプションに到達することはできません。dd コマンドを使ってバックアップラベルをディスク上の主ラベルの位置に移動させる方法を、Sun のサポートは読者に教えてくれるのではないかと筆者は疑っていますが、それは筆者の単なる推測にすぎません。

さて、いかがだったでしょうか。数個のディスクのパーティションをフォーマットして設定する場合には何の問題もありません。若干の入力作業が必要になりますが、我慢できるレベルです。一方、読者が大規模な RAID アレイの管理を任され、10 個どころか 200 個ものディスクを同様に構成する必要に迫られた場合はどうすればよいでしょうか。筆者は、ある大規模イメージ処理プロジェクトでそうした作業を行う必要に迫られた友人を知っています。彼女は、fmthard と簡単に作成したスクリプトを使って一発で処理を終わらせました。

いつものように、man -s1m fmthard を使用すれば詳細な情報が得られますが、fmthard の使用方法をここで簡単に説明します。まず、ターゲットディスク上のパーティションの設定方法を fmthard に伝えるための ASCII データファイルが必要になります。これを作成するには、お好みのエディタを使用するか、あるいは fmthard コマンド自身を使用します。テキストファイルを見れば、各ディスク上で必要とされるパーティションごとに開始セクターとセクター数を指定する必要があることがわかります。前述したとおり、パーティションが決してオーバーラップしないように注意してください。

* Partition    Tag     		Flag   		First Sector  Sector Count
  0		2		00		4194828		1048707
  1		7		00		5243535		4145715
  2		5		00		0		71127180
  3		3		01		0		4194828
  4		0		00		9389250		2097414
  5		0		00		11486664	8389656
  6		4		00		19876320	6292242

したがって、最良の方法は、必要な構成に対するディスクの 1 つで format ユーティリティーを使ってパーティション分割を行ったあと、残りのディスクのパーティション分割に使用するデータファイルを fmthard コマンドを使って作成することです。

fmthard -i -n "" /dev/rdsk/c2t1d0s2 > ./mypartition.dat
 

このコマンドは、c2t1d0 上のディスクパーティションをファイル mypartition.dat に出力します。その後、この dat ファイルを、同様の方法でパーティション分割を行うすべてのディスクに対する fmthard コマンドへの入力として使用します。

« fmthard -s mypartition.dat -n "volumename" /dev/rdsk/cxtydzs2 »

fmthard コマンドの欠点は、VTOC を更新することにあります。したがって、ベースとなる有効なラベルがディスクに含まれていないと、fmthard は正しく動作しません。fmthard コマンドを使ってボリューム名を使用または設定する予定であれば、スクリプトの行数が最終的に 200 行 (あるいは変更するディスクの個数分だけの行) に達することになります。しかし、それでも、format ユーティリティーを使って一連のディスク上のパーティションをえんえんと設定するよりはましです。

さて、format のマニュアルページに丹念に目を通したなら、次の記述に気づくはずです。

-e    Enable SCSI expert  menu.  Note  this  option  is  not
      recommended for casual use.

読者がどうかは分かりませんが、筆者はこのオプションを試す必要に迫られたことがあります。format ユーティリティーに入ると、次の 2 行がメニューに追加されています。

scsi	- independent SCSI mode selects
cache	- enable, disable or query SCSI disk cache

scsi オプションに入ると、簡潔な警告メッセージまで表示されます。実際のところ、SCSI プロトコルに精通していない読者には、SCSI プロトコルについて、特に format ユーティリティーの scsi オプション配下で変更可能なモード選択について解説した良書をお勧めします。筆者のお勧めは、Friedhelm Schmidt 氏による『The SCSI Bus and IDE Interface: Protocols, Applications, and Programming』です。筆者はこのオプションを多少試したことがありますが、その筆者の怪しい設定を本番稼動サーバーに適用したことは一度もありません。ものによっては手を付けないままでいるのが最良である場合もあるのです。

scsi オプションの範囲を試す場合の一言忠告: まず、format ユーティリティーをログオプション (-l c2t1d0.log) 付きで起動し、その後、format ユーティリティー内のすべての表示を渡り歩きます。これですべての情報がログファイルに保存されます。なお、scsi オプションの下にある format 選択は、その 1 つ上のメニューレベルにある format オプションとは異なります。

次に cache オプションですが、これを選択すると、ディスクの読み取りおよび書き込みキャッシュのメニューが表示されます。すべての SCSI ディスクがキャッシュを備えているとはかぎりませんし、キャッシュを備えているディスクのすべてでキャッシュオプションの変更が可能かどうかもわかりません。このキャッシュはディスク上に存在する少量のメモリーであり、システムのメモリーとは何の関係もありません。つまり、各ディスクは少しずつ異なっている可能性があり、これらの設定を変更するとディスク間で動作が多少変わる可能性がある、ということです。筆者の経験上、読み取りキャッシュは通常有効になっていますが、これは妥当です。なぜなら、読み取り処理中に電源が切れても何も失われないからです。データは依然として、ディスク上に存在しているはずです。同様に、筆者の経験上、書き込みキャッシュは常に無効になっています。電源が切れると書き込みキャッシュ内のデータはすべて失われてしまうため、これは妥当です。筆者がこれを有効にし、IOzone を使って入出力負荷を比較してみたところ、書き込み処理が、ほとんど改善しないものから大幅な改善があったものまで幅がありました。この改善率は、ディスクのモデルやベンダーによって変化します。

ここでは、-e オプションを指定して format ユーティリティーを実行しているので、説明すべき項目があと 1 つ残っています。label と入力すると、次の応答が得られます。


format> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]:

筆者は、SMI は Sun Microsystems を意味していると信じています。これがデフォルトのオプションですが、このオプションは、-e オプションを指定しないで format ユーティリティーに入った場合も表示されます。SMI オプションを選択すると、8 個のパーティションから成る標準パーティション構成が得られ、パーティション 2 がバックアップパーティションになります。

EFI (Extensible Firmware Interface) ラベルを選択すると、次のように別のパーティションが表示されます。


ascii name  = <FUJITSU  MAN3367M SUN36G  1502 43d671f>
bytes/sector    =  512
sectors = 71132958
accessible sectors = 71132925
Part      Tag    Flag     First Sector        Size            Last Sector
  0	   root    wm               34     128.35MB         	  262898    
  1	   swap    wu           262899     128.37MB         	  525797    
  2  unassigned    wm                0         0                     0  
  3  unassigned    wm                0         0                     0    
  4  unassigned    wm                0         0                     0    
  5  unassigned    wm                0         0                     0    
  6         usr    wm           525798      33.66GB         	71116540    
  7  unassigned    wm                0         0                     0   
  8    reserved    wm         71116541       8.00MB         	71132924    

format>

EFI の詳細は、Intel の Web サイトの Extensible Firmware Interface ページを参照してください。

さて、いかがだったでしょうか。読者が format ユーティリティーを使って行えることや、format ユーティリティーが読者に代わって実行してくれることについて、多少なりとも明確にできたとしたら幸いです。

執筆者紹介

Greg (shoe) Schuweiler はこの 20 年間、フレンドリーな米国中西部で、コンサルタント、組み込みソフトウェア設計者、Oracle DBA、およびその他のさまざまな変わった役職として働いてきました。彼はこの 8 年間、UNIX SA という高貴な仕事に就いています。連絡先は gshoe@xadd.org です。

The information and links on this page have been provided by a BigAdmin user. The submitter is solely responsible for such information and links. Sun is not responsible for the availability of external sites or resources, and does not endorse and is not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. Sun will not be responsible or liable, directly or indirectly, for any actual or alleged damage or loss caused by or in connection with use of or reliance on the information posted here, or goods or services available on or through any external site or resource.
 
 

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub