.\" .\" Copyright (c) 1996 Joerg Wunsch .\" .\" All rights reserved. .\" .\" This program is free software. .\" .\" 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. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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. .\" .\" %FreeBSD: src/lib/libdisk/libdisk.3,v 1.11.2.10 2001/12/17 10:08:29 ru Exp % .\" " .\" $FreeBSD$ .Dd March 15, 1996 .Dt LIBDISK 3 .Os .Sh 名称 .Nm Open_Disk , .Nm Clone_Disk , .Nm Free_Disk , .Nm Debug_Disk , .Nm Set_Bios_Geom , .Nm Delete_Chunk , .Nm Collapse_Disk , .Nm Collapse_Chunk , .Nm Create_Chunk , .Nm All_FreeBSD , .Nm CheckRules , .Nm Disk_Names , .Nm Set_Boot_Mgr , .Nm Set_Boot_Blocks , .Nm Write_Disk , .Nm Cyl_Aligned , .Nm Next_Cyl_Aligned , .Nm Prev_Cyl_Aligned , .Nm Track_Aligned , .Nm Next_Track_Aligned , .Nm Prev_Track_Aligned , .Nm Create_Chunk_DWIM , .Nm MakeDev , .Nm MakeDevDisk , .Nm ShowChunkFlags , .Nm ChunkCanBeRoot , .Nm chunk_n , .Nm slice_type_name .Nd スライスおよびパーティションラベルに対するインタフェースライブラリ .Sh ライブラリ .Lb libdisk .Sh 書式 .In sys/types.h .In libdisk.h .Pp .Vt extern const char *chunk_n[] ; .Ft const char * .Fn slice_type_name "int type" "int subtype" .Ft struct disk * .Fn Open_Disk "const char *devname" .Ft struct disk * .Fn Clone_Disk "struct disk *disk" .Ft void .Fn Free_Disk "struct disk *disk" .Ft void .Fn Debug_Disk "struct disk *disk" .Ft void .Fn Set_Bios_Geom "struct disk *disk" "u_long cyl" "u_long heads" "u_long sects" .Ft int .Fn Delete_Chunk "struct disk *disk" "struct chunk *" .Ft void .Fn Collapse_Disk "struct disk *disk" .Ft int .Fn Collapse_Chunk "struct disk *disk" "struct chunk *chunk" .Ft int .Fn Create_Chunk "struct disk *disk" "u_long offset" "u_long size" "chunk_e type" "int subtype" "u_long flags" .Ft void .Fn All_FreeBSD "struct disk *d" "int force_all" .Ft char * .Fn CheckRules "struct disk *" .Ft char ** .Fn Disk_Names "void" .Ft void .Fn Set_Boot_Mgr "struct disk *d" "const u_char *bootmgr" "const size_t bootmgr_size" .Ft int .Fn Set_Boot_Blocks "struct disk *d" "const u_char *boot1" "const u_char *boot2" .Ft int .Fn Write_Disk "struct disk *d" .Ft int .Fn Cyl_Aligned "struct disk *d" "u_long offset" .Ft u_long .Fn Next_Cyl_Aligned "struct disk *d" "u_long offset" .Ft u_long .Fn Prev_Cyl_Aligned "struct disk *d" "u_long offset" .Ft int .Fn Track_Aligned "struct disk *d" "u_long offset" .Ft u_long .Fn Next_Track_Aligned "struct disk *d" "u_long offset" .Ft u_long .Fn Prev_Track_Aligned "struct disk *d" "u_long offset" .Ft struct chunk * .Fn Create_Chunk_DWIM "struct disk *d" "struct chunk *parent" "u_long size" "chunk_e type" "int subtype" "u_long flags" .Ft int .Fn MakeDev "struct chunk *c" "const char *path" .Ft int .Fn MakeDevDisk "struct disk *d" "const char *path" .Ft char * .Fn ShowChunkFlags "struct chunk *c" .Ft char * .Fn ChunkCanBeRoot "struct chunk *c" .Sh 解説 .Nm libdisk は、低レベルのディスクスライス およびパーティションラベルに対するインタフェースを提供します。 ほとんどの関数は、 .Ql struct disk または .Ql struct chunk という型の引数を取り動作します。 .Pp どちらの型もプログラマにはわかりにくいので、完全を期すために 以下に内部構造を示します。 .Bd -literal -offset indent struct disk { char *name; u_long flags; u_long bios_cyl; u_long bios_hd; u_long bios_sect; u_char *bootmgr; u_char *boot1; u_char *boot2; struct chunk *chunks; u_long sector_size; }; .Ed 関数によるフラグ値は .Ql DISK_ON_TRACK だけで、ディスクが On-Track ディスクマネージャによって 操作されていることを意味します。 .Pp .Bd -literal -offset indent struct chunk { struct chunk *next; struct chunk *part; struct disk *disk; long offset; u_long size; u_long end; char *name; char *oname; chunk_e type; int subtype; u_long flags; void (*private_free)(void*); void *(*private_clone)(void*); void *private_data; }; .Ed .Ql type フィールドは .Ql whole, unknown, fat, freebsd, extended, part, unused のうち、どれか一つの値を取ります。 .Pp 以下は .Ql struct chunk において .Ql flags が取ることのできる値です。 .Bl -tag -offset indent -width CHUNK_BSD_COMPATXX .It CHUNK_PAST_1024 シリンダ 1024 を越えているため、この領域からはブートできません。 .It CHUNK_BSD_COMPAT この領域は、 .Bx 互換であり、 .Ql wd0s4f -> wd0f のような短縮形も使用できます。 .It CHUNK_ALIGN この領域は整合(align)していなければなりません。 .It CHUNK_IS_ROOT この .Ql part は rootfs であり、パーティションを .Ql a に 割り振ります。 .It CHUNK_ACTIVE MBR 内のアクティブスライスです。 .It CHUNK_FORCE_ALL すべての BIOS によるジオメトリ解釈を無視し、与えられたディスク全体を 強制的に .Fx 用とします。 .El .Pp フィールド .Ql private_data, `private_free', private_clone は、 アプリケーション固有のデータ、およびその管理のためのものです。この 機能がなければ、記憶域の管理はできず、クローニングによりポインタが 複製されても解放できなくなります。 .Pp .Fn Open_Disk は、名前付ディスクを open し、一群 (populated) のツリーを 返します。 .Pp .Fn Clone_Disk は、ツリーの複製を作成します。 .Dq Undo 機能に便利です。 .Pp .Fn Free_Disk は、 .Fn Open_Disk または .Fn Clone_Disk で作成されたツリーを解放します。 .Pp .Fn Debug_Disk は、標準出力 (stdout) のツリーの内容を出力します。 .Pp .Fn Set_Bios_Geom は、 BIOS が使うジオメトリを設定します。 .Pp .Fn Delete_Chunk は、disk_space の領域を解放します。 .Pp .Fn Collapse_Disk および .Fn Collapse_Chunk は、まだ試験的なものなので使ってはいけません。 .Pp .Fn Create_Chunk は、指定されたパラメータを持つ領域を生成します。 .Pp .Fn All_FreeBSD は、ディスク全体を一つの .Fx の領域を作成します。 .Ql force_all が設定されていると、BIOS によるジオメトリ解釈をすべて無視します。 .Pp .Fn CheckRules は、このディスクレイアウトの矛盾した区画規則についての警告を 文字列 .Ql char* として返します。 .Pp .Fn Disk_Names は、 すべてのディスク名 (wd0, wd1 ...) を格納した文字列群 .Ql char** を返します。 配列と同様、各ポインタを手動で解放しなければなりません。 .Pp .Fn Set_Boot_Mgr は、このブートマネージャをディスク上で使うように設定します。 .Fn Write_Disk が呼び出されるときに書き込まれたものを取得します。 .Pp .Fn Set_Boot_Blocks は、ディスク上で使われるブートブロックを設定します。 .Fn Write_Disk が呼び出されるときに書き込まれたものを取得します。 .Pp .Fn Write_Disk は、MBR 、ディスクラベル、ブートブロック、ブートマネージャ すべてを書き込みます。 .Pp .Fn Cyl_Aligned は、BIOS ジオメトリに従って .Ql offset がシリンダ上に整合しているかどうかを調べます。 .Pp .Fn Next_Cyl_Aligned は、BIOS ジオメトリに従って .Ql offset を次のシリンダに切り上げて配置します。 .Pp .Fn Prev_Cyl_Aligned は、BIOS ジオメトリに従って .Ql offset を前のシリンダに切り下げて配置します。 .Pp .Fn Track_Aligned は、BIOS ジオメトリに従って .Ql offset がトラック上に配置されているかどうかを調べます。 .Pp .Fn Next_Track_Aligned は、BIOS ジオメトリに従って .Ql offset を次のトラックに切り上げて配置します。 .Pp .Fn Prev_Track_Aligned は、BIOS ジオメトリに従って .Ql offset がトラック上に配置されているかどうかを調べます。 .Pp .Fn Create_Chunk_DWIM は、指定された親領域内に指定サイズのパーティションを生成し、 そのポインタを返します。 最初に見つかった十分な大きさの未使用領域が使われます。 .Pp .Fn MakeDev は、この領域のデバイスノードを作成します。 .Pp .Fn MakeDevDisk は、ディスク上にあるすべての領域のデバイスノードを作成します。 .Pp .Fn ShowChunkFlags は、フラグを表示する文字列を返します。 .Pp .Fn ChunkCanBeRoot は、領域が .Ql / になれるならばヌルを返します。 .Pp 領域名を示す文字列は、外部配列変数 .Va chunk_n を使って直接アクセスできます。 .Pp .Fn slice_type_name は、指定された .Ql type . .Ql subtype に関連づけられた名前文字列を返します。 .Fn slice_type_name がスライスに対して "unknown" を返すのは、 未知の場合、すなわち .Ql / です。 .Pp .Sh 作者 .An -nosplit .Nm libdisk は、 .An Poul-Henning Kamp が作成しました。 .Pp このマニュアルページの執筆者は .An J\(:org Wunsch です。