BSDLABEL(8)

名称
bsdlabel - ディスクラベルの読み書きを行う

書式
bsdlabel [-A] disk | -f file bsdlabel -w [-] [-B [-b boot]] [-m machine] disk | -f file [type] bsdlabel -e [-] [-B [-b boot]] [-m machine] disk | -f file bsdlabel -R [-] [-B [-b boot]] [-m machine] [-f] disk | -f file protofile

解説
bsdlabel ユーティリティは、ディスクパーティションや パーティションイメージを含むファイル上に BSD ラベルを 書きこんだり、確認したり、修正したりするために使われます。 また bsdlabel は同時にブートストラップコードを インストールすることもできます。

  ディスクデバイス名
デバイス指定時 (すなわち -f オプションが使われていない場合) には、 /dev/ のパスプレフィックスは省略可能です。 bsdlabel ユーティリティは自動的にこれを前に付けます。

  一般的なオプション
-A オプションをつけると、 BSD ラベルの中で歴史的な理由で残っている部分を 処理できるようになります。このオプションを与えない場合、これらの フィールドには適切な値が設定されます。

-f オプションは、ディスクパーティションの代わりにファイルに対して操作を行なうよう bsdlabel に指示します。

-n オプションは、ディスクが変更される直前で bsdlabel の実行を止め、実行結果をディスクに書きこまずに表示します。

-m machine 引数は、指定されたマシンに合ったレイアウトを使うように bsdlabel に指示を行います。

  ディスクラベルの読み込み
ディスクドライブ上のラベルを確認するためには オプションを指定せずに bsdlabel を使用します。

bsdlabel [-A] [-m machine] disk

disk は対象とするディスクを示します。 また da0 や /dev/da0 のような書式でも指定することができます。 これによってパーティションのレイアウトを表示します。

  標準的なラベルの書き込み
標準的なラベルを書き込むには、 以下の書式を使います。

bsdlabel -w [-] [-m machine] disk [type]

ドライブの種類が指定されている場合、 disktab(5) ファイル内の同名のエントリが使用され、 指定されていない場合はデフォルトのレイアウトが使われます。

  既存のディスクラベルの編集
既存のディスクラベルを編集するには、 以下の書式を使います。

bsdlabel -e [-] [-m machine] disk

このコマンドは、デフォルトのエディタでディスクラベルをオープンし、 エディタ終了時にディスクラベルを検証し、正しければそれをディスクに 書きこみます。

  ファイルからのディスクラベルの復元
ファイルからディスクラベルを復元するには、 以下の書式を使います。

bsdlabel -R [-] [-m machine] disk protofile

bsdlabel は以前の操作により ASCII フォーマットのファイルに保存されたディスクラベル を復元することができます。 ラベルを作成するときに使われるプロトタイプファイルは、ラベルを読み込んだり 編集したりするときのものと同じフォーマットである必要があります。 コメントは ‘#’ と改行で区切られます。

  ブートストラップのインストール
-B 引数が指定された場合、ブートストラップコードが /boot/boot から読みこまれ、それがディスクに書きこまれます。 -b boot 引数を用いると、別のファイルが使用できます。

関連ファイル
/boot/boot
    デフォルトのブートイメージ
/etc/disktab
    ディスクを説明したファイル

保存されたファイルの書式
bsdlabel ユーティリティは、 ディスクラベルを確認、編集、または復元する際に ASCII 形式のラベルを使用します。 フォーマットは以下のとおりです。

    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      a:    81920        0    4.2BSD     1024  8192    16
      b:   160000    81920      swap
      c:  1173930        0    unused        0     0         # "raw" part, don't edit

-A オプションが指定されている場合、フォーマットは次のようになります:

    # /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
      b:   160000    81920      swap
      c:  1173930        0    unused        0     0         # "raw" part, don't edit

‘#’ で始まる行はコメントです。

パーティションテーブルは 8 つまでエントリを持つことができ、 以下の情報を含みます:

#   パーティションの識別子は ‘a’ から ‘h’ の 1 文字です。 慣例的な理由により、 ‘c’ パーティションは ディスク全体を表すために予約されています。

size
    セクタ単位でのパーティションの大きさです。 K (キロバイト - 1024), M (メガバイト - 1024*1024), G (ギガバイト - 1024*1024*1024), % ( ‘c’ 以外の固定長のパーティションを取り除いた 後の 空間に対するパーセント)か、 * (固定長のパーティションとパーセント指定のパーティションを取り除いた 後の 空間すべて)。 パーティション ‘c’ に対して * を指定すると、ディスク全体を意味します。 小文字の K, M, G も許されます。 大きさと型の間には空白を入れてはなりません。

    例: 2097152, 1G, 1024M, 1048576K はすべて同じ大きさです (512 バイトセクタを仮定)。

offset
    ドライブの先頭からパーティションの開始位置までのオフセット値 (セクタ単位)です。 * は、使用すべき正しいオフセット (直前のパーティションの終端に 1 を加えたもの) を、 bsdlabel に計算させます。ただしパーティション ‘c’ は無視します。 パーティション ‘c’ に対しては、 * はオフセット 0 と解釈されます。

