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 - スライスおよびパーティションラベルに対するインタフェースライブラリ

書式
#include <sys/types.h> #include <libdisk.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) void 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;
    };

関数によるフラグ値は ‘DISK_ON_TRACK’ だけで、ディスクが On-Track ディスクマネージャによって 操作されていることを意味します。

    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;
    };

‘type’ フィールドは ‘whole, unknown, fat, freebsd, extended, part, unused’ のうち、どれか一つの値を取ります。

以下は ‘struct chunk’ において ‘flags’ が取ることのできる値です。

CHUNK_PAST_1024
    シリンダ 1024 を越えているため、この領域からはブートできません。

CHUNK_BSD_COMPAT
    この領域は、BSD 互換であり、 ‘wd0s4f -> wd0f’ のような短縮形も使用できます。

CHUNK_BAD144
    この領域には bad144 マッピングがあります。

CHUNK_ALIGN
    この領域は整合(align)していなければなりません。

CHUNK_IS_ROOT
    この ‘part’ は rootfs であり、パーティションを ‘a’ に 割り振ります。

CHUNK_ACTIVE
    MBR 内のアクティブスライスです。

CHUNK_FORCE_ALL
    すべての BIOS によるジオメトリ解釈を無視し、与えられたディスク全体を 強制的に FreeBSD 用とします。

フィールド ‘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 が作成しました。

このマニュアルページの執筆者は Joerg Wunsch です。