scan_ffs
—
find UFS/FFS partitions on a disk
scan_ffs |
[-lsv ] [-b
begin] [-e
end] device |
This is the life-saver of typos. If you have ever been working too long, and
just happened to type 'disklabel -rw da0 floppy', instead of 'disklabel -rw
fd0 floppy', you know what I am talking about.
This little program will take a raw disk device (which you might
have to create) that covers the whole disk, and finds all probable UFS/FFS
partitions on the disk. It has various options to make it go faster, and to
print out information to help in the reconstruction of the disklabel.
The options are as follows:
-l
- This will make
scan_ffs
print out a string looking
much like the input to disklabel. With a little massaging, this output can
usually be used in the disklabel edit.
-s
- This tells
scan_ffs
to be smart about skipping
partitions (when it thinks it found a valid one). By not scanning
partitions for superblocks, the program completes a couple of orders of
magnitude faster. However, sometimes being smart is too good for its own
good, especially if your disk has had a different layout previously, or
contains other non-UFS/FFS filesystems.
-v
- Tell
scan_ffs
to be verbose about what it is
doing, and what it has found.
-b
begin
- Tell
scan_ffs
where to begin searching for
filesystems. This makes it easier to skip swap partitions, or other large
non-UFS/FFS partitions.
-e
end
- Ditto for telling
scan_ffs
where to stop.
- device
- This specifies which device
scan_ffs
should use to
scan for filesystems. Usually this device should cover the whole disk in
question.
The basic operation of this program is as follows:
- Panic. You usually do so anyways, so you might as well get it over with.
Just don't do anything stupid. Panic away from your machine. Then relax,
and see if the steps below won't help you out.
- Try to find your old disklabel by any other means possible. This includes
printouts, backups, screendumps, and whatever other method you can think
of. The more information you have, the better your chances are in
recovering the disklabel of the disk.
- Create a disklabel on the affected disk, which covers the whole disk, and
has at least one partition which covers the whole disk. As the
“c” partition usually covers the whole disk anyways, this
sounds like a good place to start.
- Run
scan_ffs
over this partition. If you have any
information about the disklabel which used to exist on the disk, keep that
in mind while scan_ffs
spews out its things.
- Use
disklabel(8)
to reconstruct the disklabel on the affected disk, using all the
information you gathered from
scan_ffs
and other
sources.
Last but certainly not least, we wish you good luck. The UFS/FFS
filesystems are pretty sturdy. I've seen them reconstructed after some
pretty weird and awesome fumbles. If you can't have backups, at least have
funky tools to help you out of a jam when they happen.
The scan_ffs
utility first appeared in OpenBSD 2.3 and
was ported to FreeBSD by Robert Watson. UFS2 Support
was added by Michael Ranner.
It is not perfect, and could do a lot more things with date/time information in
the superblocks it finds, but this program has saved more than one butt, more
than once.