fstype
    パーティションの使用目的を表します。 例では現在使用されているパーティション型を示します。 UFS ファイルシステムおよび ccd(4) では 4.2BSD が使われます。 Vinum ドライブでは vinum が使われます。 他の一般的な型は swap と unused です。 取り決めでは、パーティション ‘c’ はスライス全体を表し、型 unused であるべきですが、 bsdlabel はこの取り決めを強制しません。 bsdlabel ユーティリティは多くの他のパーティション型を知っていますが、 それらは現在使用されていません (詳細は、 <sys/disklabel.h> ファイルで FS_UNUSED で始まっている定義を参照してください)。

fsize
    4.2BSD と LFS のファイルシステムに対してのみ有効です。 フラグメントの大きさを意味します。 1 GB 未満のパーティションに対するデフォルトは 1024 で、 1 GB 以上に対するデフォルトは 4096 です。

bsize
    4.2BSD と LFS のファイルシステムに対してのみ有効です。 ブロックの大きさを意味します。 1 GB 未満のパーティションに対するデフォルトは 8192 で、 1 GB 以上に対するデフォルトは 16384 です。

bps/cpg
    4.2BSD ファイルシステムに対しては、 シリンダグループ中のシリンダ数を意味します。 LFS ファイルシステムに対しては、 セグメントシフト値を意味します。 1 GB 未満のパーティションに対するデフォルトは 16 で、 1 GB 以上に対するデフォルトは 64 です。

使用例
    bsdlabel da0s1

da0 の最初のスライス用に、 /dev/da0s1 から得たものとしてラベルを表示します

    bsdlabel da0s1 > savedlabel

da0s1 に対する カーネル内のコピーをファイルに savedlabel に保存します。 このファイルは後で -R オプションを用いてラベルを復元する際に使用できます。

    bsdlabel -w /dev/da0s1

da0s1 のラベルを作成します。

    bsdlabel -e da0s1

da0s1 のラベルを読み込み、編集し、その結果を書き込みます。

    bsdlabel -e -n da0s1

da0s1 のディスク上のラベルを読み、編集し、新規ラベルがどのようになるかを (セクタ単位で) 表示します。 新規ラベルは、メモリにもディスクにもインストール しません 。

    bsdlabel -w da0s1

da0s1 にデフォルトのラベルを書きこみます。 パーティション情報やファイルシステム情報を編集するには、 この後で bsdlabel -e コマンドを使って下さい。

    bsdlabel -R da0s1 savedlabel

savedlabel に書かれている情報を da0s1 のラベルとして書き込みます。 ディスク上のラベルとともにカーネル内コピーも書き換えられます。

    bsdlabel -R -n da0s1 label_layout

パーティションレイアウト label_layout を使用すると、 da0s1 のラベルがどのようになるかを表示します。 % と * に基くパーティションの大きさ指定を使用するラベル方式を使用した場合に、 各パーティションにどれだけ割り当てられるかを判定するのに有用です。

    bsdlabel -B da0s1

da0s1 に新たにブートストラップコードを書き込みます. ブートストラップコードは /boot/boot です。

    bsdlabel -w -B -b newboot /dev/da0s1

新たなラベルとブートストラップコードを書き込みます。 ブートストラップコードは カレントディレクトリにある newboot です。

    dd if=/dev/zero of=/dev/da0 bs=512 count=32
    fdisk -BI da0
    dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
    bsdlabel -w -B da0s1
    bsdlabel -e da0s1

ディスク上の既存の情報を完全に削除し、 ディスク全体を覆う 1 つのスライスを含んだ DOS パーティションテーブル付きの ブート可能ディスクを新規に作成します。 次にスライスを初期化し、編集します。 dd(1) はオプションですが、 BIOS によっては正しくディスクを認識するために必要です。

これは、 %, M, G, * といった新規パーティションサイズ型を使用する、ディスクラベルの例です。 次のコマンドラインのソースファイルとして使用可能です: “bsdlabel -R ad0s1c new_label_file”

    # /dev/ad0s1c:
    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      a:   400M        0    4.2BSD     4096 16384    75 	# (Cyl.    0 - 812*)
      b:     1G        *      swap
      c:      *        *    unused
      e: 204800        *    4.2BSD
      f:     5g        *    4.2BSD
      g:      *        *    4.2BSD

診断
デバイスドライバは、 オープンされているパーティションに関して、 サイズが小さくなることおよびオフセットが変化することを許しません。

互換性
u_int32_t を用いてセクタ数を格納しているため、 bsdlabels は最大 2^32-1 セクタに制限されます。 これは通常 2TB のディスク容量を意味します。 これより大きなディスクをパーティションを分けるには、例えば gpt(8) などの別の方法を使う必要があります。

各々の BSD は、少しずつ異なったバージョンの BSD label を使用しており、 一般的に互換性はありません。

関連項目
ccd(4), geom(4), md(4), disktab(5), boot0cfg(8), fdisk(8), gpt(8)