libdisk(3)
NAME
Open_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, chunk_name, slice_type_name - library inter
- face to slice
and partition labels
LIBRARY
library ``libdisk''
SYNOPSIS
#include <sys/types.h> #include <libdisk.h> struct disk * Open_Disk(const char *devname); 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, daddr_t offset, daddr_t 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, daddr_t offset); daddr_t Next_Cyl_Aligned(struct disk *d, daddr_t offset); daddr_t Prev_Cyl_Aligned(struct disk *d, daddr_t offset); int Track_Aligned(struct disk *d, daddr_t offset); daddr_t Next_Track_Aligned(struct disk *d, daddr_t offset); daddr_t Prev_Track_Aligned(struct disk *d, daddr_t offset); struct chunk * Create_Chunk_DWIM(struct disk *d, struct chunk *parent, daddr_t 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); const char * chunk_name(chunk_e type); const char * slice_type_name(int type, int subtype);
DESCRIPTION
- The libdisk library provides an interface to the low-level
- disk slice and
partition labels. Most functions operate with arguments of - the types
`struct disk', or `struct chunk'. - While both types are mostly opaque to the programmer, the
- internal structure is mentioned below for the sake of completeness.
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;- };
- The only flag value by now is `DISK_ON_TRACK', meaning that
- this disk is
handled by the On-Track Disk Manager.
struct chunk {struct chunk *next;
struct chunk *part;
struct disk *disk;
daddr_t offset;
daddr_t size;
daddr_t end;
char *name;
char *oname;
chunk_e type;
int subtype;
u_long flags;
void (*private_free)(void*);
void *(*private_clone)(void*);
void *private_data;- };
- The `type' field can be one of the following values: `whole,
- unknown,
fat, freebsd, extended, part, unused'. - These are the valid `flags' values for a `struct chunk'.
CHUNK_PAST_1024 This chunk cannot be booted from- because it
extends past cylinder 1024.
- CHUNK_BSD_COMPAT This chunk is in the BSD-compati
- bility, and has
- a short name too, i.e. `wd0s4f ->
- wd0f'.
- CHUNK_ALIGN This chunk should be aligned.
- CHUNK_IS_ROOT This `part' is a rootfs, allocate
- partition
- `a'.
- CHUNK_ACTIVE This is the active slice in the
- MBR.
- CHUNK_FORCE_ALL Force a dedicated disk for FreeB
- SD, bypassing
- all BIOS geometry considerations.
- The `private_data', `private_free', and `private_clone'
- fields are for
data private to the application, and the management thereof. - If the
functions are not provided, no storage management is done, - cloning will
just copy the pointer and freeing will just forget it. - Open_Disk() will open the named disk, and return populated
- tree.
- Free_Disk() frees a tree made with Open_Disk() or
Clone_Disk
Debug_Disk() prints the content of the tree to stdout.
Set_Bios_Geom() sets the geometry the bios uses.
Delete_Chunk() frees a chunk of disk_space.
- Collapse_Disk() and Collapse_Chunk() are experimental, do
- not use.
- Create_Chunk() creates a chunk with the specified parame
- ters.
- All_FreeBSD() makes one FreeBSD chunk covering the entire
- disk; if
`force_all' is set, bypass all BIOS geometry considerations. - CheckRules() returns `char*' to warnings about broken design
- rules in
this disklayout. - Disk_Names() returns `char**' with all disk's names (wd0,
- wd1 ...). You
must free each pointer, as well as the array by hand. - Set_Boot_Mgr() sets this boot-manager for use on this disk.
- Gets written
when Write_Disk() is called. - Set_Boot_Blocks() sets the boot-blocks for use on this disk.
- Gets written when Write_Disk() is called.
- Write_Disk() writes all the MBRs, disklabels, bootblocks and
- boot managers.
- Cyl_Aligned() checks if `offset' is aligned on a cylinder
- according to
the BIOS geometry. - Next_Cyl_Aligned() rounds `offset' up to next cylinder ac
- cording to the
BIOS geometry. - Prev_Cyl_Aligned() rounds `offset' down to previous cylinder
- according to
the BIOS geometry. - Track_Aligned() checks if `offset' is aligned on a track ac
- cording to the
BIOS geometry. - Next_Track_Aligned() rounds `offset' up to next track ac
- cording to the
BIOS geometry. - Prev_Track_Aligned() rounds `offset' up to previous track
- according to
the BIOS geometry. - Create_Chunk_DWIM() creates a partition inside the given
- parent of the
given size, and returns a pointer to it. The first unused - chunk big
enough is used. - MakeDev() makes the device nodes for this chunk.
- MakeDevDisk() makes the device nodes for all chunks on this
- disk.
- ShowChunkFlags() returns a string to show flags.
- The chunk_name() function takes the enumerated chunk type
- and returns its
name. chunk_name() replaces the old external array chunk_n. - slice_type_name() returns the name strings associated with
- the specified
`type'. `subtype'. If slice_type_name() returns "unknown" - for slices it
is not familiar with.
AUTHORS
The libdisk library was written by Poul-Henning Kamp.
- This manual page was written by Jorg Wunsch.
- BSD March 15, 1996