LIBDISK(3) FreeBSD ライブラリ関数マニュアル LIBDISK(3)
名称
Open_Disk, Clone_Disk, Free_Disk, Debug_Disk, Set_Bios_Geom, Delete_Chunk, Collapse_Disk, Collapse_Chunk, Create_Chunk, All_FreeBSD, CheckRules, Disk_Names, Set_Boot_Mgr, Set_Boot_Blocks, Write_Disk, Cyl_Aligned, Next_Cyl_Aligned, Prev_Cyl_Aligned, Track_Aligned, Next_Track_Aligned, Prev_Track_Aligned, Create_Chunk_DWIM, MakeDev, MakeDevDisk, ShowChunkFlags, ChunkCanBeRoot, chunk_n, slice_type_name − スライスおよびパーティションラベルに対するインタフェースライブラリ |
ライブラリ
Interface to Slice and Partition Labels Library (libdisk, −ldisk) |
書式
#include <sys/types.h> extern const char *chunk_n[]; const char * |
slice_type_name(int type, int subtype); struct disk * |
Open_Disk(const char *devname); struct disk * |
Clone_Disk(struct disk *disk); void |
Free_Disk(struct disk *disk); void |
Debug_Disk(struct disk *disk); void |
Set_Bios_Geom(struct disk *disk, u_long cyl, u_long heads, u_long sects); int |
Delete_Chunk(struct disk *disk, struct chunk *); void |
Collapse_Disk(struct disk *disk); int |
Collapse_Chunk(struct disk *disk, struct chunk *chunk); int |
Create_Chunk(struct disk *disk, u_long offset, u_long size, chunk_e type, int subtype, u_long flags); void |
All_FreeBSD(struct disk *d, int force_all); char * |
CheckRules(struct disk *); char ** |
Disk_Names(void); void |
Set_Boot_Mgr(struct disk *d, const u_char *bootmgr, const size_t bootmgr_size); int |
Set_Boot_Blocks(struct disk *d, const u_char *boot1, const u_char *boot2); int |
Write_Disk(struct disk *d); int |
Cyl_Aligned(struct disk *d, u_long offset); u_long |
Next_Cyl_Aligned(struct disk *d, u_long offset); u_long |
Prev_Cyl_Aligned(struct disk *d, u_long offset); int |
Track_Aligned(struct disk *d, u_long offset); u_long |
Next_Track_Aligned(struct disk *d, u_long offset); u_long |
Prev_Track_Aligned(struct disk *d, u_long offset); struct chunk * |
Create_Chunk_DWIM(struct disk *d, struct chunk *parent, u_long size, chunk_e type, int subtype, u_long flags); int |
MakeDev(struct chunk *c, const char *path); int |
MakeDevDisk(struct disk *d, const char *path); char * |
ShowChunkFlags(struct chunk *c); char * |
ChunkCanBeRoot(struct chunk *c); |
解説 |
libdisk は、低レベルのディスクスライスおよびパーティションラベルに対する インタフェースを提供します。ほとんどの関数は、 ‘struct disk’ または ‘struct chunk’ という型の引数を取り動作します。 どちらの型もプログラマにはわかりにくいので、完全を期すために以下に内部構 造を示します。 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; |
}; 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; |
}; 以下は ‘struct chunk’ において ‘flags’ が取ることのできる値です。 |
CHUNK_PAST_1024
シリンダ 1024 を越えているため、この領域からは ブートできません。 CHUNK_BSD_COMPAT CHUNK_ALIGN CHUNK_IS_ROOT CHUNK_ACTIVE CHUNK_FORCE_ALL フィールド ‘private_data, ‘private_free’, private_clone’ は、アプリケー ション固有のデータ、およびその管理のためのものです。この機能がなければ、 記憶域の管理はできず、クローニングによりポインタが複製されても解放できな くなります。 Open_Disk() は、名前付ディスクを open し、一群 (populated) のツリーを返し ます。 Clone_Disk() は、ツリーの複製を作成します。 ‘‘Undo’’ 機能に便利です。 Free_Disk() は、 Open_Disk() または Clone_Disk() で作成されたツリーを解放 します。 Debug_Disk() は、標準出力 (stdout) のツリーの内容を出力します。 Set_Bios_Geom() は、 BIOS が使うジオメトリを設定します。 Delete_Chunk() は、disk_space の領域を解放します。 Collapse_Disk() および Collapse_Chunk() は、まだ試験的なものなので使って はいけません。 Create_Chunk() は、指定されたパラメータを持つ領域を生成します。 All_FreeBSD() は、ディスク全体を一つの FreeBSD の領域を作成します。 ‘force_all’ が設定されていると、BIOS によるジオメトリ解釈をすべて無視しま す。 CheckRules() は、このディスクレイアウトの矛盾した区画規則についての警告を 文字列 ‘char*’ として返します。 Disk_Names() は、すべてのディスク名 (wd0, wd1 ...) を格納した文字列群 ‘char**’ を返します。配列と同様、各ポインタを手動で解放しなければなりませ ん。 Set_Boot_Mgr() は、このブートマネージャをディスク上で使うように設定しま す。 Write_Disk() が呼び出されるときに書き込まれたものを取得します。 Set_Boot_Blocks() は、ディスク上で使われるブートブロックを設定します。 Write_Disk() が呼び出されるときに書き込まれたものを取得します。 Write_Disk() は、MBR 、ディスクラベル、ブートブロック、ブートマネージャす べてを書き込みます。 Cyl_Aligned() は、BIOS ジオメトリに従って ‘offset’ がシリンダ上に整合して いるかどうかを調べます。 Next_Cyl_Aligned() は、BIOS ジオメトリに従って ‘offset’ を次のシリンダに 切り上げて配置します。 Prev_Cyl_Aligned() は、BIOS ジオメトリに従って ‘offset’ を前のシリンダに 切り下げて配置します。 Track_Aligned() は、BIOS ジオメトリに従って ‘offset’ がトラック上に配置さ れているかどうかを調べます。 Next_Track_Aligned() は、BIOS ジオメトリに従って ‘offset’ を次のトラック に切り上げて配置します。 Prev_Track_Aligned() は、BIOS ジオメトリに従って ‘offset’ がトラック上に 配置されているかどうかを調べます。 Create_Chunk_DWIM() は、指定された親領域内に指定サイズのパーティションを 生成し、そのポインタを返します。最初に見つかった十分な大きさの未使用領域 が使われます。 MakeDev() は、この領域のデバイスノードを作成します。 MakeDevDisk() は、ディスク上にあるすべての領域のデバイスノードを作成しま す。 ShowChunkFlags() は、フラグを表示する文字列を返します。 ChunkCanBeRoot() は、領域が ‘/’ になれるならばヌルを返します。 領域名を示す文字列は、外部配列変数 chunk_n を使って直接アクセスできます。 slice_type_name() は、指定された ‘type’. ‘subtype’ に関連づけられた名前 文字列を返します。 slice_type_name() がスライスに対して "unknown" を返す のは、未知の場合、すなわち ‘/’ です。 作者 |
libdisk は、 Poul-Henning Kamp が作成しました。 このマニュアルページの執筆者は Jörg Wunsch です。 FreeBSD 10.0 March 15, 1996 FreeBSD 10.0 |