スポンサーリンク

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>
#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, 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;

};
関数によるフラグ値は ‘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_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 が作成しました。

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

FreeBSD 10.0 March 15, 1996 FreeBSD 10.0

スポンサーリンク