.\" Copyright (c) 1987, 1988, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Symmetric Computer Systems. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgment: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)disklabel.8 8.2 (Berkeley) 4/19/94 .\" %FreeBSD: src/sbin/disklabel/disklabel.8,v 1.15.2.1 2000/07/01 06:47:46 ps Exp % .\" .\" jpman %Id: disklabel.8,v 1.2 1997/03/31 14:09:16 horikawa Stab % .\" .Dd July 30, 1999 .Dt DISKLABEL 8 .Os FreeBSD .Sh 名称 .Nm disklabel .Nd ディスクラベルの読み書きを行う .Sh 書式 .Nm disklabel .Op Fl r .Ar disk .br .Nm disklabel .Fl w .Op Fl r .Ar disk Ar disktype .Oo Ar packid Oc .br .Nm disklabel .Fl e .Op Fl r .Ar disk .br .Nm disklabel .Fl R .Op Fl r .Ar disk Ar protofile .br .Nm disklabel .Op Fl NW .Ar disk .sp .br .Nm disklabel .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk .Oo Ar disktype Oc .br .Nm disklabel .Fl w .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk Ar disktype .Oo Ar packid Oc .br .Nm disklabel .Fl R .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk Ar protofile .Oo Ar disktype Oc .\" 注: 上記 .br は改行動作のために挿入 .\" By horikawa@jp.freebsd.org (30 Mar 1997) .Sh 解説 .Nm はディスクドライブやディスクパックにラベルを書き込んだり、 確認したり、修正したりするために使われます。 ラベルを書き込む際には、ドライブの識別子を変更したり、 ディスクのパーティションを変更したり、 異常のあるラベルを置き換えたりすることができます。 コマンドには、ディスク上のラベルを読んだり (表示したり)、書き込んだり、 編集したりするいくつかの書式があります。 また .Nm は同時にブートストラップコードを インストールすることもできます。 .Ss メモリ内のラベルとディスク上のラベル .Pp ディスクラベルは各ディスクパーティションの先頭、 もしくは先頭付近に存在します。 より速くアクセスするために、カーネルは 常にメモリ内にコピーを保持します。 デフォルトでは、 .Nm による操作のほとんどは メモリ内にあるラベルのコピーに対してアクセスします。 (ディスク上に存在する)ラベルにアクセスするためには .Fl r オプションを使用します。 このオプションにより、 カーネルのサポート無しでラベルがディスクにインストール することが可能になります。 例えばラベルがはじめてシステムにインストールされる時など、 ディスクにはじめてラベルを書き込む際に指定されなければなりません。 .Fl r オプションによる固有の効果は以下の 各コマンドの説明で示します。 .Pp .Ss ディスクデバイス名 .Pp 全ての .Nm disklabel の書式で、ディスクのデバイス名が必要です。 ディスクのデバイス名は必ずローデバイスで .if t 「全体」を表すパーティション (すなわち ``c'') .if n 「全体」を表すパーティション (すなわち "c") でなければなりません。 .if t 「全体」を表すパーティション (すなわち ``c'') .if n 「全体」を表すパーティション (すなわち "c") とは、例えば .Pa /dev/da0c です。 .Nm は .Pa da0 といった省略形を内部で .Pa /dev/da0c に変換するため、省略形も使用できます。 .Ss ディスクラベルの読み込み .Pp ラベルをディスクドライブに保存したり確認するためには オプションを指定せずに .Nm を使用します。 .Pp .Nm disklabel .Op Fl r .Ar disk .Pp .Ar disk は対象とするローディスクを示します。 また .Pa da0 や .Pa /dev/da0c のような書式でも指定することができます。 これによってドライブに関するすべてのパラメータとパーティションのレイアウトを 表示します。 .Fl r フラグを指定しない場合には、カーネルのメモリ内にあるラベルのコピーが 表示されます。 もしディスクにラベルが書き込まれていなかったり、ディスクのパーティション形式が 正しくない場合には、カーネルが作り直したり、修正するかもしれません。 .Fl r フラグが与えられると、 ディスク上の実際のラベルが表示されます。 .Ss 標準的なラベルの書き込み .Pp 標準的なラベルを書き込むには、 以下の書式を使います。 .Pp .Nm disklabel .Fl w .Op Fl r .Ar disk Ar disktype .Oo Ar packid Oc .Pp コマンドには引数として、ラベルを書き込むドライブ名および .Pa disktab(5) に書かれているドライブタイプが必要です。 ドライブのパラメータとパーティション情報は、このファイルから得られたもの が使われます。 もし、同じ型のディスクに異なるパーティション情報を持たせたい場合には、 disktab にそれぞれ別々のエントリを書いておくか、ラベルを書き込んだあとで 後述する方法でそれを編集する必要があります。 オプションの引数として、16 文字までのパック識別用文字列を指定します。 パック名に空白を含める場合にはそれをクォートする必要があります。 .Fl r フラグが与えられると、ディスクのラベルとブートストラップが 直接書き換えられます。 この副作用として、すでにあるブートストラップ用コードが上書きされてしまうため、 ディスクがブート不能にされてしまいます。 ラベルとブートストラップを同時に書き込む方法は 後述のブートオプションを参照してください。 .Fl r が指定されない場合には、ラベルはメモリ内のコピーを通して書き換えられる ため、ブートストラップコードは影響されません。 もしまだディスクがラベル付けされていなければ、 .Fl r フラグをつけなければなりません。 どちらの方法でも、カーネルのメモリ内コピーは変更されます。 .Pp .Xr disktab 5 に記載されていない未使用のディスクに対しては、 .Ar disktype として .Dq auto を指定できます。 この場合、ディスクの最初のラベルを生成するようにドライバに要求します。 これは成功するかも知れないし成功しないかも知れません。 これはディスクドライバがディスクを全く読む事無く 必要なデータを取得できるか否かに依存します。 全ての SCSI ディスクとほとんどの IDE ディスクと vnode デバイスにおいて 成功するでしょう。 ディスクに対するラベルの書き込みは唯一サポートされた操作であり、 .Ar disk 自身は標準の名前 (フルパス名であってはなりません) で提供される必要があります。 .Ss 既存のディスクラベルの編集 .Pp 既存のディスクラベルを編集するには、 以下の書式を使います。 .Pp .Nm disklabel .Fl e .Op Fl r .Ar disk .Pp このコマンドはラベルを カーネルのメモリ内コピーから、または .Fl r フラグが与えられた場合には直接ディスクから 読み込まれます。 ラベルはアスキーでファイルにかかれ、 編集するためのエディタへ渡されます。 .Ev EDITOR 環境変数によるエディタの指定がない場合には、このエディタには .Xr vi 1 が使用されます。 エディタを終了すると、ラベルファイルはディスクラベルを 再書き込みするために使われます。 .Fl r フラグの指定の有無にかかわらず、 すでにあるブートストラップコードは変更されません。 .Ss ファイルからのディスクラベルの復元 .Pp ファイルからディスクラベルを復元するには、 以下の書式を使います。 .Pp .Nm disklabel .Fl R .Op Fl r .Ar disk Ar protofile .Pp .Nm は以前の操作によりアスキーファイルとして保存されているディスクラベル をディスクへ書き戻します。 ラベルを作成するときに使われるプロトタイプファイルは、ラベルを読み込んだり 編集したりするときのものと同じフォーマットである必要があります。 コメントは .Ar \&# と改行で区切られます。 新しいラベルを書き込む際に .Fl r が指定されているとブートストラップコードは使えなくなってしまいますが、 指定されていない場合には影響ありません。 ラベルの復元とブートストラップの書き込みを同時に行う方法は 後述のブートオプションを参照してください。 .Ss ディスクラベル領域への書き込みの有効化および無効化 .Pp デフォルトでは ディスクの先頭領域にあるディスクラベル領域への書き込みは不可能です。 ディスクドライバはいかなる操作も無視します。 もし(例えばラベルを消去するなど) この領域への書き込みを行う必要があるならば、 以下の書式を使います。 .Pp .Nm disklabel .Op Fl W .Ar disk .Pp ラベルの書き込みを可能にした後に不可能にするには 以下のコマンドを使います。 .Pp .Nm disklabel .Op Fl N .Ar disk .Ss ブートストラップのインストール .Pp .Nm の最後の 3 つの書式は、ブートストラップコードを インストールするために使われます: .Pp .Nm disklabel .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk .Oo Ar disktype Oc .Pp この書式ではブートストラップのみインストールします。 ディスクラベルは変更しません。 .Pp .Nm disklabel .Fl w .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk Ar disktype .Oo Ar packid Oc .Pp .if t この書式は前述の ``ラベルの書き込み'' コマンドと一致します。 .if n この書式は前述の "ラベルの書き込み" コマンドと一致します 新しいボリュームラベルを書き込むとともに ブートストラップのインストールもおこないます。 .Pp .Nm disklabel .Fl R .Fl B .Oo .Fl b Ar boot1 .Fl s Ar boot2 .Oc .Ar disk Ar protofile .Oo Ar disktype Oc .Pp .if t この書式は前述の ``ラベルの復元'' コマンドと一致します. .if n この書式は前述の "ラベルの復元" コマンドと一致します. ボリュームラベルを復元するとともに ブートストラップのインストールもおこないます。 .Pp ブートストラップコマンドは常にディスクに直接アクセスするため、 .Fl r フラグを指定する必要はありません。 .Pp ブートストラップコードは 2 つのブートプログラムより構成されます。 インストールされるブートプログラムの名前は 以下の 3 つの方法の中の 1 つより指定します。 .Bl -enum .It .Fl b フラグと .Fl s フラグを用いて明示的に名前を指定します。 .Fl b フラグで指定するのが最初のブートプログラムで、 .Fl s フラグで指定するのが 2 段階目のブートプログラムになります。 ブートプログラムは、 .Pa /boot に置かれます。 .It .Fl b フラグと .Fl s フラグが指定されておらず .Ar disktype が指定された場合、 disktab のエントリが存在しこれらのパラメータが含まれるならば プログラムの名前は このディスクに対する .Xr disktab 5 エントリの .if t ``b0'' および ``b1'' .if n "b0" および "b1" パラメータより得られます。 .It そうでない場合、デフォルトのブートイメージ名は 標準のステージ 1 およびステージ 2 のブートイメージとして .Pa /boot/boot1 と .Pa /boot/boot2 になります (詳細はアーキテクチャによって異なり、 Alpha においては単一ステージのブートが使用されます)。 .El .Sh 関連ファイル .Bl -tag -width Pa -compact .It Pa /etc/disktab .It Pa /boot/ .It Pa /boot/boot .Sh 保存されたファイルの書式 .Nm は ディスクラベルを確認、編集、または復元する際に アスキー形式のラベルを使用します。 フォーマットは以下のとおりです。 .Bd -literal -offset 4n # /dev/da1c: type: SCSI disk: da0s1 label: flags: bytes/sector: 512 sectors/track: 51 tracks/cylinder: 19 sectors/cylinder: 969 cylinders: 1211 sectors/unit: 1173930 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # milliseconds track-to-track seek: 0 # milliseconds drivedata: 0 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 81920 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 84*) b: 160000 81920 swap # (Cyl. 84* - 218*) c: 1173930 0 unused 0 0 # (Cyl. 0 - 1211*) h: 962010 211920 vinum # (Cyl. 218*- 1211*) .Ed .Pp # で始まる行はコメントです。 他の項目のほとんども既に使われていません。 正しく設定されてなければならない項目は以下のとおりです: .Pp .Bl -hang -width 20n .It Nm label オプションのラベルです。 ラベルを書き込む際に .Ar packid オプションにより設定されます。 .It Nm flags flags は .Ar removable 、 .Ar ecc もしくは .Ar badsect が指定可能です。 .Ar removable はリムーバブルメディアドライブに対して設定されますが、 現在の FreeBSD のドライバはこのフラグを 評価しません。 .Ar ecc はサポートされていません。 .Ar badsect はドライブが不良セクタの代替を行える場合に 指定します。 .It Nm sectors/unit ディスクの全体の大きさを示します。 この値は正しくなければなりません。 .It Nm the partition table これはUNIX のパーティションテーブルであり、 .Xr fdisk 8 で述べられている Microsoft のパーティションテーブルではありません。 .El .Pp パーティションテーブルは 8 つまでエントリを持つことができ、 以下の情報を含みます: .Bl -hang -width 10n .It identifier パーティションの識別子は .Nm a から .Nm h の 1 文字です。 慣例的な理由により、 .Nm c パーティションは ディスク全体を表すために予約されています。 .It size セクタ単位でのパーティションの大きさです。 .It offset ドライブの先頭からのオフセットによるパーティションの開始位置です。 .It fstype パーティションの使用目的を表します。 例ではもっとも一般的な使用例を示しています。 UFS ファイルシステムは 4.2BSD が使われます。 完全なリストは .Pa /usr/include/sys/disklabel.h を参照してください。 .It fsize ファイルシステムに対して有効です。 フラグメントのサイズを意味します。 .It bsize ファイルシステムに対して有効です。 ブロックののサイズを意味します。 .It bps/cpg UFS ファイルシステムに対しては、 シリンダグループ中のリシンダ数を意味します。 LFS ファイルシステムに対しては、 セグメントシフト値を意味します。 .El 行の残りの部分はコメントで、 ドライブの 一般的には使われていない(しかし多分正確な)ジオメトリ情報に 基づいたシリンダの割り当て情報を示しています。 アスタリスク (*) はパーティションがシリンダ境界で 厳密にはじまっていない、もしくは終っていないことを意味します。 .Sh 使用例 .Dl disklabel da0 .Pp da0 のラベルとしてカーネル内のコピーを .Pa /dev/da0c から得られたものとして表示します。 .Pp .Dl disklabel da0 > savedlabel .Pp .Pa da0 に対する カーネル内のコピーをファイルに .Pa savedlabel に保存します。 このファイルは後で .Fl R フラグを用いてラベルを復元する際に使用できます。 .Pp .Dl disklabel -w -r /dev/da0c da2212 foo .Pp .Pa /etc/disktab に書かれている .if t ``da2212'' .if n "da2212" の情報を da0 のラベルとして書き込みます。 存在したブートストラップコードは使えなくなります。 .Pp .Dl disklabel -e -r da0 .Pp da0 のディスク上のラベルを読み込み、編集し、再び書き込みます。 ディスク上のラベルとともにカーネル内コピーも書き換えられます。 存在したブートストラップコードは影響を受けません。 .Pp .Dl disklabel -r -w da0 auto .Pp da0 から必要な情報を自動検出し、新しいラベルをディスクに書こうとします。 パーティションおよびファイルシステム情報を編集するために、 この後で disklabel -e コマンドを使って下さい。 .Pp .Dl disklabel -R da0 savedlabel .Pp .Pa savedlabel に書かれている情報を da0 のラベルとして書き込みます。 ディスク上のラベルとともにカーネル内コピーも書き換えられます。 存在したブートストラップコードは影響を受けません。 .Pp .Dl disklabel -B da0 .Pp da0 に新たにブートストラップコードを書き込みます. ブートストラップコードは .Pa /boot/boot1 、およびもし必要ならば .Pa /boot/boot2 です。 ディスク上のラベルおよびカーネル内コピーは影響を受けません。 .Pp .Dl disklabel -w -B /dev/da0c -b newboot1 -s newboot da2212 .Pp 新たなラベルとブートストラップコードを書き込みます。 .if t ラベルは disktab の ``da2212'' の情報を使用し、 .if n ラベルは disktab の "da2212" の情報を使用し、 ディスク上のラベルとともにカーネル内コピーも書き換えられます。 ブートストラップコードは .Pa /boot/newboot1 と .Pa /boot/newboot2 です。 .Sh 関連項目 .Xr disklabel 5 , .Xr disktab 5 , .Xr boot0cfg 8 , .Xr fdisk 8 .Sh 診断 デバイスドライバは、 オープンされているパーティションに関して、 サイズが小さくなることおよびオフセットが変化することを許しません。 デバイスドライバの中には、 ラベルを持たないディスクに対して 1 パーティションのみからなる ラベルを作成するものがあります。 そのため、 オープンされているディスクのラベルは .if t ``a'' .if n "a" パーティションに書く必要があります。 このような理由で、 次の 2 ステップにより、 所望のラベルを作成する必要がある場合があります。 第 1 ステップは少なくとももう 1 つのパーティションを作成することであり、 第 2 ステップは .if t ``a'' .if n "a" パーティションを小さくしながら 新たなパーティションのラベルを設定することです。 .Pp ファイルシステムによっては、 用意された領域にブートストラップコードが収まり切らないような マシンがあるかも知れません その結果として、``ブート可能な'' ディスクのパーティションに ファイルシステムを作成できない場合があります。 ブートストラップコードを書き込む時に、 .Nm はこのようなケースをチェックします。 FS_UNUSED タイプのパーティションに重なるように ブートストラップコードが書き込まれる場合には、 そのパーティションは FS_BOOT とマークされます。 .Xr newfs 8 ユーティリティは、 FS_BOOT パーティションにファイルシステムを作成することを禁止します。 また逆に、 パーティションのタイプが FS_UNUSED もしくは FS_BOOT では無い場合、 .Nm はそのパーティションに重なるようなブートストラップコードを書き込みません。 .Sh バグ ディスク名がフルパスで指定されない場合には、 .if t デバイス名は ``c'' パーティションになります。 .if n デバイス名は "c" パーティションになります。 .Pp i386 アーキテクチャでは、プライマリブートストラップセクタに、 組み込みの .Em fdisk テーブルを持ちます。 .Nm は、 ブートストラップのみをインストールする時 .Pq Fl B もしくはラベルを編集する時 .Pq Fl e にこれを壊さないように気を付けます。 しかし、 .Fl w や .Fl R を指定した時には、 無条件でプライマリブートストラッププログラムをディスクに書き込みますので、 .Em fdisk テーブルをブートストラッププログラム内のダミーに置き換えます。 これはディスク全体を専用に使う場合、 すなわち BSD ディスクラベルがディスクの絶対ブロック 0 から始まる場合 のみ関係あります。 .Pp .Nm は十分なエラーチェックは行いません。 パーティションが重なったり使われない領域が残ってしまっても 警告は出力されません。