gpart - Guess PC-type hard disk partitions
SYNOPSIS
gpart [options] device
Options: [-b <backup
MBR>][-C c,h,s][-c][-d][-E][-e][-f]
[-g][-h][-i][-K <last-sector>][-k
<# of sectors>] [-L] [-l
<log file>][-n
<increment>] [-q][-s <sector-size>] [-t
<module-name>][-V][-v]
[-W <device>][-w <module-name,
weight>]
DESCRIPTION
gpart tries to guess
which partitions are on a hard disk.
If the primary partition table
has been lost, overwritten
or destroyed the
partitions still exist on the disk but
the operating system cannot
access them.
gpart ignores the primary partition
table and scans the
disk (or disk image, file)
sector after sector for several
filesystem/partition
types. It does so by "asking"
filesystem recognition
modules if they think a given
sequence of sectors resembles
the beginning of a filesys
tem or partition type.
Currently the following filesystem
types are known to gpart (listed
by module names) :
beos BeOS filesystem
type.
bsddl FreeBSD/NetBSD/386BSD
disklabel sub-partitioning
scheme used on Intel platforms.
ext2 Linux second
extended filesystem.
fat MS-DOS
FAT12/16/32 "filesystems".
hpfs IBM OS/2 High
Performance filesystem.
hmlvm Linux LVM
physical volumes (LVM by Heinz Mauelsha
gen).
lswap Linux swap partitions
(versions 0 and 1).
minix The Minix operating
system filesystem type.
ntfs MS Windows
NT filesystem. The recognition of an
NTFS partition is quite weak because only little is
known about its internals.
qnx4 QNX 4.x
filesystem.
rfs The Reiser
filesystem (version 3.5.X, X > 11).
s86dl Sun Solaris on
Intel platforms uses a sub-parti
tioning scheme on PC hard disks similar to the BSD
disklabels.
xfs Silicon Graphic's
journalling filesystem for Linux.
More filesystem guessing modules
can be added at runtime
(see the -t option).
Please consult the gpart README file
for detailed explanations
on how to create guessing mod
ules. All modules
are accompanied by a guessing weight
factor which denotes how "educated"
their guesses are com
pared to other
modules. This weight can be changed if a
certain module keeps on mis-identifying
a partition.
Naturally only partitions which
have been formatted in
some way can
be recognized. If the type of a partition
entry in the primary partition
table is changed from x to
y while the filesystem is
still of type x, gpart will also
still guess a type x.
No checks are performed
whether a found filesystem is
clean or even consistent/mountable,
so it is quite possi
ble that gpart may identify
partitions which existed prior
to the current partitioning
scheme of the disk. Especially
on large disks old file system
headers/superblocks may be
present a long
time until they are finally overwritten
with user data.
It should be stressed that
gpart does a very heuristic
job, never believe
its output without any plausability
checks. It can be easily right
in its guesswork but it can
also be terribly wrong. You
have been warned.
After having found a list of
possible partition types, the
list is checked for consistency.
For example, a partition
which overlaps
with the previous one will be discarded.
All remaining partitions are
labelled with one of the fol
lowing attributes:
"primary", "logical", "orphaned" or
"invalid".
A partition labelled "orphaned"
is a logical partition
which seems ok but is
missed in the chain of logical par
titions. This may occur if
a logical partition is deleted
from the extended partition
table without overwriting the
actual disk space.
An "invalid" partition is
one that cannot be accepted
because of various reasons.
If a consistent primary parti
tion table was created in
this process it is printed and
can be written to a file or
device.
EXTENDED PARTITIONS
If the disk/file to be examined
consists of primary parti
tions only, gpart has quite
a good chance to identify
them. Extended partitions
on the other hand can result in
a lot of problems.
Extended partitions are
realized as a linked list of
extended partition tables,
each of which include an entry
pointing to a logical partition.
The size of an extended
partition depends
on where the last logical partition
ends. This means that
extended partitions may include
"holes", unallocated
disk space which should only be
assigned to logical, not primary
partitions.
gpart tries to do its best
to check a found chain of logi
cal partitions but there
are very many possible points of
failure. If "good" fdisk
programs are used to create
extended partitions,
the resulting tables consist of a
zeroed boot record and the
four partition entries of which
at least two should
be marked unused. Unfortunately e.g.
the fdisk program shipped
with Windows NT does not seem to
zero out the
boot record area so gpart has to be overly
tolerant in recognizing extended
partition tables. This
tolerance may result in quite
stupid guesses.
DISK TRANSFERS
If you want to
investigate hard disks from other systems
you should note down the geometry
(number of cylinders,
heads per cylinder
and sectors per head) used for that
disk, and tell gpart about
this geometry.
Investigating disks from machines
with a different endian
ness than the scanning one
has not been tested at all, and
is currently not recommended.
LARGE DISKS
gpart relies on the OS reporting
the correct disk geome
try. Unfortunately sometimes
the OS may report a geometry
smaller the the actual one
(e.g. disks with more than 1024
or 16384 cylinder).
gpart checks if guessed
partitions extend beyond the disk
size and marks those "invalid",
but may be mistaken in
case the disk size is
calculated from an incorrect geome
try. For instance if a disk
with the geometry 1028/255/63
should be scanned,
and the OS reports 1024/255/63 gpart
should be called like
gpart -C 1028,255,63 <other options> <device>
PRECAUTIONS
gpart may be of some help when
the primary partition table
was lost or
destroyed but it can under no circumstances
replace proper disk/partition
table backups. To save the
master boot record
(MBR) including the primary partition
table to a file type
dd if=/dev/hda of=mbr bs=512 count=1
exchanging /dev/hda with the
block device name of the disk
in question. This should be
done for all disks in the sys-
tem. To restore the primary
partition table without over
writing the MBR type
dd if=mbr of=/dev/hda bs=1 count=64
skip=446
seek=446
Warning: make sure that all
parameters are typed as shown
and that the disk device
is correct. Failing to do so may
result in severe filesystem
corruption. The saved file
should be stored in a safe
place like a floppy disk.
OPTIONS
-b backupfile
If the guessed primary partition table seems con
sistent and should be written (see the -W option)
backup the current MBR into the specified file.
-C c,h,s
Set the disk geometry (cylinders, heads, sectors)
for the scan. This is useful if a disk should be
scanned which was partitioned using a different
geometry, if the device is a disk-image or if the
disk geometry cannot be retrieved through the PCs
BIOS. No spaces are allowed between the numbers,
unless all three are enclosed in quotes.
-c
Check/compare mode (implies the -q quiet option).
After the scan is done, the resulting primary par
tition table is compared to the existing one. The
return code of gpart then contains the number of
differences (0 if they are identical except for the
boot/active flag which cannot be guessed). This
option has no effect if -d is given on the command
line.
-d
Do not start the guessing loop. Useful if the par
tition table should be printed (in combination with
the -v option) without actually scanning for parti
tions.
-E
Do not try to identify extended partition tables.
If there are extended partitions on the
given
device gpart will most certainly complain about too
many primary partitions because there can be only
four primary partitions. Existing logical parti
tions will be listed as primary ones.
-e
Do not skip disk read errors. If this option is
given, and short disk reads or general disk read
errors (EIO) are encountered, gpart will exit. If
not given, the program tries to continue.
-f
Full scan. When a possible partition is found,
gpart normally skips all sectors this entry seems
to occupy and continues the scan from the end of
the last possible partition. The disk scan can take
quite a while if this option is given, be patient.
-g
Do not try to get the disk geometry from the OS. If
the device is no block or character device but a
plain file this option should be supplied. If the
file to be scanned is an image of a disk, the geom
etry can be given by the -C option.
-h
Show some help.
-i
Run interactively. Each time a possible partition
is identified the user is asked for confirmation.
-K last sector
Scan only up to the given sector or the end of the
file or device whichever comes first.
-k sectors
Skip given number of sectors before the
scan.
Potentially useful if a partition is looked for at
the end of a large disk.
-L
List available filesystem/partition type modules
and their weights, then exit.
-l logfile
Log output to the given file (even if -q was sup
plied).
-n increment
Scan increment: number of sectors or "s" for single
sector increment, "h" for an increment of sectors
per head (depends on geometry) or "c" for cylinder
increment.
The increment also influences the condition where
extended partition tables are searched: if the scan
increment is "s" (i.e. 1) extended partition tables
are required to be on a head boundary, otherwise
they must be on a cylinder boundary.
If the disk geometry could not be retrieved and no
geometry was given on the command line, the default
increment is one sector.
-q
Quiet/no output mode. However if a logfile
was
specified (see -l option) all output is written to
that file. This option overrides the -i interactive
mode.
-s sector size
Preset medium sector size. gpart tries to find out
the sector size but may fail in doing so. Probed
sector sizes are 2^i, i=9..14 (512 to 16384 bytes).
The default medium sector size is 512 bytes.
-t module name
Plug in another guessing module. The module to be
dynamically linked in must be a shared object file
named "gm_<modname>.so".
-V
Show version number.
-v
Be verbose. This option can be given more than once
resulting in quite a lot of information.
-W device
Write partition table. If a consistent primary par
tition table has been guessed it can be written to
the specified file or device. The supplied device
can be the same as the scanned one.
Additionally the guessed partition entries can be
edited. No checks are performed on the entered val
ues, thus the resulting table is allowed
to be
highly inconsistent. Please beware.
Warning: The guessed partition table should
be
checked very carefully before writing it back. You
can always write the guessed partition table into a
plain file and write this into sector 0 using dd(1)
(see section PRECAUTIONS above).
-w module name,weight
Put the given module at the head of the module
chain and assign a new weight to that module. All
modules are given an initial weight of 1.0. Again
no spaces are allowed.
Default settings are "-n h".
EXAMPLES
- To scan the
first IDE hard disk under Linux using
default settings type
gpart /dev/hda
- To print the primary partition
table of the third IDE
drive without starting the
scan loop in FreeBSD type
gpart -vvd /dev/wd2
- If lilo(8) was installed
in the master boot record (MBR)
of a hard disk it saves the
contents of the first sector
in a file
called /boot/boot.<major/minor>. To list the
partitions contained in such
a file type e.g.
gpart -vdg /boot/boot.0300
If the partition table
contains an extended partition,
gpart will complain
about invalid extended partition
tables because the extended
entry points to sectors not
within that file.
- Usually the first primary
partition starts on the second
head. If gpart cannot identify
the first partition prop
erly this may not be the case.
gpart can be told to start
the scan directly from sector
one of the disk, using the
sector-wise scan mode:
gpart -k 1 -n s /dev/hdb
- Suppose gpart
identifies an NTFS partition as FAT on a
certain disk. In this situation
the "ntfs" module should
be made the first
module to be probed and given a weight
higher than the usual weight
of 1.0:
gpart -w ntfs,1.5 /dev/hdb
To list the available modules
and their weights use the -L
option.
- After having
checked the output of gpart at least
thrice, the primary partition
table can be written back to
the device this way:
gpart -W /dev/sdc /dev/sdc
This of course
may be extremely dangerous to your health
and social security, so beware.
- A hard disk with 63 sectors
per head is scanned in steps
of 63 sectors.
To perform the scan on every second head
while skipping the first 1008
sectors type
gpart -k 1008 -n 126 /dev/sda
- If you want to see how easily
gpart can be mislead, and
how many probable
partition starts are on a disk, search
the whole disk really sector
by sector, writing all output
to a logfile:
gpart -vvfn s -ql /tmp/gpart.log /dev/sd2 &
Usually gpart will
not be able to produce an educated
guess of the primary partition
table in this mode. The
logfile however
may contain enough hints to manually
reconstruct the partition
table.
FILES
/dev/*
Hard disk block devices. The naming scheme of hard
disk block devices is OS dependent, consult your
system manuals for more information.
DIAGNOSTICS
There are many error message
types, all of them should be
self-explanatory. Complain
if they are not.
BUGS
gpart is beta software, so
expect buggy behaviour.
- gpart only
accepts extended partition links with one
logical partition. There may
be fdisk variants out there
creating links with
up to three logical partition entries
but these are not accepted.
TO DO
- Support big-endian architectures.
- Test on 64-bit architectures.
- Look for boot manager partitions
(e.g. OS/2 BM).
- Think about reconstructing
logical partition chains.
AUTHOR
Please send bug reports, suggestions,
comments etc. to
Michail Brzitwa <michail@brzitwa.de>
SEE ALSO
fdisk(8).
|