=============================================================================== 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 , Leslie P. Polzer 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 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 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: 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 --------------