| =============================================================================== |
| GNU libparted API |
| =============================================================================== |
| |
| |
| |
| |
| |
| |
| |
| |
| <<< This file is deprecated and being converted |
| to Doxygen in-line documentation. |
| Until this is finished, both are incomplete |
| but fully document the API together. >>> |
| |
| |
| ( scroll down to read ) |
| |
| |
| |
| |
| |
| by Andrew Clausen <clausen@gnu.org>, |
| Leslie P. Polzer <polzer@gnu.org> |
| |
| Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 |
| Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.1 |
| or any later version published by the Free Software Foundation; |
| with the no Invariant Sections, with the no Front-Cover Texts, and |
| with no Back-Cover Texts. A copy of the license is included in the |
| file, COPYING.DOC. |
| |
| |
| CONTENTS |
| -------- |
| |
| 1 Introduction |
| 2 Initialising libparted |
| 3 PedDevice |
| 4 PedDisk, PedDiskType |
| 5 PedGeometry |
| 6 PedPartition, PedPartitionType |
| 7 PedFileSystem, PedFileSystemType |
| 8 PedConstraint, PedAlignment |
| 9 PedTimer |
| 10 PedUnit |
| 11 Exceptions |
| |
| ------------------------------------------------------------------------------- |
| 1 INTRODUCTION |
| ------------------------------------------------------------------------------- |
| |
| GNU Parted is built on top of libparted, which does all of the real work. |
| libparted provides an API capable of manipulating partition tables, and |
| the filesystems on them. |
| |
| The main motivation for separating the back-end into a separate library was |
| to encourage different GNU/Linux distributions to encorporate their own |
| customized front-end into the install process. |
| |
| This documents the API -- not the implementation details of libparted. |
| Documentation that is not relevant to programs using the API are marked with |
| INTERNAL. Apart from this file, a good place to look would be |
| parted/parted.c, the front-end's source, and the TUTORIAL file (not finished |
| yet!). |
| |
| This documentation isn't as complete as it should be. Feel free to ask |
| questions, either to me personally (clausen@gnu.org), or to the mailing list |
| (bug-parted@gnu.org). |
| |
| 1.1 TERMINOLOGY |
| ------------------- |
| Some of the terminology is a bit weird, so you might want to read this. |
| |
| CONSTRAINT a set of conditions that must be satisfied, for |
| a given GEOMETRY of a PARTITION. |
| |
| DEVICE a storage device. |
| |
| DISK a storage device, with a valid partition table. |
| |
| EXCEPTION an event that needs attention. |
| |
| EXTENDED PARTITION a PRIMARY PARTITION, that may contain LOGICAL |
| PARTITIONS instead of a file system. There is at most |
| one extended partition. |
| |
| FILE SYSTEM any data that resides on a partition. For the purposes |
| for GNU Parted, this includes swap devices. |
| |
| GEOMETRY a description of a continuous region on a disk. eg, |
| partitions have a geometry. |
| |
| HIDDEN PARTITION a partition that is hidden from MS operating systems. |
| Only FAT partitions may be hidden. |
| |
| LOGICAL PARTITION like normal partitions, but they lie inside the |
| extended partition. |
| |
| PARTITION a continuous region on a disk where a file system may |
| reside. |
| |
| PRIMARY PARTITION a normal, vanilla, partition. |
| |
| PARTITION TABLE also, DISK LABEL. A description of where the |
| partitions lie, and information about those partitions. |
| For example, what type of file system resides on them. |
| The partition table is usually at the start of the |
| disk. |
| |
| TIMER a progress meter. It is an entity that keeps track |
| of time, and who to inform when something interesting |
| happens. |
| |
| 1.2 DESIGN |
| -------------- |
| libparted has a fairly object-oriented design. The most important objects are: |
| |
| PedArchitecture describes support for an "archicture", which is sort |
| of like "operating system", but could also be, |
| for example, another libparted environment, EVMS, etc. |
| PedConstraint a constraint on the geometry of a partition |
| PedDevice a storage device |
| PedDisk a device + partition table |
| PedFileSystem a filesystem, associated with a PedGeometry, NOT a |
| PedPartition. |
| PedGeometry a continious region on a device |
| PedPartition a partition (basically PedGeometry plus some attributes) |
| PedTimer a timer keeps track of progress and time |
| |
| All functions return 0 (or NULL) on failure and non-zero (or non-NULL) on |
| success. If a function fails, an exception is thrown. This may be handled by |
| either an exception handler, or the calling function (see the section on |
| exceptions). |
| |
| All objects should be considered read-only; they should only be modified by |
| calls to libparted's API. |
| |
| ------------------------------------------------------------------------------- |
| 2 INITIALISING LIBPARTED |
| ------------------------------------------------------------------------------- |
| |
| Headers for libparted can be included with: |
| |
| #include <parted/parted.h> |
| |
| Parted automatically initialises itself via an __attribute__ ((constructor)) |
| function. |
| |
| However, you might want to set the exception handler with |
| ped_exception_set_handler(). libparted does come with a default exception |
| handler, if you're feeling lazy. |
| |
| Here's a minimal example: |
| |
| #include <parted/parted.h> |
| |
| int |
| main() |
| { |
| /* automatically initialized */ |
| ped_exception_set_handler(exception_handler); /* see section 7 */ |
| return 0; |
| /* automatically cleaned up */ |
| } |
| |
| ----------------------------------------------------------------------------- |
| 5 PEDGEOMETRY |
| ----------------------------------------------------------------------------- |
| |
| 5.1 FIELDS |
| -------------- |
| |
| 5.2 FUNCTIONS |
| ----------------- |
| |
| |
| ----------------------------------------------------------------------------- |
| 6 PEDPARTITION, PEDPARTITIONTYPE |
| ----------------------------------------------------------------------------- |
| |
| interface: <parted/disk.h> |
| implementation: libparted/disk.c |
| |
| A PedPartition represents a partition (surprise!). PedPartitions have weird |
| relationships with PedDisks. Hence, many functions for manipulating partitions |
| will be called ped_disk_* - so have a look at the PedDisk documentation as well. |
| |
| Parted creates "imaginary" free space and metadata partitions. You can't |
| do any operations on these partitions (like set_geometry, {set,get}_flag, etc.) |
| Partitions that are not free space or metadata partitions are said to |
| be "active" partitions. You can use ped_partition_is_active() to check. |
| |
| 6.1 FIELDS |
| -------------- |
| |
| |
| 6.2 FUNCTIONS |
| ----------------- |
| |
| |
| ----------------------------------------------------------------------------- |
| 7 PEDFILESYSTEM, PEDFILESYSTEMTYPE |
| ----------------------------------------------------------------------------- |
| |
| |
| 7.1 FIELDS |
| -------------- |
| |
| |
| 7.2 FUNCTIONS |
| ----------------- |
| |
| |
| ----------------------------------------------------------------------------- |
| 8 PEDCONSTRAINT, PEDALIGNMENT |
| ----------------------------------------------------------------------------- |
| |
| |
| "Alignments" are restrictions on the location of a sector in the form of: |
| |
| sector = offset + X * grain_size |
| |
| For example, logical partitions on msdos disk labels usually have a constraint |
| with offset = 63 and grain_size = 16065 (Long story!). An important |
| (and non-obvious!) property of alignment restrictions is they are closed |
| under intersection, i.e. if you take two constraints, like (offset, grain_size) |
| = (63, 16065) and (0, 4), then either: |
| * there are no valid solutions |
| * all solutions can be expressed in the form of (offset + X * grain_size) |
| In the example, the intersection of the constraint is (16128, 64260). |
| |
| For more information on the maths, see the source -- there's a large comment |
| containing proofs above ped_alignment_intersect() in libparted/natmath.c |
| |
| The restrictions on the location of the start and end are in the form of |
| PedGeometry objects -- continous regions in which the start and end must lie. |
| Obviously, these restrictions are also closed under intersection. |
| |
| The other restriction -- the minimum size -- is also closed under intersection. |
| (The intersection of 2 minimum size restrictions is the maximum of the |
| 2 values) |
| |
| FIXME: mention ped_alignment_any |
| |
| 8.2 FUNCTIONS |
| ----------------- |
| |
| |
| |
| ----------------------------------------------------------------------------- |
| 9 PEDTIMER |
| ----------------------------------------------------------------------------- |
| |
| 9.1 FIELDS |
| -------------- |
| |
| typedef void PedTimerHandler (PedTimer* timer, void* context); |
| |
| |
| 9.2 FUNCTIONS |
| ----------------- |
| |
| |
| ----------------------------------------------------------------------------- |
| 10 PEDUNIT |
| ----------------------------------------------------------------------------- |
| |
| |
| 10.1 CONSTANTS |
| ----------------- |
| |
| 10.2 FUNCTIONS |
| ----------------- |
| |
| |
| ----------------------------------------------------------------------------- |
| 11 EXCEPTIONS |
| ----------------------------------------------------------------------------- |
| |
| 11.1 FIELDS |
| -------------- |
| |
| |