tail head cat sleep
QR code linking to this page

manページ  — LIBDISK

名称

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&#246;rg Wunsch です。


LIBDISK (3) March 15, 1996

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

One of the advantages of using UNIX to teach an operating systems course is the sources and documentation will easily fit into a student's briefcase.
— John Lions