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.

Never write it in C if you can do it in `awk';
Never do it in `awk' if `sed' can handle it;
Never use `sed' when `tr' can do the job;
Never invoke `tr' when `cat' is sufficient;
Avoid using `cat' whenever possible.
— Taylor's Laws of Programming