home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC-Online 1999 November
/
PCOnline_11_1999.iso
/
filesbbs
/
OS2
/
DFSEE305.ZIP
/
DFS.DOC
< prev
next >
Wrap
Text File
|
1999-08-30
|
134KB
|
2,843 lines
Display File Systems; version 3.05 30-08-99-99 (c) 1994-1999; Jan van Wijk
═════════════════════════[ www.fsys.demon.nl ]══════════════════════════════
CONTENTS (pagenumbers based on 80 line pages)
---------------------------------------------
Introduction, purpose of the program 1
Status of the program and change history 2
Terminology used 3
Summary of commands 5
Command reference, general DFS commands 7
Command reference, FDISK specific commands 24
Command reference, FAT specific commands 31
Command reference, NTFS specific commands 33
Command reference, HPFS specific commands 35
Diagram of an example HPFS structure 42
Examples of DFS usage 43
Known limitations 47
Considered improvements 48
HINT: When using DFSee to create a logfile, DO NOT USE ">" REDIRECTION, use
the DFSee "log filename" command instead. This will prevent littering
the logfile with ANSI control-codes (See DFSQUICK.BAT for an example)
When browsing an LVM (Warp server for e-bussines) system, set the
screen-width to over 100 characters when possible. This will allow
complete display of the volume + partition-names in the 'part' table
Introduction, purpose of the program
------------------------------------
The DFSee program is a disk and filesystem browser with an emphasis on the
HPFS and FAT filesystems, disk partitioning and some NTFS.
It will support different file-systems sometime in the future.
The program has been built while studying the HPFS filesystem.
It's main purpose is getting to understand the file-system as it resides
on the disk itself, in the data-structures laid down in disk-sectors.
Over time, additional logic was implemented to allow analysis of all
sorts of disk problems on HPFS volumes.
The tool has been used a few times over the past years to analyse some
real-life disk problems in a large systems-integration project.
Also it has proven very usefull in teaching others the internals of HPFS
Most of my knowledge of the HPFS file-system is based on the excellent
lectures "HPFS Internals" at the 1994, 95 and 96 ColoradOS/2 conferences by
Doug Azzarito and on peeking arround on a lot of HPFS volumes using DFS.
Further improvements will probably be in more advanced recovery commands
and other filesystems like NTFS and EXT2 and in porting to other platforms.
The standard distribution, DFSEExxx.ZIP contains executables for OS/2 Warp
(32-bit), 16-bit DOS and Windows-NT.
Availability
------------
1) My Homepage: http://www.fsys.demon.nl always the most recent DFSee!
2) USA mirror: http://www.infobear.com search for "DFSEE"
3) HOBBES (WWW): http://hobbes.nmsu.edu search for "DFSEE"
4) Several other WEB and FTP sites, bulletin boards (often outdated!)
Status of the program
---------------------
This version of the program is free for anyone to use, it was written
in my own time using my own equipment. However, I do appreciate feedback.
Further development depends on my own needs and feedback I receive from
other users, al work has to be done on spare time...
Suggestions and other comments regarding DFSee and filesystems are welcome.
If you have a disk-related problem, feel free to contact me, I cannot
guarantee prompt or continuous attention bu I will do the best I can ...
You can reach me through the Internet: dfsee@fsys.demon.nl
Change History
--------------
1.00 27-11-94 DHPFS initial version, hex dump super+spare blocks
1.39 20-07-95 32-bit port; Sector Lookup table; bug-fixes
1.52 13-09-95 new '/' cmd shortcut; First released version! <== BBS
1.62 13-10-95 RUN cmd runs REXX; Added Free-space and inconsistency report
1.64 16-10-95 Cleanup for delivery on ColoradOS/2 CDROM
1.70 20-12-96 Update ColoradOS/2, DASD limits; REQUESTABLE (OS2FISYS forum)
1.87 19-01-97 Fixed MBR/EBR walk; multiple cmds using #, BM-labels in part
1.91 21-01-97 New fixroot, fixcp and saveto commands for recovery actions
2.00 03-02-97 Removable media (NEWDASD); (part) D: cmd; invisible primary
2.06 16-03-97 Updated ACL support on HPFS386; Scan badsectors
2.12 06-04-97 Added logical volume support using "DASD" type access
2.20 19-05-97 Win NT beta version; Search speedup; prio command; cleanup
2.24 10-06-97 Added Img and Sim commands; date/time on dirblocks;
2.25 15-06-97 Added Wrim command; Improved lock implementation (nested)
2.28 21-06-97 Added autobase command for HPFS (find HPFS partition start)
2.30 06-07-97 Improved 'find' syntax and functionality; Undelete support
2.32 20-07-97 Reporting & ALBLK fixes to saveto; new "ca" cmd CheckAlloc
2.35 18-08-97 Path info in Fnode display and "list" output; MEM cmd
2.37 24-08-97 Path display on find Fnode; Wildcard select on list +f
2.40 06-09-97 import/export of LSN lists; getbs/fixbs badsector mgmt
2.41 12-10-97 Multiple file UNDELETE with delfind/delshow/delsave cmds
2.42 18-10-97 Support for EA's in "saveto" and delsave cmds
2.43 28-10-97 Support for undelete of directories including EA's
2.47 11-11-97 Updated SLT error display; new check cmd (chkdsk); +/- cmd
2.50 24-11-97 HPFS checksum management; cs, edit and write cmd
2.52 07-12-97 check spare/super; BPB display; Specific FAT & NTFS commands
2.54 28-12-97 More FAT commands; generic More ...; fix DELFIND bug
2.55 25-01-98 DOS version; diskgeo cmd; More write capabilities; bugfixes
2.57 15-02-98 Name DFSee; VFAT Details; FAT Os2Ea display; "find" cleanup
2.58 22-02-98 Fixed More... bugs; Fixed FAT EA & label bug; show EA details
2.60 08-03-98 Single snlist; recover/saveto; dirfind, wipe; color in DFSNT
2.61 29-03-98 saveto xxx.DIR orphan naming; DispHex update; displ NTFS-MFT
2.63 19-04-98 Fixed DFSDOS WRIM and IM commands (file I/O); Fix "FS xxxx"
2.64 04-05-98 Small bug-fixes + support for named-pipe to LPT on sim/wrim
2.65 10-05-98 Fixed 'f* * xxx' bug + new % speed-up option; FAT32 support
2.67 04-06-98 Added optional LZW-compression on SIM and WRIM commands
2.70 28-07-98 Fixed date-time display for HPFS (bug was OS/2 only)
2.72 30-07-98 New $ option to 'part' for size-info table
2.75 21-10-98 No default SLT generation on "part", "vol", "im" and "fs"
2.77 17-11-98 Added NTFS runlist display; Fixed trap on HPFS autobase cmd
2.78 22-11-98 Added HPFS bootsector creation; fixed WIPE trap, DFSDOS WRIM
2.79 29-11-98 NTFS fixups & directory display; FAT dir bug; FreeSpace bug
Fixed some DFSDOS geo-bugs, added geometry to part display
2.80 13-12-98 DOS Cyl count fix; TZDFSEE dates; NTFS RunList; list +d / +c
2.81 16-12-98 Allow "diskgeo" for images & non-alpha chars in *.img name
fixed display of 1-sector HPFS bootsector .IMG file
2.82 01-01-99 Set exit RC; bootrec Cyl size; HPFS auto CPinfo; INT13 ext.
Physical Geo in DFSDOS In13ext; show limits with 'base'
NTFS fixboot cmd; part-table display fix; BeOS-FS recognition
2.83 12-01-99 Extended type 0f as extended; NTFS display MftSize & DirSize
Part * and part $* display; fixed bootsector display trap
2.84 24-01-99 Calculated CHS warnings/info; FreeSpace info; list +g
fixext cmd fixes 0f-type extended partitions back to 0x05
setptype cmd changes type of any partition to any value
2.85 25-01-99 NT admin warning; Small FAT bugfix; TrackZero freespace
2.86 07-02-99 Fixed WRIM doc; MAP command; TRANS command; small fixes
2.87 14-02-99 minor MAP display updates; No auto-read diskinfo
2.88 15-02-99 Final touch on MAP display; DFSBW/DFSQUICK.bat more generic
2.89 16-02-99 Fix Fnode-display for huge 0-size file; DFSDOS ANSI detect
2.90 25-03-99 FDISK delete; newmbr; settype; setaccess; startable; create
plist; dos2os; cleanup; setboot
2.91 28-03-99 New NTFS MIR cmd; .NNN, BM-name and cleanup fixes; TYPE cmd
2.92 31-03-99 Added some more system-types (TYPE); minor fixes DOS2OS
2.93 07-04-99 Reboot internal for DOS/OS2, DFSNTX.EXE for NT; geo at start
2.94 20-04-99 LVM and minor JFS display updates; plist LVM + plist WALK
2.96 11-05-99 Minor fixes in LVM display, find and delfind commands
2.99 28-06-99 More minor fixes; introduction of text-based windowing
3.00ß 07-07-99 Small but significant fixes for text-based windowing
3.00Σ 09-07-99 New 'bsfind' command to find bootsectors quickly
3.00 10-07-99 win/nowin commands and LOGO text; dirfind cmd fixed
3.01 25-07-99 Windowing enhancements; DFSDOS fixes; More LVM support
3.03 04-08-99 DFSDOS Ext-Int13 fix; ANSI colors cleanup; display sizes
3.04 15-08-99 Aurora GEO; display speedup; UNDELETE speedup + enhancements
NTFS improved MFT display and translation functions
3.05 30-08-99 NTFS MFT allocation update; find deleted MFT records
Terminology used
----------------
Sector 512 bytes of data (although other sizes exist!)
This is the smallest amount of data manipulated by the
disk subsystems and is also the basic allocation-unit
for the HPFS file-system
CHS Cylinder Head Sector (addressing)
This is the classical way of addressing physical sectors
on a disk. It is used in the PC's BIOS, in partition tables
and in low-level disk-IO API's (IOCTL, INT-13).
In most implementations the addressing ranges are limitted
causing all sorts of problems with large disks/partitions.
INT-13 DOS Interrupt-13, the classical way to interface to
physical disks in DOS. Limitted by design to 1024 cylinders.
(DFSDOS) Maximum disksize, when using BIOS disk-translation like LBA
is just below 8Gb (1024 cylinders, 255 heads, 64 sectors)
Ext-Int-13 Extended INT-13, a new BIOS interface that breaks the 1024
cylinder limit. Implemented on recent (EIDE/ATA) BIOS'es
(DFSDOS) and some operating system drivers (like Win9x Dosbox)
Due to several problems with different implementations,
DFSee will recognize the existence, but only use Ext-Int-13
on disks really larger than the limit (1024 cylinders)
PSN Physical Sector Number
This is the zero-based, unsigned-LONG, number for a
sector on a physical disk. Addressing on a disk using
PSN's is often refered to as Relative Block Addressing
(RBA) or Logical Block Addressing (LBA)
LSN Logical Sector Number
This is the zero-based, unsigned-LONG, number for a
sector on a logical partition. The partition can be seen
as a linear sequence of sectors.
Note: when accessing a whole disk, the LSN equals the PSN
SLT Sector/Cluster Lookup Table
An array of information about sectors or groups of sectors,
containing the type of the sector(s) and the LSN of a
directly related sector (usualy an Fnode).
It is currently implemented for HPFS only.
Cluster A (small) group of adjecent sectors that are handled by the
operating system as one allocation-unit.
It is used on FAT filesystems to allow large partitions at
the cost of more wasted "slack" space, and on NTFS to balance
performance, slack-space etc.
HPFS does not use sector-clustering (or a cluster-size of 1!)
DFS will try to account for clustering where needed, for
example in size calculations and where sector/cluster pointers
are used in the file-system internal structures.
Partition An area on a physical disk that holds a single logical
file-system like FAT, HPFS, Boot-manager, NTFS etc.
There is an index to find partitions in the form of a
set of partition-tables in the MBR/EBR chain.
MBR Master Boot Record
The first sector on the physical disk, located at PSN 0 =
Cylinder 0, Head 0, Sector 1
It contains the initial boot code called from the BIOS and
the main partition table that holds the primary partitions
and the start of the chain of extended boot records (EBR).
EBR Extended Boot Record
It contains no boot code but only a partition table that
holds the location of a single logical partitions.
It usualy is located on the cylinder just before the actual
logical partition itself, at Head 0, Sector 1.
Each EBR will also point to the next EBR if more logical
partitions exist on the same disk.
Volume A logical volume as seen by the active operating system,
with a logical drive-letter associated to it.
It can be either a hard-disk partition with a filesystem
recognized and mounted by the operating system, or some
other storage-medium like floppy disk or CD-Rom.
Note: Network drives or other "virtual" file-systems can also
be refered to as volumes. However, DFSee will not be able
to access them because such devices usualy cannot be
accessed using "open volume" (DASD) methods.
LVM Logical Volume Manager, an 'FDISK' like program plus related
operating system drivers on OS/2 Warp Server for e-bussines.
LVM allows more flexible naming and usage of partitions and
drive-letters, including joining multiple partitions on
more than one disk into a single volume.
DFSee respects the drive-letters as assigned with LVM and has
special display options like the 'PLIST LVM' command in FDISK
mode. Also the 'part' display will show volume- and partition
names as well. (TIP: use a display-size wider than 80 columns)
Shortname The leading part of a filename, as contained in an HPFS fnode
and usefull for undelete. The maximum length is 15 characters
LsnInfo A value combining an LSN and a (small) informational value in
a single 32-bit number. It can be kept in the sector-list and
the sector lookup table, most operations will recognize and
handle it correctly.
On example of usage is the directory-sector LSN plus the index
of a directory-entry for (V)FAT directories.
LsnInfo 78000345 combines LSN 00000345 with index 7 and a
single bit to mark it as an LsnInfo value (flag 0x08000000)
So this points to the 8th directory entry in the directory
sector at LSN 0345. (entry-numbers start counting at 0 :-)
Sector list A list of sector numbers (LSN) or LsnInfo combination-values
that can be manipulated as a whole with several commands like
export, import, getbs, fixbs, dirfind, delfind, delsave etc.
Summary of commands
-------------------
The user-interface has a command entry-field with history buffer so
previous commands can be recalled, and a large scroll-buffer for output.
Output can also be copied to a file for later analysis.
The classic user-interface can be used as well, start the program with
the keyword 'nowin' as the first parameter, like 'DFS nowin'
The commands are single words or (hexadecimal) numbers.
Most commands have one or more parameters of wich some are optional.
DFSee keeps track of the current- and some other usefull SN's so they
can be referenced faster, without having to type them in. They are:
Name Cmd Description
---- --- -----------
up 'u' up in hierarchy
down Enter down in hierarchy
this 't' this (current)
xtra 'x' Extra, alternative
You can display and analyse either a physical disk, a partition or a volume.
A physical disk can be opened using the 'disk' command.
A disk-partition or volume needs to be opened first with the 'part' or
'vol' commands respectively. The following prompt will show some status info.
After opening an HPFS partition, using 'Enter' a few times will take you
to the superblock, root-directory, possible sub-directories upto some file.
Multiple commands can be chained if separated with a special character,
the default is '#' but this can be changed with the 'sep' command.
An overview of the available commands is given below, it can also be
referenced from within the program using the 'help' command.
-----------------------------------------------------------------------------
DFSee basic selection commands, use '??' for other generic commands
Batch-mode can be forced by adding a '!' char to the cmd as in 'FDISK!'
Any command not recognized will be passed to the operating system
The DISK, FDISK, PART and VOL commands can select a specific mode wich
makes more specific commands available, use '?' and '???' for details
hex-sector-nr = Analyse & display sector, SN using logical sector-number
? or /? = Show current FS (mode), specific commands and help info
?? = Show list of all generic commands with short description
??? = Show all recognized sector-types for current filesystem
<Enter>, u, x = Show next with <Enter>, up with 'u' or extra LSN with 'x'
DISK [dsknr] [!] = Select a physical disk and show the MBR, [!] = reset geo
FDISK [FdiskCmd] = Activate the FDISK fs (mode) and optionaly execute cmd
LOG [file] = Log (append) to 'file' (.log); (No file => stop logging)
PART [$|+|dr/nr] = Show partitions, or select one using nr or drive-letter
VOL [drive] = Show all volumes, or select one using drive-letter
q = Quit DFSee OS2: 3.05 30-08-99 (c) 1994-1999; Jan van Wijk
A list of general available commands can be shown using the '??' command:
-----------------------------------------------------------------------------
.NNN = Display numbered FS-entity marked .NNN from the sector list
BASE [sn [sl]] = Show (and set) physical base limits start and end values
BATCH [on |off] = Set batch-mode, no confirmation and locking-error reporting
BPS secsize = Force sectorsize to specified value (decimal, bytes)
BSFIND [types] = Find boot-sectors on head 0/1 sector 1 only (fast)
CD [path] = Change current directory an current drive
CS [sn] = Calculate 32-bit checksum for 'this' sector; HPFS aware
CHECK [dr/nr] = Report all detected file-system errors using SLT info
CHS c h s = Analyse & display sector, using CHS (cylinder head sector)
DELSHOW [w;t] = Show delfind list, optional wildcard and min/max threshold
DELWIPE [w;t][p] = Wipe sectors in list with pattern, wildcard [w], threshold
DIRFIND [l][dir] = Put [l] levels of directory-contents in the sector-list
DISKGEO [?|c h s]= Force specified geometry on opened physical disk, ?=adjust
DISPLAY = Show current display size
EXPORT [fn] = Export LSN's in the sector list, to file [fn]
FINDPATH path = Find and show file/directory specified by path-spec,
relative to current dir, or root if starting with '\'
FS fsys-name = Force analysis mode for filesystem 'fsys-name'
FIND[op] t [str] = Find using [op]tions, sectors of type t containing [str]
options are : * = repeat; - = backward; $ = Ign-case; @[pos] = position
HELP [*] = Show list of generic commands with short description
a,A xx [size] = ASCII-dump (half)sector, SN xx, s sectors or bytes
h,H xx [size] = Hex-dump (half)sector, SN xx, s sectors or bytes
ID [xx] = Identify 'this' or specified sector, using the SLT
IM img = Open a file with a FS-image (.img) for display & analysis
IMPORT [fn] = Import LSN's to the sector list, from file [fn]
LIST [opt] [str] = Display LSN's in the sector list, using options/string
LOCK = Lock physical disk or logical partition to avoid conflicts
MAP [disknr opt] = Display pseudo-graphical map of partitions on a disk
MEM [c|lsn] [#] = Store LSN in sector-list at loc #, or limit list-size
MORE [?|*|lines] = Set number of screen-lines, including More ... function
PRIO [lvl] = Set relative priority of the DFS main thread
PSN xx = Analyse & display sector, SN xx using physical sector-nr
RECOVER d [w;t] = Recover files from the sector-list (delfind), to dir [d],
and with optional wildcard [w] and min/max threshold [t]
SAVETO [dir][l] = Save filedata for current file to a new file in [dir]
SCAN [wr [NoId]] = Scan bad-sectors; use read/Write verify; No automatic id
SCL clsize = Force clustersize to specified value (decimal, sectors)
SCREEN [on|off] = Switch output to the screen on or off
SETANSI [on|off] = Set use of ANSI escape-sequences (colors) on or off
SIM img [f s z] = Save to FS-image, from LSN [f], size [s]; z = LZW compress
SLT [type i ln] = Display SLT for sectors of 'type' at index i, ln lines
SORT [-][unique] = Sort LSN list; [-] = descending [unique] removes duplicates
TRANS l|i|c|p xx = Translate and display value 'xx' as Lsn, I13, Chs and Psn
t [sector-type] = Display 'this' sector as Hex or specified sector-type
u [sector-type] = Display 'up' sector as Hex or specified sector-type
x [sector-type] = Display 'xtra' sector as Hex or specified sector-type
UNLOCK = Unlock physical disk or logical partition
WIPE pat [f s] = Wipe disk/vol/part area with pattern at LSN [f], size [s]
WRIM img [f s] = Write FS-image to disk-sectors start at LSN [f], size [s]
WIN [col][row] = Reset display to windowing mode, opt. resize display size
NOWIN [col][row] = Reset display to cmd-line mode, opt. resize display size
RUN macro = Run a DFS macro in a REXX file
q = Quit DFSee OS2: 3.05 30-08-99 (c) 1994-1999; Jan van Wijk
Command reference, general DFS commands
---------------------------------------
FDISK [Command] = Select FDISK mode, pass (optional) command to execute
Purpose: Make FDISK the active analysis mode and command-set
Parameters: command optional Specific FDISK command (try FDISK ??)
Output: none
Remarks: When the 'batch' mode is forced using a trailing ! on FDISK,
and a command is specified, DFSee will do an automatic quit
after completing the command. This is usefull to execute a
series of FDISK commands from a batch- or command-file.
DISK [dsknr] [!] = Select a physical disk and show the MBR, [!] = reset geo
Purpose: Select a physical disk
Parameters: dsknr optional disk nr, default is current if open or 1
! optional reset previously forced geometry
Output: Disk Geometry and default display of sector 0 (usualy MBR)
Remarks: The dfs_number variable for REXX will be set to nr-of-disks
See also: WALK command
LOCK [ign] = Lock physical disk, to allow writing to it
Purpose: Lock a physical disk
Parameters: ign optional Ignore lock failure, do not prompt
interactively for write permission
Output: none
UNLOCK = Unlock physical disk, after writing to it
Purpose: Unlock a physical disk
Parameters: none
Output: none
BPS secsize = Force sectorsize to specified value (decimal, bytes)
Purpose: Force a specific number of bytes per sector
Parameters: secsize mandatory Number of bytes per sector (decimal)
Output: none
Remarks: Should be automatically correct, special purpose usage only
SCL clsize = Force clustersize to specified value (decimal, sectors)
Purpose: Force a specific number of sectors per cluster
Parameters: clsize mandatory Number of sectors per cluster (decimal)
Output: none
Remarks: Should be automatically correct, special purpose usage only
MAP [disknr opt] = Display pseudo-graphical map of partitions on a disk
Purpose: Give an easy to interpred visual image of the disk layout
Parameters: disknr optional number of disk to diplay, default is all
opt optional options, '+' is more verbose map
Output: Some lines of drawing-characters and text representing the
disk with it's partitions. The partitions are sized according
to their real size. Freespace is also shown the same way.
The color of the areas indicate the filesystem-type.
Each area contains the most relevant textual info as well.
Remarks: Loosely modelled after the PartitionMagic display
PART [opt / drv] = Select specified partition, or show the list of partitions
Purpose: Select a disk partition for analysis
Parameters: opt/drv optional Number specifying the partition as shown
by the 'disks' or 'part' commands
or d: Drive-letter for a partition (part C:)
or $ To get a table with size information
and/or * To add info on extended partitions to table
or + To get a multi-line verbose list (incl LVM)
or ++ Extremely verbose, with additional FS info
or ! To force a new scan of physical disks
If no parameter is specified the list of
partitions will be displayed.
or !! Force new scan, and use alternative method
of drive-letter assignment (industry std).
Output: Either the list of partitions in the specified format, or the
verbose partition display for the selected partition.
Remarks: The command "d:" where d is any existing drive-letter will
be interpreted as a "part d:" command. This means that the
C: partition can be opened just by typing "C:"
The returncode (rc) will be zero for a valid partition id or
the number of partitions otherwise (usefull in REXX scripts).
An example of the list ouput in table form (default) is:
Number of disks : 2
Geometry for disk : 1 Cyl: 263 H:255 S:63 Disksize : 00407847 = 2063 Mb
Geometry for disk : 2 Cyl: 527 H:255 S:63 Disksize : 00812F4F = 4134 Mb
Id 06=F: WARNING : Not formatted or invalid bootrecord
┌──┬──┬───┬─────────────────┬────────┬────────┬───────────┬──────────┬────────┐
│id│PD│Vol│Type, description│Format │Creator │Label Info │BM-Name │ Size Mb│
├──┼──┼───┼─────────────────┼────────┼────────┼───────────┼──────────┼────────┤
│01│ 1│>--│Prim 0a Boot Mgr │BMGR │fdisk │«Merlin » │ │ 7.8│
│02│ 1│*--│Hide 16 FAT >32Mb│FAT16 │IBM 7.0│FAT_BOOT_1 │IBMDOS7 │ 125.5│
│03│ 1│*C:│Prim 06 FAT >32Mb│FAT16 │MSWIN4.0│FAT_BOOT_2 │WIN95/NT │ 360.8│
│04│ 1│ D:│Log 06 FAT >32Mb│FAT16 │MSWIN4.0│FAT_DATA │ │ 690.3│
│05│ 1│ E:│Log 07 Inst. FS │NTFS │Win NT │ │ │ 360.8│
│06│ 1│ F:│Log 07 Inst. FS │--none--│fdisk │ │ │ 7.8│
│07│ 1│*G:│Log 07 Inst. FS │HPFS │OS2 20.0│OS2_BOOT_3 │Merlin │ 509.8│
├──┼──┼───┼─────────────────┼────────┼────────┼───────────┼──────────┼────────┤
│08│ 2│ H:│Log 07 Inst. FS │HPFS │OS2 20.0│BIG_HPFS │ │ 2400.3│
│09│ 2│ I:│Log 06 FAT >32Mb│FAT16 │MSDOS5.0│MSVCPP_DFS │ │ 706.0│
│10│ 2│ --│Log 82 LinuxSwap│SWAP │fdisk │ │ │ 117.6│
│11│ 2│*--│Log 83 LinuxExt2│EXT2 │fdisk │ │Linux │ 902.1│
└──┴──┴───┴─────────────────┴────────┴────────┴───────────┴──────────┴────────┘
Number of disks = The number of disks reported by the system
Physical-Geo disk = Physical geometry for a disk using extended INT13 (DFSDOS)
Geometry for disk = Geometry for one disk, as reported by the the OS
Id nn=d: WARNING = Any informal, strange or alarming conditions on partition
Where: id = The selection-id used by DFS for this partition
PD = Physical drive number; 1..max
Vol = Drive letter, capital (or lowercase for hidden)
Prefix: '>' for active partition (BIOS bootable)
'}' active partition, not first disk
'!' active partition, bad bootsector
'*' for partitions bootable by Bootmgr
'-' bootable by Bootmgr, bad bootsector
Type, description = Type-info and hex value of the type, type-info:
Prim = Primary (active, accessible)
Hide = Hidden (primary or special)
Log = Logical volume in an extended partition
Lhid = Logical volume, currently hidden
Format = The filesystem format string found in the
bootrecord for this partition or --none--
Creator = The OEM identification string from the bootrec
of "fdisk" if no valid bootrecord is found
Label Info = The volumelabel as found in the bootrecord, or
the «BM-label» of the current Bootmgr selection
BM-Name = The name for this partition as registered in
the OS/2 boot-manager information area's
LVM Volume, Part = The full LVM volume and partition names
(replaces BM-name when LVM info present on disk)
Size Mb = The gross size of the partition in megabytes
An example of a list fragment for verbose form (FAT) is:
DFS partition Id : 3
Physical disk nr : 1 Cyl: 263 H:255 S:63 = Fixed P-Table MBR, entry:2
System Indicator : 06
Type description : FAT >32Mb
FileSyst. format : FAT16
Partition type : Primary
Part. visibility : Visible
Creator OEM-name : MSWIN4.0
Partition Label : FAT_BOOT_2
Boot capability : Bootable by OS/2 boot-manager as: WIN95/NT
Bootsec checksum : D0B8A5A4
Partition start : Cyl: 17 H: 0 S: 1 first PSN : 00042AD1 on cyl: 17
Partition end : Cyl: 62 H: 254 S: 63 last PSN : 000F717E on cyl: 62
Bootsect. offset : 00042AD1 = 273105 Dec
Partition size : 000B46AE = 361 Mb Cylinder size: 3EC1 = 8033 Kb
Cluster size : 00000010 = 8 Kb, in 16 sector(s) of 512 bytes
Free space drive : C: 156.1 Mb of 360.6 Mb on file-system: FAT
Bootsec. checksum : D0B8A5A4
Size of FAT entry : 16 Bits FAT label in Root : FAT_BOOT_2
Largest ClusterNr : 0000B453 Number of sectors : 000B46AE = 361 Mb
1st FAT start LSN : 00000001 2nd FAT start LSN : 000000B7
RootDirectory LSN : 0000016D Root-size sectors : 0000002E = 23 Kb
Rel Cluster-0 LSN : 0000017B 1st DataClust LSN : 0000019B
EA data fragments : 0 EA header sectors : 00000000 = 0 b
VOL [drv] = Show all volumes, or select one using drive-letter
Purpose: Work with logical volumes including floppies and CD-rom
Parameters: drv optional Drive-letter for the volume to open
Output: Either the list of volumes or the default display for the
first sector of the volume (usualy a boot-sector).
Remarks: Network or other "virtual" file-systems are not supported
for 'open' like 'vol X:', but they are listed, including
their network sharename. (OS/2 version only)
DISKGEO [?|c h s]= Force specified geometry on opened physical disk, ?=adjust
Purpose: Show current or force different geometry to be used for
interpreting and analysing the current physical disk
Parameters: none Display the geometry currently in use, including
possible overrides by previous 'diskgeo' commands
c h s Overrule current geometry by the values specified
for cylinders, heads and sectors.
The value '?' can be specified for the cylinder value
and will cause a re-calculation for the cylinder count
based on heads/sectors and the size of the disk at
the time it was first selected.
Output: The resulting geometry for the physical disk currently open
Remarks: You can keep the current value for one of the items by
specifying zero (0) or nothing for the override
Example: 'diskgeo 0 255' will set the number of heads to 255
'diskgeo ? . 32' will set the number of sectors to 32 and
calculate the right number of cylinders
for that geometry and disksize
CHECK [dr/nr] = Report all detected file-system errors using SLT info
Purpose: Check file-system integrity using SLT info (chkdsk function)
Parameters: drive-letter or partition-nr to check, default opened partition
Output: Verbose list of all SLT entries that have an error flagged
This will include path+filename when available and textual
explanation of the error(s)
Remarks: The reported arrors are the same as listed with the SLT command
'check' is an alias for "SLT * 0 * +fffd"
The SLT will be rebuild on each invocation of the "check" cmd.
IM img = Open a file with a FS-image (.img) for analysis
Purpose: Work with a saved binary image
Parameters: img Filename for the image, default extention is '.img'
Output: The default display for the first sector of the image
Remarks: File-system type is derived from first (boot) sector
SIM img [f s z] = Save to FS-image, from LSN [f], size [s]; z = LZW compress
Purpose: Save specified sectors as a binary image for use with 'IM'
Parameters: img Filename for the image, default extention is '.img'
When prefixed with [lpt.exe], the data is actualy
written to named pipe \pipe\xxx.img to LPT.EXE wich
will be started in a separate session automatically
This allows saving the image on a different PC that
is attached using a parallel (laplink) cable.
f Start LSN for save, default is 0
s Size of the saved image in sectors, default is 256
'$' can be used to save all sectors of the disk/volume
z Option to enable LZW compression on the image-file
Output: none
Remarks: When '.' is specified for s, sector 'f' upto 'this' is saved
When '.' is specified for f, the start-sector is 'this'
When '.' is specified for both, only the 'this' sector is saved
WRIM img [f s] = Write FS-image to disk-sectors start at LSN [f], size [s]
Purpose: Write sectors back from an image to opened partition or volume
Parameters: img Filename for the image, default extention is '.img'
When prefixed with [lpt.exe], the data is actualy
read from named pipe \pipe\xxx.img from LPT.EXE wich
will be started in a separate session automatically
This allows retrieving the image from a different PC
that is attached using a parallel (laplink) cable.
f Start LSN for write, default is 0
s Size of the saved image in sectors, default is 1
'$' can be used to write all sectors to the disk/volume
Output: none
Remarks: '.' can be specified for the f and s parameters, see 'sim' cmd
LZW compressed image-files created by SIM will be recognized
and automatically un-compressed on the fly.
WIPE pat [f s] = Wipe disk/vol/part area with pattern at LSN [f], size [s]
Purpose: This will wipe an entire volume or disk, or a specified part
of it, using the specified pattern.
Parameters: pat The pattern to use for wiping, it can be any lenth
from a single byte upto 256 bytes.
default: DfsWiped
It can be specified as a mix of ASCII and HEX.
The starting mode is ASCII, switching to
HEX and back is done with the ' character.
Note that there can be NO SPACES in this definition,
if you need spaces, use the hex '20' value instead.
f First sector-number to be wiped, hexadecimal
. = current sector 'this'
default: 0
s Size to wipe, in sectors, hexadecimal
. = upto current sector 'this'
$ = upto end of current volume/disk
default: $
Output: Progress indicator with one dot for each wiped megabyte
Remarks: A disk, partition or volume needs to be opened first.
You can easily call DFS (or DFSDOS) from the commandline
specifying a 'wipe' for the entire volume or disk.
Example: wipe '00' 0 1
set bootsector to zeroes, clearing boot-code and, when the
current object is a complete disk, the partition-table
wipe
wipe entire vol/disk/partition with the default pattern
dfsdos part d n#wipe#q
From the dos commandline, select partition D: and wipe
it completely using the default pattern
dfsdos disk 1#wipe 'ff'#q
From the dos commandline, select physical disk 1 and wipe
it completely using hexadecimal pattern 0xff
dfs disk 2#wipe DFS'20'was'20'here 0 1#q
From the OS/2 commandline, select physical disk 2 and wipe
the master-boot record with the string "DFS was here"
Note the use of '20' to get the parameter completely
specified without using the space-character.
FS fs-name = Force analysis using specified file-system knowledge
Purpose: Use specific FS knowledge if the default is not correct
Parameters: fs-name File-system name, like FAT or HPFS
Output: none
Remarks: none
EXPORT [fn] = Export LSN's in sector list, to file [fn]
Purpose: Save an LSN-list in a file for modification or later use
Parameters: fn Destination filename, default is dfslistX.lsn
Output: none
Remarks: The file has one LSN per line, editable with a text-editor.
IMPORT [fn] = Import LSN's to sector list, from file [fn]
Purpose: Read an LSN-list from a file, exported and/or modified
Parameters: fn Source filename, default is dfslistX.lsn
Output: none
Remarks: The file needs one LSN per line, editable with a text-editor.
It can be the result of an export, derived from a log-file
or created completely by hand.
The verbose format resulting from a "list +" or "list +f"
and the "delshow" is also valid. (use "log" cmd to capture)
This is often more convenient than bare LSN lists because
the verbose format contains info like path/filename.
DIRFIND [l][dir] = Put [l] levels of directory-contents in the sector-list
Purpose: Find non-deleted files in a directory and optionaly it's
subdirecties upto the number of levels specified.
Parameters: l optional number of directory levels to include
in the list, or 's' for all levels
dir optional directory specification, starting from
the root-directory
Output: Sector list in memory to be used in following operations
Remarks: List can be manipulated as usual, best viewed with "list +f"
Example: dirfind s \os2
This will put the whole \os2 tree in the sector-list
BASE [sn [sl]] = Show (and set) physical base limits start and end values
Purpose: Force a different partition start sector-nr
Parameters: sn Sector-number to use as start for partition ==> LSN 0
sl Sector-number to use as end for partition (optional)
Output: Display of current physical start and end values (after set)
Remarks: Can be used if start of partition / partition-tables are bad
Try to find the PSN for the first sector of the partition
and use the "base" cmd followed by an "FS xxxx" command
PSN xx = Analyse & display sector using PSN xx
Purpose: Display sector using Physical Sector Number addressing
Parameters: xx = 1 to 8 hexadecimals
Output: Sector display, format selected based on sector-contents
Remarks: The SN is specified in hexadecimal format, however the first
digit needs to be decimal to avoid misinterpretation.
Prefixing the SN with '0' will avoid any conflicts.
Output that scrolls of the screen can be repeated using
the 't' command. (display 'this' sector)
CHS c h s = Analyse & display sector using CHS specication
Purpose: Display sector using Cylinder, Head and Sector addressing
Parameters: c mandatory The zero-based decimal Cylinder number
Range 1 to disk-specific maximum and
usualy below 1024.
h mandatory The zero-based decimal Head number
Range 0 to disk-specific maximum but
never more than 255
s mandatory The one-based decimal Sector number
Range 1 to disk-specific maximum but
never more than 63
Output: Sector display, format selected based on sector-contents
Remarks: Output that scrolls of the screen can be repeated using
the 't' command. (display 'this' sector)
xx = Analyse & display sector, SN xx; xx = 1 to 8 hexadecimals
Purpose: Display a sector in the most usefull format
Parameters: none
Output: Sector display, format selected based on sector-contents
Remarks: The SN is specified in hexadecimal format, however the first
digit needs to be decimal to avoid misinterpretation.
Prefixing the SN with '0' will avoid any conflicts.
Logical addressing (LSN) is actualy used, however when a
physical disk is selected the offset for logical addressing
is set to 0. The result is that LSN's equal PSN's.
Output that scrolls of the screen can be repeated using
the 't' command. (display 'this' sector)
H,h [xx [s]] = Hex-dump sector or half-sector, LSN xx, s sectors/bytes
Purpose: Display current or specified sector in hex-dump format
Parameters: xx optional LSN of sector to dump
s optional size to dump: 1..63 specifies sectors
64..xxx specifies bytes
Default is 512 bytes for the 'H' command
and 256 bytes for the 'h' command
Output: Hex-dump of the sector
On every line 16 bytes of data will be displayed, each line
containing:
- the relative offset in the record (4 hex digits)
- 16 bytes in hexadecimal; separator after 8 bytes
- the same 16 bytes represented as ASCII
Remarks: The ASCII representation is filtered, non-printable
characters are represented with a PERIOD character
T a|h [s] = This LSN, display in Ascii or Hex; s sectors/bytes
Purpose: Display current sector in ASCII, EA, HEX or default format
Parameters: a|h optional Specifies display format as:
a = ASCII
h = HEX
none = default (based on sector-contents)
s optional size to dump: 1..63 specifies sectors
64..xxx specifies bytes
Output: Sector display in requested format
Remarks:
FIND[op] t [str] = Find using [op]tions, sectors of type t containing [str]
Purpose: Perform a sector search starting from the current LSN
until a sector of the specified type and optionaly
(not) containing a specified ASCII/HEX string is found.
Parameters: op optional Search and display options, default is '+'
* = Repeat find, building a list (find all ...)
% = No sector-spanning, => fast text-search
[ = Freespace only => fast undelete
] = Allocated space only => fast file-grep
! = No progress output while searching (faster)
+ = Verbose output even when repeating
- = Search towards lower sector numbers
~ = Search sector-1 head 0/1 only, bootsectors
$ = Use case-insensitive string compare
^ = Inverse, search sectors NOT containing ...
@[pos] = compare at sector position [pos] only
(with type dependant defaults for [pos])
Note: Use no spaces between 'find' and options!
t optional Types of sector wanted, default is any KNOWN
specify multiple types in a single string
DFS generic sector types
'*' = any sector '~' = No contents shown
'r' = Master Boot Rec 'e' = Extended Boot Rec
'b' = Fsys boot sector 'R' = Fsys reserved sec
'!' = any known type 't' = Text format data
'h' = Hex format data 'H' = Unidentified data
'$' = Free space 'w' = Wiped by DFSee...
'T' = Tpack# compressed '.' = <Past-partition!>
For an up-to-date list, use the '???" command
str optional A string of bytes that have to be present
in the wanted sector.
When the '$' string option is not given, it
can be specified as a mix of ASCII and HEX.
The starting mode is ASCII, switching to
HEX and back is done with the ' character.
Leading whitespace is skipped, in HEX mode
spaces can be used to improve readability.
Example 1: last'0d0a'first
This will search for the word "last"
followed by a carriage-return line-feed
combination and the word first
Example 2: 'e9bd13 0d4023 49 42 4d 3a38 2e'
This will search for a byte sequence,
in this case the start of COMMAND.COM
Output: Sector display, format selected based on sector-contents,
or a single line with position and type info when repeating
Remarks: This command is also very usefull to find a specific fragment
of disassembled code anywhere on the disk, to resolve the
name of an EXE, DLL or device driver causing traps or hangs.
Backward search can be usefull on HPFS to find the preceding
fnode when looking at some random file-data.
Note: the 'id' command will do this more reliably but depends
on the sector-lookup-table to be filled.
The find command is often called by other commands to
implement the actual search (like "delfind" and "bsfind")
BSFIND [types] = Find boot-sectors on head 0/1 sector 1 only (fast)
Purpose: Find MBR, EBR or fsys-boot-sectors on a disk
Parameters types optional type of sectors to look for (default 'bre')
Output: Sector display, format selected based on sector-contents,
or a single line with position and type info when repeating
Remarks: This command is intended to collect info for 'unfdisk' type
of recovery in the fastest way possible.
It only inspects sector-1 on head 0 and 1 on each cylinder.
This makes it DEPENDANT on the geometry currently being used
on the disk. You could try using different geometries with
the 'diskgeo' command if the actual geometry is uncertain.
Afterwards, a usefull detailed list can be made with 'list +d'
EDIT pos str = Update the current sector at 'pos' to the value of 'str'
Purpose: Make (small) modifications to sector contents
Parameters pos mandatory Hexadecimal offset, start of edit-area
str mandatory A string to be placed at the specified
position in the current sector.
The syntax for this string is exactly the
same as for the find ('f") command.
So ASCII and binary specifications are
possible.
Output: Hex-dump BEFORE and AFTER for the changed sector area
Remarks: The edit command itself does NOT write the new contents
back to disk. Use the 'write' command to do that.
The 'show' command can be used to view the sector before
writing back or making more changes. It is simular to the
'H' and 'h' command, but it does not read from the disk,
it just displays the current sector buffer contents.
SHOW [s] = Hex-dump current sector (or half-sector), s sectors/bytes
Purpose: Display current (last read, edited) sector in hex-dump format
Parameters: s optional size to dump: 1..63 specifies sectors
64..xxx specifies bytes
Default is 512 bytes for the 'SHOW' command
and 256 bytes for the 'show' command
Output: Hex-dump of the sector, see the 'h' and 'H' commands
Remarks: The main difference with 'h' and 'H' are that the current
contents of the sector-buffer (possibly changed by an 'edit')
are shown. 'h' and 'H' will first read a sector from disk.
WRITE xx = Write back the sector-buffer using current or specified LSN
Purpose: Update a sector on the disk, possible after editing it
Parameters: xx mandatory sector-number specification (LSN)
'.' is the current sector ('This')
Output: none
Remarks: Only one sector (512 bytes) will be written.
Writing back changed data to the disk can cause BIG TROUBLE
when you don't know EXACTLY what you are doing.
Use it with extreme care (and maintain backups if possible :-)
LIST [opt] [str] = Display LSN's in the sector list, using options/string
Purpose: Display one of the sector-number lists maintained by DFS
Parameters opt optional + = Use verbose output, one line per LSN
+f = verbose including PATH info on Fnode
+d = display sector contents as well
+c = One line LSN info + a command per LSN
+g = Show lsn -> psn -> CHS using diskgeo
str optional Wildcard select-string, only valid with "+f"
multiple wildcards '*' and '?' can be used.
Useful on a (large) list of deleted fnodes!
Command to execute for each LSN in the
list when the "+c" option is used
Output: List of sector numbers in compact, verbose or special format
Remarks: List also available for REXX in the dfs_sn. stem variable
Lists can be imported and exported to files, see import/export
SAVETO [dir][l] = Save filedata for (current) dir+entry LSN to a file
Purpose: Recover a file based on it's directory entry and the FAT, by
a low-level sector-by-sector copy of its data to a new file.
Parameters: dir optional Path to save the file copy, default a:\
l optional LSN (dir+entry) of the file to recover
rename optional new name for destination file
Output: Progress is reported with one RED or GREEN dot for each sector
Remarks: Only the file contents is recovered, date&time and attributes
are lost.
If no directory is specified it will default to the last one
used for saveto. This directory should be on ANOTHER drive!
DELSHOW [w;t] = Show delfind list, optional wildcard and min/max threshold
Purpose: Display a list of deleted Fnodes
Parameters: w optional wildcard selection for display
t optional +nn = Minimum allocation-OK percentage
-nn = Maximum allocation-OK percentage
Output: LSN list in fnode format (as "list f+f *;1" command)
Remarks: Default wildcard is '*', default percentage is 0
Minimum wil list all values larger, maximum all values 'upto'
Wildcards are real (UNIX style) wildcards using '*' and '?'
Wildcards can appear at multiple places in the path string.
Example delshow *;100 All files perfectly recoverable
Example delshow *.ini;50 All *.ini files at least halfway OK
Example delshow *;-100 All files not fully recoverable
RECOVER d [w;t] = Undelete files from the delfind list, to dir [d], and
DELSAVE d [w;t] with optional wildcard [w] and min/max threshold [t]
Purpose: Undelete multiple files using (a selection from) a list
Parameters: d optional Path to save the file copy
w optional wildcard selection for display
t optional +nn = Minimum allocation-OK percentage
-nn = Maximum allocation-OK percentage
Output: Progress is reported with output like the "ca" command,
error messages will be given as appropriate
All files are recovered one by one using the "saveto"
command automatically on each selected LSN from the list.
Remarks: See "saveto" and "delshow" command
LSN list is the find-result list as shown with "delshow"
It can be edited using "export" or "log" + "delshow" and
imported again using "import", to make specific selections
If a path for the deleted file can be resolved, it will
also be included in the saved copy. If the directories
do not exist they will be created.
This means a whole directory-tree can be undeleted in
one operation, while retaining the structure.
DELWIPE [w;t][p] = Wipe sectors in list with pattern [p], wildcard [w], and
WIPELST [w;t][p] threshold [t]. WIPELST is a synonym.
Purpose: Wipe sectors in the (delete) list with a pattern
This makes deleted files INVISIBLE for future undelete commands
Parameters: w optional wildcard selection for display or '!'
t optional +nn = Minimum allocation-OK percentage
-nn = Maximum allocation-OK percentage
default: *;-100 ==> all except 100% ones
p optional The pattern to use for wiping, it can
be any lenth upto 256 bytes
default: DfsWiped
Output: Progress is reported with one line per file (file-info list),
or a single dot per sector when selection overruled with '!'
Remarks: '!' as first parameter will overrule the normal file-display
and validation, and wipe EACH SECTOR in the list.
Wiping file-list sectors (from delfind), is intended to clean
the disk from obsolete file-info (Fnode's), making 'delfind'
returning less deleted files the next time.
The files wiped CAN NEVER BE UNDELETED ANYMORE!
See also "wipe" and "delshow" command
MEM [c|lsn] [#] = Store LSN in MEMory list at loc #, or limit mem list-size
Purpose: Add an LSN to the LSN memory list for later use with .NNN
Parameters: c optional Clear command, limit list-size to # entries
lsn optional LSN to add to the list, special values are:
x, u, d, t for Xtra, Up, Down and This
# optional memory location to store lsn, or limit
Output: none
Remarks: The LSN memory can be listed using "list" [+f]
SORT [+|-][u] = Sort the LSN list using specified options
Purpose: Sort the list ascending/descending, remove duplicates
Parameters: +|- optional Sort ascending (+) or descending (-)
default is ascending
u optional Make list unique by removing all duplicates
Output: none
TRANS l|b|c|p xx = Translate and display value 'xx' as Lsn, Bios, Chs and Psn
Purpose: Translate value xx to 4 possible representations
Parameters: l|b|c|p optional type specifier for input value (xx)
l = lsn, logical sector number
b = bio, 3 hex-byte CHS, as in part-table
c = chs, 3 decimal values; cyl, head, sector
p = psn, physical sector number
xx optional input value(s) to translate
The default is the 'this' value (as lsn)
Output: One line with all 4 possible representations of the value 'xx'
Remarks: This function is usefull to calculate values for partition-
table entries or CHS values.
The same functionality is used in the 'list +g' command
against each sectornumber in the list.
.NNN [id] = Display numbered FS-entity marked .NNN from a sector list
Purpose: Display one of the entries from the list last shown
It can be applied on Directory- as well as Allocation-lists
The number (NNN) to use is displayed to the left of the list
Parameters: NNN The zero-based decimal entry number to show
id optional Identifier for LSN list (see list command)
Output: Sector display, format selected based on sector-contents
Enter = down in hierachy (Enter = down)
Purpose: Display the next, most likely wanted, sector
Parameters: none
Output: Sector display, format selected based on sector-contents
u = up in hierachy
Purpose: Display the sector that is higher in the hierarchy (parent)
Parameters: none
Output: Sector display, format selected based on sector-contents
x = Extra LSN
Purpose: Display the sector marked as eXtra
Parameters: none
Output: Sector display, format selected based on sector-contents
SLT [t i s m] = Show SLT for 'type', at index i, size s, error-mask m
Purpose: Display (selection of) the Sector Lookup Table
Parameters: t optional Sector-types to include in the displayed
list. Default is all types ('*')
Types are same as specified for 'f' cmd
i optional Start index in the SLT to display,
'+' and '-' show next/previous screenfull
'a' will show entire SLT
s optional Number of entries to display, default will
result in one screenfull; '*' = rest of SLT
m optional Error filtering mask, * = all errors
4-digit Hexadecimal value, each set bit
will include a specific error value.
When prefixed with a '+' sign, the ouput
will be verbose (error-text & path+filename)
Output: One line for each entry in the SLT, containing:
LSN Start LSN for a range of sectors
size Number of sectors in the range
ref Other sector refering to this range (fnode)
type Type of the sectors in the range
error 4-digit Hexadecimal error value:
0x00000001 Linked to some structure, but not in bitmap
0x00000002 Allocated in bitmap, but no known link
0x00000004 HPFS shortname does not match DIR name
0x00000008 Fnode is a directory but DirFlag is not set
0x00000010 Fnode datalength greater than Dir-entry size
0x00000020 Fnode datalength smaller than Dir-entry size
0x00000040 Fnode datalength greater than allocated size
0x00000080 Fnode datalength smaller than allocated size
0x00000100 Checksum value is incorrect
0x00001000 LSN does not point to valid dirblock
0x00002000 LSN does not point to valid Fnode
0x00004000 LSN does not point to valid Allocation sector
0x00008000 LSN is too large for this volume
Remarks: Sector ranges might overlap, the smallest matching range will
hold the best identification for a specific sector.
The start-index will default to the position of the sector
last searched using the 'i' cmd.
If needed the SLT will be built in a background thread.
ID [xx] = Identify, using sector lookup table
Purpose: Display the type for a specific sector and one major reference
Parameters: xx optional LSN of sector to identify, default is
the current sector
Output: One line specifying corresponding SLT entry, followed by
a line specifying the type of the sector itself and a
sector display of the 'ref' sector, in a format based
on sector-contents
Remarks: This function is extremely usefull to relate file-data sectors
from fragmented files to the Fnode for the file.
It will tell you exactly to wich file a certain sector belongs.
LOG [file] = Log (append) to 'file' (.log); (No file => stop logging)
Purpose: Close current LOG, open new and capture DFS output in it
Parameters: File specification
If no parameter is specified, logging is stopped.
Output: Concatenated output of DFS commands given after the
'log' command, upto next 'log' or 'q' command.
ANSI control characters for colors and cursor-positioning
are not written to the logfile.
Remarks: There is no check on available space on the destination
drive, file may end up empty if disk(ette) is full.
The same logfile specification can be used more than once,
output will be concatenated.
On each 'log' command the current logfile will be closed.
TRACE [lvl] = Set trace level for DFS internal functions
Purpose: Investigate unexpected behaviour and debug DFS
Parameters: lvl optional Trace level; 0 = no trace
Output: The resulting trace-level, after this the output will be
normal output mixed with extra trace information showing
API return-codes and DFS internal variables
Remarks: Only available in the special DFSTRACE.EXE version
PRIO [lvl] = Set relative priority of the DFS main thread
Purpose: Increase (search) speed with +, or decrease system impact
Parameters: lvl optional Prority level; + and ++ = high(est),
- and -- = low(est)
Output: The resulting prio-level
Remarks: When running on low(est) priority in the background, DFS
will almost come to a halt.
q = Quit DFSee OS2: 3.05 30-08-99-99 (c) 1994-1999; Jan van Wijk
Purpose: Exit DFS program
Remarks: Opened physical disk and logfile will be closed on exit
Asynchronious running threads will be aborted.
CD [path] = Change current Directory
Purpose: Change both the current directory and the current drive
Parameters: path optional Absolute or relative path specification
Output: The resulting current drive and directory
Remarks: '.' and '..' can be used in the relative path specification
RUN mf [arg] = Run a REXX macro from DFS
Purpose: Execute a REXX script using the 'DFS' environment
Parameters: mf mandatory Macro file specification
arg optional Arguments to the REXX macro
Output: Any output from the REXX macro including (OS/2) commands
executed from the macro.
Remarks: DFS commands can be issued from within the macro, this
is the default environment (Address DFS).
Commands for CMD.EXE must be addressed using 'Address Cmd'
The following REXX variables will be available after
each executed DFS command from a macro:
rc The returncode from the DFS command
dfs_disknr Physical disk number currently open
dfs_partid Partition-id for selection with "part"
dfs_drive The opened drive letter, including a colon.
dfs_afsys The attached filesystem, like "HPFS" or "FAT"
dfs_sect The last retrieved sector(s), binary buffer
dfs_type Type of last retrieved sector, this is a string
starting with the type-character (see 'F' cmd)
followed by a textual description.
dfs_this SN of the last retrieved sector
dfs_down SN of most likely sector to retrieve now
dfs_up SN of sector up in hierarchy
dfs_next SN of next in sequence
dfs_prev SN of previous in sequence
dfs_down SN of up in hierarchy
dfs_number The number of disks or partitions resolved,
from the commands "disk" and "part 0" or
"part" respectively.
dfs_sn.0 Number of sector-numbers in the SN stem variable
dfs_sn.n nth sector-number in the SN stem variable, coming
from DFS output for directories and allocation.
They correspond to the '.NNN' command
Note: SN's are in an 8-digit Hexadecimal format
REXX is dynamically loaded, when the run-command is exectuted
It requires REXX.DLL and REXXAPI.DLL in the libpath.
COPYOUTPUT [stem-name] Copy output from last-command to REXX stem-var
Purpose: Allow output to be captured and processed from REXX
Parameters: stem optional name of stem variable, ending in a '.'
default: "dfs_output."
Output: none
Remarks: The <stem>.0 will hold the number of lines
<stem>.1 through <stem>.n the actual cmd-output
==> This command is temporarily disabled in version 2.73 to
avoid a trap ona 'vol' command on HPFS while logging
SCAN [wr [NoId]] = Scan bad-sectors; use read/Write verify; No automatic id
Purpose: Identify bad sectors on a physical disk or logical volume
Parameters: write optional 'w' to use full read/write/verify sequence
NoId optional 'n' to disable automatic SLT lookup
Output: Progress indication based on sector-numbers, and one line for
each bad-sector found, plus an SLT display of a related sector
like the fnode, if automatic SLT display is enabled.
Remarks: For REXX, the dfs_sn.0 stem variable will hold the number of
bad-sectors found and dfs_sn.1 through dfs_sn.n the actual
bad sector numbers (can be shown with the 'list' command)
Without the write option, only a single 'read' will be done
for each sector, this can be executed on a running system
with open files on the disk/volume to be checked.
With the write option a "read/write-inverse/read/write-normal"
sequence is done for each sector with contents checking.
The contents of each sector will stay the same, so the function
can be safely executed on formatted disks with live data.
This sequence takes at least 4 times more time to complete
and also, for safety, the disk will be locked. This means that
the write option can only be used when the complete physical
disk is not being used.
Remarks: Also available for REXX in the dfs_sn. stem variable
SCREEN [arg] = Switch output to the screen on or off
Purpose: Allow output to logfile only
Parameters: arg optional 'on' or 'off' to switch mode
Output: none
Remarks: The returncode (rc from REXX) will indicate the setting for
screen output: 0 indicates screen switched on
1 indicates screen switched off
SEP separ = Specify a different separator character for multiple commands
Purpose: Allow use of the current separator-character in commands,
while still allowing multiple commands to be specified in
a single commandline.
Parameters: separ mandatory One character being the new separator
Output: none
Remarks: If part of a multi-command itself, the 'sep; command needs
to be terminated with the current (old) separator.
The rest of the multi-command uses the new value.
Example: dfs sep ~#log inifiles~part d~fos2.###~q
WIN [col][row] = Reset display to windowing mode, optional resize display size
NOWIN [col][row] = Reset display to cmd-line mode, optional resize display size
Purpose: Switch to desired mode, either classic command-line based (NOWIN),
or windowed using a large scroll-buffer and command-history (WIN)
Parameters: col optional The number of columns to use in the display
row optional The number of rows to use in the display
Output: Screen refresh in selected mode, and display of screen sizes
Remarks: To set the screen size, the underlying OS command 'mode xx,yy'
is used. Operating system limits regarding size still apply.
Example: win 132 43
Command reference, FDISK specific commands
------------------------------------------
Active filesystem : FDISK, specific commands are:
DISK|WALK [disk] [!] = Select disk, show the MBR, walk EBR chain
CLEANUP [disk ] = Cleanup partition-chain, fix minor errors
DELETE pid [disk [clean]] = Delete one or more partitions, clean=zero
DFSIBMGR [disk ] = Create new bootmanager image for 'create'
DOS2OS pid [disk ] = Change FAT-BR bootcode from DOS to OS/2
FIXEXT [disk [to [from]]] = Fix ext-partition types to standard value
NEWMBR [disk [clean]] = Refresh MBR bootcode, [clean] = delete all
PLIST p|f|e|m|b [disk [e]] = Part-list on: part|free|ebr|mbr|boot [ebr]
SETACCESS pid [hide|vis|multi] = Make partition 'pid' accessible or hidden
SETBOOT opt[:opt-parameters] = Bootmanager setup and reboot => 'setboot ?'
SETNAME pid [BM-name] = Set or reset bootmanager name for partition
SETTYPE pid disk new [old] = Change partition-type from old to new value
STARTABLE pid [multi] = Make partition 'pid' startable (bootable)
TYPE [system-type ] = Show system-type description (for 00..ff)
CREATE plt type [size [loc [pos [BM-name]]]] = Create a new partition
CR plt : Primary/Logical identifier; log | prim | l | p
type : System-type for new partition; hex | symbolic-name
size : Desired size for the partition; number[[,d|x]m|c|s] | *
loc : Location to place new partition; @freespace-id | disk | *
pos : Position in loc-area; [+|-|@|{|}]number[[,d|x]m|c|s] | *
BM-name : Add to the bootmanager-menu using this name
For an up-to-date list of commands, use the '?' command
FDISK specific sector types (see ??? command)
'X' = Unidentified data
WALK [disk] [!] = Select disk and walk MBR/EBR chain, reset
Purpose: Show all partitioning information for the specified disk
Parameters: dsknr optional disk nr, default is current if open or 1
! optional reset previously forced geometry
Output: Disk Geometry, MBR and all linked EBR's in partition format
Remarks: The dfs_number variable for REXX will be set to nr-of-disks
See also: DISK command
PLIST p|f|e|m|b|w|l [d [r]] = list: part|free|ebr|mbr|boot|walk|lvm
Purpose: Show one of several lists of partition related information
Parameters: type optional type of list wanted: p|f|e|m|b|w|l
part normal partitions
free freespace area's
ebr EBR-chain
mbr MBR partition-table entries
boot Bootsectors for all partitions
walk MBR's and all EBR's (as WALK cmd)
lvm LVM volume information sectors
d optional Disk to operate on, default is all disks
r optional Flag to include extra-info on related
sectors like EBR and/or LVM.
Output: The list of the requested type with info on start- and
end-sector numbers, sizes and more.
Remarks: none
CLEANUP [disk ] = Cleanup partition-chain, fix minor errors
Purpose: Cleanup minor inconsistencies in partition-chain, like remove
of 'empty' extended partitions and recalculation of the total
size of the extended-container.
Parameters: disk optional Disk to operate on, default is all disks
Output: Progress information and confirmation messages
Remarks: Inconsistencies can be caused by several operations, using
DFSee, other FDISK versions or Partition Magic.
Resizing and deleting with PQmagic or a 'delete' with DFSee
can cause 'empty' extended containers.
DFSIBMGR [disk ] = Create new bootmanager image for 'create'
Purpose: Create a DFSIBMGR.IMG image-file from the bootmanager installed
on the specified disk, to be used later on 'create' commands
when creating new bootmanager partitions.
Parameters: disk mandatory Disk to get the bootmanager image from
Output: Progress information
Remarks: The 'create' command will automatically search for an image
with this name when a type 0x0a = BMGR partition is created.
FIXEXT [disk [to [from]]] = Fix ext-partition types to standard value
Purpose: Change non-standard values (0x0f) back to the standard 0x05
value so operating systems like DOS and OS/2 cann access the
logical volumes inside this extended-partition container.
Parameters: disk optional Disk to operate on, default is all disks
to optional New system-type for EBR, default is 0x05
from optional Existing system-type, default is 0x0f
Output: Progress information and confirmation messages
Remarks: The non-standard type 0x0f is introduced by Win9x combined
with the FAT32 filesystem. These allow partitions larger
then 2Gb and spanning the 8Gb BIOS limit (1024 cylinders).
Using the 0x0f type prevents older operating systems to
access, and possibly damage, the new partitions.
When all FAT16 partition are below cylinder 1024, there
seems to be NO VALID REASON to use this type, and it can
be safely changed back to 0x05 to allow access by DOS,
OS/2 and others.
I can NOT GUARANTEE full cooperation with multiple
operating systems, but my experiences are positive.
NEWMBR [disk [clean]] = Refresh MBR bootcode, [clean] = delete all
Purpose: Create or refresh the boot-code in the master boot record
Parameters: disk optional Disk to operate on, default is all disks
clean optional Make the partition-table empty, effectively
deleting all existing partitions
Output: Progress information and confirmation messages
Remarks: none
SETNAME pid [BM-name] = Set or reset bootmanager name for partition
Purpose: Set or clear the name for a partition, adding it to the menu
Parameters: pid mandatory Partition id, see PART and MAP display
BM-name optional When specified, this is the name to be
used in the bootmanager menu. (length 8)
When not specified, the partition will
be removed from the menu by clearing the
name in the bootmanager administration.
Output: Progress information and confirmation messages
Remarks: none
SETTYPE pid disk new [old] = Change partition-type from old to new
Purpose: Change the system-type for a partition to a new value
Parameters: pid mandatory Partition id, see PART and MAP display
disk Disknr, * or 0, used for selection verification
new mandatory New system-type, hexadecimal or symbolic
The most used system-types are:
hex sym
01 FAT12 = FAT12
04 FAT16 = FAT16 < 32 Mb
05 EXT = Extended partion (chain)
06 FAT = FAT16 > 32 Mb
07 IFS = Installable File system
07 HPFS = IFS, HPFS (alias)
07 NTFS = IFS, NTFS (alias)
0a BMGR = OS/2 Bootmanager
0b FAT32 = Primary FAT32 I13
0f BIGX = Large extended (PQMAGIC 4.0)
82 SWAP = Linux swap partition
83 EXT2 = Linux EXT2 data partition
eb BEOS = BeOS filesystem
fe PS2S = PS/2 system partition
old optional Existing system-type, for verification
Output: Progress information and confirmation messages
Remarks: Only the type of the partition in the partition-table will
be changed. The actual internal format of the partition is
not affected by this operation.
Note that the 05 an 0f (extended) types cannot not be used
by the 'SETTYPE' command, but they can be used in 'FIXEXT'
You can get an overview of all types with the 'TYPE' command.
SETACCESS pid [hide|vis|multi] = Make partition 'pid' accessible or hidden
Purpose: .
Parameters: pid mandatory Partition id, see PART and MAP display
hide optional Make this partition hidden (invisible)
vis optional Make this partition visible, hide others
multi optional Make this partition visible, but do allow
multiple visible primary partitions per disk
Output: Progress information and confirmation messages
Remarks: The partition will be made visible (types 01 .. 0f).
All other primaries on the same disk will be made hidden,
except when the 'multi' parameter was given.
SETBOOT opt[:params] = Bootmanager setup and reboot options
Purpose: Configure BMGR; Set partition to boot, and (optional) boot
Parameters: opt mandatory Option letter/word for the setboot action
params optional Depending on the selected option:
q:disk (query BM settings on 'disk')
t:timeout (seconds or NO)
m:mode (normal or advanced)
x:num (set system-index to 'num')
[0..5]:name (set system 0..5 to 'name')
ibd:d (reboot from drive d)
iba:BM-name (reboot from BM-name)
n:d (set next-boot to drive d)
b ([shutdown] and reboot now)
System-indexes 0..5 have the following meaning:
0 default system, Booted when no other selection is made from the
menu, or when the timeout is set to NO.
1..3 fallback range On a failing boot on one of these systems, the
next boot will be of the next lower-number
system (fallback scenario)
4 force-reboot Indicates the system-name to boot next time,
without display of the menu (forced).
This is used by the /iba:name option.
The name is automatically cleared on the next boot.
5 last-booted The system-name last booted using bootmanager.
This will also be the default when the default
system itself (0) is not set.
Output: Progress information and confirmation messages
Remarks: For the reboot options, an external program is needed that
does the actual reboot. The name for this program is the
same as for DFSEE, with 'X.exe' added to name.
So, for DOS this would be DFSDOSX.exe, for OS/2 it is DFSX.exe
and for NT it is DFSNTX.exe. It will be searched for in the
same path as DFSee was found and in the current directory.
A parameter with value "reboot" is passed to the program.
- The reboot from DFS.EXE requires DOS.SYS to be loaded!
- The reboot from DFSDOS will probably NOT work on Win9x
using the internal reboot function, copying the DFSNTX.EXE
to DFSDOSX.EXE should work for Win9x however.
STARTABLE pid [multi] = Make partition 'pid' startable (bootable)
Purpose: Make the selection partition the 'active' one to be booted
Parameters: pid mandatory Partition id, see PART and MAP display
multi optional Allow multiple primary partitions per disk
Output: Progress information and confirmation messages
Remarks: The partition status will be set to 'active' (0x80) and,
if needed the partition will be made visible.
All other primaries on the same disk will be made hidden,
except when the 'multi' parameter was given.
CREATE plt type [size [loc [pos [BM-name]]]] = Create a new partition
Purpose: Create one new partition in an area that is now freespace
Parameters plt mandatory Primary/Logical identifier;
log | l Logical partition
prim | p Primary partition
type mandatory System-type for new partition;
hex Hexa-decimal value 0..0xff
symbolic A name from the pre-defined
set of partition-types.
(see SETTYPE for a list)
size optional Desired size for the partition;
* Use maximum size for the
selected freespace-area
number[[,d|x]m|c|s] Specific value, hex or decimal.
Megabytes, Cylinders or Sectors.
Default: decimal Megabytes
loc optional Location to place new partition;
* Use first 'matching' area
@fsp-id Specific freespace area
disk Use first matching area on
the specified disk
pos optional Position in loc-area;
* Default position (at start)
[+|-|@|{|}]number[[,d|x]m|c|s] Specific value, hex or decimal
Megabytes, Cylinders or Sectors.
Default: decimal Megabytes
Prefix modifiers are:
+ Relative to start or area
- Relative to end of area
@ Absolute from start of disk
{ Relative, before 1024-cyl limit
} Relative, after 1024-cyl limit
Note: The corresponding value
with the prefix can be 0
or empty
BM-name optional Add to the bootmanager-menu using this name
Output: Progress information and confirmation messages
Remarks: none
DELETE pid [disk [clean]] = Delete on or more partitions
Purpose: Delete one or more partitions.
Parameters pid : Partition-id for 1 partition or '*' for all partitions
disk : Physical disk number for 1 disk or '*' for all disks
clean : Zero out complete table-entry, not just the system-type
Output: Progress information and confirmation messages
Remarks: The partition will by default be deleted by changing the
system-type to hex '00'. This is the minimum required change.
This allows for relatively easy recovery or rollback.
The 'clean' option forces the complete table-entry, 16-bytes
to be set to all zeroes.
Note that the extended-boot-records (EBR) are NEVER removed
from the EBR chain by the delete command. Even if an EBR
remains empty, it is left in the chain. Most operating systems
have no problems with a setup like this.
You can use the 'cleanup' command to clean this up when needed.
A subsequent 'CREATE' will also clean the EBR-chain up.
TYPE [system-type ] = Show system-type description (for 00..ff)
Purpose: Show short description for one, or all known system types
Parameters: type optional one system type to query
Output: Single line when one type queries, or 4 descriptions per
line covering all known system-types from 00 through ff
Remarks: none
DOS2OS pid [disk] = Change FAT-BR bootcode from DOS to OS/2
Purpose: Replace DOS based bootcode by OS/2 based bootcode for FAT
Parameters pid : Partition-id for 1 partition or '*' for all partitions
disk : Physical disk number for 1 disk or '*' for all disks
Output: Progress information and confirmation messages
Remarks: This command is intended to prepare a partition for booting
OS/2 (FAT only), from a pure DOS environment.
Step 1) Partition using DFSee FDISK (make at least 1 FAT)
Step 2) reboot, to make DOS assign a drive-letter
Step 3) Format the FAT partition using std DOS FORMAT
Step 4) Use DFSEE DOS2OS command to make it OS/2 bootable
Step 5) xcopy a saved set of OS/2 files to the partition,
including OS2BOOT, OS2LDR etc
Step 6) Boot that partition as OS/2 (direct or through BMGR)
Command reference, FAT specific commands
----------------------------------------
Active filesystem : FAT, specific commands are:
\path-spec = find and show file/directory relative to root (see find)
ALLOC [+|-] = Display allocation map for FAT, more [+] or less [-] detail
CL = Translate and display 'this' LSN as a cluster nr
CL clust [cmd] = Translate specified cluster-nr to LSN, display using 'cmd'
FATSELECT [fat] = Select fat to be used (cached), fat = 1 or 2; default is 1
FATSHOW [*|nr] = Display contents of the FAT from memory, [nr] entries
SPACE [clust] = Show allocation for specified cluster or current LSN 'this'
For an up-to-date list of commands, use the '?' command
FAT specific sector types (see ??? command)
'1' = First FAT area '2' = Second FAT area
'3' = Start 12-Bits FAT '4' = Start 16-Bits FAT
'8' = Start 32-Bits FAT
'\' = Root directory
'd' = Sub directory 'D' = Directory data
'I' = File data
'X' = Bad sector-area
ALLOC [+|-] = Display allocation map for FAT, more [+] or less [-] detail
Purpose: Show usage and the distribution of data over the volume.
Parameters: + or - optional Show more or less detail by changing the
the number of Kb represented by each char
Output: A single bitmap-graphic for the entire volume
Remarks: Boot-sector, both FAT's and the Root-directory are represented
in the first display=line using colors. The size of FAT/Root
is proportional to their real size and the percentage of used
entries in the root-directory is shown at the end of the line
CL = Translate and display 'this' LSN as a cluster nr
Purpose: Find out what cluster-nr corresponds to current LSN
Parameters: none
Output: The cluster number, or an error message when invalid
CL clust [cmd] = Translate specified cluster-nr to LSN, display using 'cmd'
Purpose: Display data using a cluster-nr instead of an LSN
Parameters: clust mandatory The cluster-nr of interest
cmd optional DFS generic command to execute with clust
as its first and only parameter (like 'H')
Output: The output for the cmd, when no explicit cmd is specified this
will be the DFS default for the corresponding LSN, usualy a
display of that sector(s) in an appropriate format.
FATREAD [fat] = Read fat from disk into memory, fat = 1 or 2; default is 1
Purpose: Update the in-memory FAT from the disk-FAT
Parameters: fat optional Number of the disk-FAT, either 1 or 2
Output: none
Remarks: FAT12, FAT16 and FAT32 formats are supported
FATWRITE [fat] = Write-back fat memory to disk, fat = 1 or 2; default is 1
Purpose: Update the on-disk FAT with the possibly changed in-memory FAT
Parameters: fat optional Number of the disk-FAT, either 1 or 2
Output: Message indicating success or failure
Remarks: This is a potentialy dangerous operation, also usualy both
FATs on the disk need to be in-sync. So 2 writes are needed.
FATSHOW = Display contents of the FAT from memory
Purpose: List all FAT-entries separately for analysis
Parameters: none
Output: A list of FAT-entries with 8 values in each line, <free>
<bad> and <eof> values are shown as such.
SPACE [clust] = Show allocation for specified cluster or current LSN 'this'
Purpose: Show size and fragmentation of allocated space for a cluster
Parameters: clust optional Cluster number
Output: A list of allocation-chunks with LSN's and sizes
Remarks: none
Command reference, NTFS specific commands
-----------------------------------------
Active filesystem : NTFS, specific commands are:
CL = Translate and display 'this' LSN as a cluster nr
CL clust [cmd] = Translate specified cluster-nr to LSN, display using 'cmd'
FIXBOOT = Recover NTFS bootsector from the spare-copy, if available
MFT = Translate and display 'this' LSN as an MFT record nr
MFT mft-recnr = Calculate LSN for MFT record-nr and perform default display
MIR [mft-recnr] = Calculate LSN for MFT-mirror record-nr, do default display
MFTEXT = Find all external MFT records (continuation for base-MFT)
For an up-to-date list of commands, use the '?' command
NTFS specific sector types (see ??? command)
'f' = MFT regular File 'z' = MFT deleted File
'D' = MFT regular Dir 'y' = MFT deleted Dir
'd' = Directory index
For an up-to-date list, use the '???" command
CL = Translate and display 'this' LSN as a cluster nr
Purpose: Find out what cluster-nr corresponds to current LSN
Parameters: none
Output: The cluster number, or an error message when invalid
CL clust [cmd] = Translate specified cluster-nr to LSN, display using 'cmd'
Purpose: Display data using a cluster-nr instead of an LSN
Parameters: clust mandatory The cluster-nr of interest
cmd optional DFS generic command to execute with clust
as its first and only parameter (like 'H')
Output: The output for the cmd, when no explicit cmd is specified this
will be the DFS default for the corresponding LSN, usualy a
display of that sector(s) in an appropriate format.
FIXBOOT = Recover NTFS bootsector from the spare-copy (saved by format)
Purpose: Fix corrupted bootsector for an NTFS partition
Parameters: none
Output: Progress and confirmation info
Remarks: This will locate the copy of the bootsector saved by format,
and when found copy it to the bootsector location (sector 0)
The partition-table info (type and size) must still be valid!
MFT = Translate and display 'this' LSN as an MFT record nr
Purpose: Calculate and display the MFT-record number from current LSN
Parameters: none
Output: The mft-record number, or 0xFFFFFFFF when not in an MFT record
MFT [mft-recnr] = Calculate LSN for MFT record-nr and perform a default display
Purpose: Display a sector, probably an MFT-record, by specifying its
MFT number. The logical sector-number is based on the MFT-0
pointer in the boot-record an a calculated sectors-per-mft.
Parameters: mft-recnr The record number for the MFT record
0 is the first MFT, regarding the MFT itself
Output: Display of the MFT record contents, or an error message
MIR [mft-recnr] = Calculate LSN for MFT-mirror record-nr, do default display
Purpose: Display a sector by specifying its MFT number as an index
in the MFT-mirror area. (effect as 'MFT' command)
Parameters: mft-recnr The record number for the MFT record
Output: Display of the MFT record contents, or an error message
Remarks: The MFT mirror area only contains a subset (usually 16 records)
The main purpose for the MFT mirror is as a backup for the
important (system) files like the MFT and root directory.
MFTEXT = Find all external MFT records (continuation for base-MFT)
Purpose: Quickly find all MFT records that are continuations for others
Parameters: none
Output: Standard find-progress, and one line per hit
Remarks: Continuation MFT records link back to the base-MFT, this link
will be recorded in the 'up' shortcut. (command 'u')
From the base MFT-record, the first external continuation MFT
will be recorded in the 'xtra' shortcut (command 'x')
Existence of a continuation record is a sure sign for very
heavy fragmentation of the file in question.
NTFS remarks:
Date and time-information in the NTFS filesystem is stored as a time-offset
in units of 100ns starting at 1st of januari 1601. It is a 64 bit number.
The date and time is stored as a Universal Coordinated Time (GMT) and
displayed as such by DFSee. If you want timestamps to correspond to your
local timezone, you can set the 'TZDFSEE' environment variable to a signed
number of minutes, being the offset to GMT.
Command reference, HPFS specific commands
-----------------------------------------
Active filesystem : HPFS, specific commands are:
\path-spec = find and show file/directory relative to root (see find)
ALLOC [+] = Show data-band allocation bitmaps, compact or [+] verbose
ALBIT a [lsn s] = Set/reset allocation bit in bitmap for lsn-range
AUTOBASE [t][l] = find the start of an HPFS partition by searching sectors
of types [t], default 'spad'; [l] is last valid sector
BITMAP [xx,s,D] = Show bitmap at LSN xx, size s, in alloc or [D]ir format
CA [lsn][opt] = Check Allocation integrity for (current) fnode lsn
CHECK [drive] = Check filesystem integrity for drive-letter (CHKDSK)
DELFIND [s] [o] = Find deleted files, name start with [s], using options [o]
DIRMAP = Show directory band allocation and usage map
FINDROOT [n] = find the Root directory without using the superblock
starting the search at LSN [n]
FIXBOOT = Create HPFS bootsector from template and partition-table
FIXBS [clear] = Update bad-sector table with LSN's from DFS badsec-list
FIXCP = Update superblock with found LSN for codepage info
FIXCS = Calculate checksums and write super- and spare-block
FIXROOT = Update superblock with found LSN for root-directory
GETBS = Read HPFS bad-sector table into DFS badsec-list
PATH [n] = Show all path-components for current fnode, upto root
For an up-to-date list of commands, use the '?' command
HPFS specific sector types (see ??? command)
'I' = File data 'E' = EA data
'A' = ACL data 'B' = Boot area
's' = HPFS superblock 'p' = HPFS spareblock
'H' = Hotfix table 'h' = Hotfix data
'x' = Bad sector-list 'X' = Bad sector
'S' = Spare dirblocks
'D' = Directory Fnode 'y' = Deleted Dir Fnode
'f' = File Fnode 'z' = Deleted FileFnode
'a' = Allocation block 'Z' = Deleted All-block
'd' = Directory block 'P' = Dir-band (free)
'Q' = Dir-band bitmap 'c' = Codepage info
't' = Codepage data 'i' = HPFS386 User-id
'm' = Bitmap Tables 'M' = Bitmap data
For an up-to-date list, use the '???" command
AUTOBASE [t][l] = find the start of an HPFS partition by searching sectors
Purpose: Force a different partition start sector-nr for HPFS partition
Parameters: t One or more sector-types to use in the search
default is "spad", Super, Spare, Alloc and Dirblock
f for fnode can also be used but is less reliable
sl Sector-number to use as end for partition (optional)
Output: Search progress and final result when HPFS partition found
Remarks: Can be used if start of partition / partition-tables are bad
Use the "fs hpfs" command first to force HPFS mode.
ALLOC [+] = Show data-band allocation bitmaps, compact or [+] verbose
Purpose: Show usage and the distribution of data over the volume.
Parameters: none
Output: A single bitmap-graphic for the entire volume or for each
allocation-band when verbose format is selected
Remarks: System-reserved and Directory-band are indicated with 'S'
and 'R' respectively. Other area's are filled in according
to the degree of usage (allocation)
DIRMAP = Show directory band allocation and usage map
Purpose: Show usage of the pre-allocated directory-band
Parameters: none
Output: A single bitmap-graphic showing the allocation of the
pre-allocated directory band.
Remarks: If 100% is allocated more directory information will be
allocated elsewhere on the volume.
BITMAP [xx s D] = Show bitmap at LSN xx, size s, in alloc or [D]ir format
Purpose: Show a bitmape located at specified LSN, alloc or DIR format
Parameters: xx mandatory LSN of a bitmap sector
s optional size to dump: 1..63 specifies sectors
64..xxx specifies bytes
Default is 4 sectors (default bitmap size)
D optional Directory-format flag
Output: One bitmap-graphic for the specified bitmap LSN.
Remarks: Specifying an LSN that is not a bitmap-LSN will result in
a garbage bitmap display.
ALBIT a lsn s = Set/reset allocation bit in bitmap for lsn-range
Purpose: Manualy set or reset allocation bits in the bitmap
Parameters: a mandatory 's', 'a' or '1' will set to "allocated",
others will set to "free" state.
lsn optional Start LSN for the range, default is 'this'
s optional size for the LSN-range, default is 1
Output: none
Remarks: This is a potentialy dangerous operation.
\path-spec = find and show file/directory specified by path-spec
Purpose: Locate the fnode for a known file- or directory
Parameters: path-spec full path specification with no intervening
space after the '\' command character
or absolute- or relative path specification
with an intervening space. If the path
does not start with a '\' it is relative
to the current directory (see CD cmd).
Output: Searchlist starting at the ROOT directory upto the requested
file or directory. It is either followed by an error message
if the path-spec was not found or by the display of the
corresponding fnode information.
Remarks: The search algorithm depends on the ROOT fnode being known.
When the superblock is corrupt this fnode can be resolved
using the 'findroot' command.
PATH [n] = Show all path-components for current fnode, upto root
Purpose: Show the directory-branch that contains current file/dir
Parameters: n optional Start LSN for the search
Output: One line for each found 'parent' directory, upto the root
Remarks:
CA [lsn][opt] = Check Allocation for (current) fnode lsn
Purpose: Check allocation integrity for current fnode
Parameters: lsn optional LSN of the fnode
opt optional Options: v = Verbose, show progress
Output: Σ Start of an allocation-sector (heavily fragmented)
» Start of one file-extent (fragmented file)
· One sector, green small dot is allocation OK
■ One sector, red big dot is allocation error
Also a summary is given with the number of (failed) sectors
Remarks: Fnode maybe for a regular file (sectors must be ALLOCATED)
or for a deleted file (sectors must be FREE)
FINDROOT [n] = find the Root directory without using the superblock
Purpose: Find the fnode for the ROOT directory, even if parts of
the volume, including the superblock, are damaged.
Parameters: n optional Start LSN for the search
Output: Search-list starting at the first fnode encountered upto
the fnode for the ROOT directory when found.
Remarks: Specifying a startlsn might be needed if reading at the
start of the volume results in device errors, or if some
fnodes in the sequence are corrupted.
FIXROOT = Write the root-LSN found with the 'findroot' command back
Purpose: Fix bad Root-LSN pointer, after CHKDSK bugs or other corruption
Parameters: none
Output: none
Remarks: It is better to lock the physical disk before writing to it
FIXBOOT = Create HPFS bootsector from template and partition-table
Purpose: Fix corrupted bootsector for a HPFS partition
Parameters: none
Output: Progress and confirmation info
Remarks: This will create a valid bootsector based on WARP version 4
bootsector code and size-info from the partition table.
Only the bootsector is written, to make the partition boot
properly, it might be needed to run 'sysinsx' afterwards
The partition-table info (type and size) must still be valid!
FIXCP = Write the CodePage-LSN found with the '0#f c' command back
Purpose: Fix bad CodePage-LSN pointer
Parameters: none
Output: none
Remarks: It is better to lock the physical disk before writing to it
FIXBS [clear] = Update bad-sector table with LSN's from DFS badsec-list
Purpose: Replace the internal HPFS bad-sector list with the DFS
bad-sector list, or clear the liste completely.
Parameters: clear optional Make internal and DFS bad-sector list empty
Output: none
Remarks: The list can be the result of the "scan", "getbs", "mem" or
"import" cmd, allowing modification off-line with an editor.
The OS/2 chkdsk command will give erronous results on
"reserved for system use" until the next reboot.
It is better to lock the physical disk before writing to it
See 'lock' and 'unlock' commands
GETBS = Read HPFS bad-sector table into DFS badsec-list
Purpose: Replace the DFS bad-sector list with the internal HPFS one
Parameters: none
Output: none
Remarks: none
CS = Calculate HPFS style checksum on last-read sector
Purpose: Show / check checksum on HPFS sector (super/spare)
Parameters: none
Output: Checksum value
Remarks: Only meaningfull for superblock (10) and spareblock (11)
These checksums are also stored by HPFS in the spareblock.
FIXCS = Calcualte checksums and write super- and spare-block
Purpose: (re)calculate the checksum for superblock and spareblock
and write them both back to the disk
Parameters: none
Output: none
Remarks: none
SAVETO [dir][l] = Save filedata connected to (current) fnode to a file
Purpose: Recover a file if the fnode can still be found, by making
a low-level sector-by-sector copy of its data to a new file.
(basic functionality to be used for undelete operations)
Parameters: dir optional Path to save the file copy, default a:\
l optional LSN of the fnode of the file to recover
default is the current LSN (This)
rename optional new name for destination file, allowing
long-filenames to fit 8.3 names (floppy)
Output: Progress is reported with output like the "ca" command,
error messages will be given as appropriate
Remarks: Only the file contents is recovered, date&time and attributes
are lost. On HPFS EA's are recovered as well.
If no directory is specified it will default to the last
directory given, or "A:" when it is the first time
If the directory does not exist it will be created
Make sure that this is on a DIFFERENT drive, otherwise it
might overwrite the data you are recovering or still need
to recover later.
DELFIND [s] [o] = Find deleted files, name start with [s], using options [o]
Purpose: Find deleted files, with name starting at current LSN
Parameters: s optional shortname, first part of filename wanted
o optional options ! = fastest but silent search
Output: Find-result list (as "find* z") on screen and in memory
Remarks: List can be manipulated as usual, best viewed with "delshow"
Diagram of an example HPFS structure
Basic HPFS data-structure for Root-directory with AUTOEXEC.BAT, README file,
an OS2 subdirectory and lots of other files. The README file has it's data
allocated in 2 alloc-chunks.
╔═════════╗ ╔══════════════════╗ ╔═══════╗
║SUPER ║ ┌──>║ DIR block ║ ┌──>║ FNODE ║
║ ║ │ ║ ║ │ ║ ║
║ ║ ╔═══════╗ │ ║┌────────────────┐║ │ ║ ║ ╔══════════
║Root LSN ────>║ FNODE ║ │ ║│*Special**Start*│║ │ ║ ALLOC ──>║ DIR block
╚═════════╝ ║ ║ │ ║│entry FNODE LSN│║ │ ╚═══════╝ ║
║ ║ │ ║│BtreeDownPtr LSN│║ │ ║┌─────────
║ ALLOC ──┘ ║└────────────────┘║ │ ║│8514.RC
╚═══════╝ ║┌────────────────┐║ │ ║│entry FNO
║│OS2 (subdir) │║ │ ║│BtreeDown
║│entry FNODE LSN├────┘ ║└─────────
┌─────────────────────────────┤BtreeDownPtr LSN│║ ║┌─────────
│ ║└────────────────┘║ ║│ANSI.EXE
│ ║┌────────────────┐║
│ ║│Special-end │║
│ ╔══════════════════╗ ║│entry FNODE LSN│║ ╔══════════════════╗
└─>║ DIR block ║ ║│BtreeDownPtr LSN├───────>║ DIR block ║
║┌────────────────┐║ ║└────────────────┘║ ║┌────────────────┐║
║│*Special**Start*│║ ╚══════════════════╝ ║│*Special**Start*│║
║│entry FNODE LSN│║ ║│entry FNODE LSN│║
║│BtreeDownPtr LSN│║ ╔═══════╗ ║│BtreeDownPtr LSN│║
║└────────────────┘║ ┌─>║ FNODE ║ ║└────────────────┘║
║┌────────────────┐║ │ ║ ║ ║┌────────────────┐║
║│AUTOEXEC.BAT │║ │ ║ ║ ╔═══════════ ║│PP... filename │║
║│entry FNODE LSN├───┘ ║ ALLOC ──>║┌────────── ║│entry FNODE LSN│║
║│BtreeDownPtr LSN│║ ╚═══════╝ ║│ 1st data- ║│BtreeDownPtr LSN│║
║└────────────────┘║ ║└────────── ║└────────────────┘║
║┌────────────────┐║ ║┌────────────────┐║
║│OS1.. filename │║ ║│README filename │║
║│entry FNODE LSN│║ ┌───────────────────────────┤entry FNODE LSN│║
║│BtreeDownPtr LSN│║ │ ║│BtreeDownPtr LSN│║
║└────────────────┘║ │ ║└────────────────┘║
║┌────────────────┐║ │ ║┌────────────────┐║
║│**Special**End**│║ │ ║│XXX... filename │║
║│entry FNODE LSN│║ │ ║│entry FNODE LSN│║
║│BtreeDownPtr LSN│║ │ ║│BtreeDownPtr LSN│║
║└────────────────┘║ │ ║└────────────────┘║
╚══════════════════╝ │ ║┌────────────────┐║
│ ║│**Special**End**│║
│ ║│entry FNODE LSN│║
│ ║│BtreeDownPtr LSN│║
│ ║└────────────────┘║
│ ╚══════════════════╝
│
│ ╔════════════════════════╗
│ ┌───>║┌──────────────────────┐║
│ │ ║│ 1st data-sector │║
│ │ ║└──────────────────────┘║
│ │ ║┌──────────────────────┐║
│ ╔═══════╗ │ ║│ 2nd data-sector │║
└─>║ FNODE ║ │ ║└──────────────────────┘║
║ ║ │ ╚════════════════════════╝
║ ─────┘
║ ALLOC ║ ╔════════════════════════╗
║ ─────────>║┌──────────────────────┐║
╚═══════╝ ║│ 3rd data-sector │║
║└──────────────────────┘║
(c) 1995 ║┌──────────────────────┐║
J. v. Wijk ║│ 4th data-
Examples of DFS usage
---------------------
1) Resolve original name of FILExxxx.CHK files (created by CHKDSK)
When CHKDSK recovers files it will place in a FOUND.xxx directory in
the root-directory. This directory contains one or more recovered files
with names like FILE0001.CHK
The original name of the file is still in the Fnode, it can be shown
using the following dhpfs commands (assuming drive c:) :
Command Explanation
DFS disks Start DFS and scan physical disks
part id Select partition 'id' (must be HPFS)
\found.000\file0001.chk Search and display Fnode for .CHK
Now 15 characters of the original name are shown as "Fnode Name String"
2) Show freespace area's (HPFS)
"slt $"
3) Undelete a file; Find the fnode using:
"find z" find the next deleted fnode
"find z shortname" next deleted named shortname (case-sensitive)
"find$@ z shortname" next deleted named shortname (case-insensitive)
Add a '*' to the find command to do a repeated search (see 'find' cmd)
Use "saveto" command to copy the data for the deleted file to a directory.
Notes: - It's best to use a different drive to avoid overwriting
4) Save and restore (parts of) a disk
The "sim" command can be used to save a complete disk, including partition
information to one (very large!) file on a different (network) drive.
The save the entire unit (opened disk/partition or volume) use:
"sim img-name 0 $"
It can be restored using the "wrim" command, if and only if the destination
disk has exactly the same geometry as the source disk (heads, sectors cyl).
This could be used to clone one workstation to multiple machines.
5) List all "undeletable" files
Find the FNODES for possibly deleted files using
"find* z" or for specific files: "find*$@ z shortname"
Now list them, including PATH and recovery reliability using:
"list f+f"
Or list just a subset using any combination of wildcards:
"list f+f *\testdir\data?.txt
Use the .NNN command to select a file to undelete, and then use the
"saveto [destination-path]" command to actualy undelete it.
==> use the "delfind", "delshow" and "delsave" to work on multiple files
6) Update the bad-sector list with the results of a DFS-scan
Find all sectors that are unreadable:
"scan"
Optionaly: list, export/modify/import the resulting bad-sector list
"list +f" (list, including PATH if sector is Fnode)
"export b badguys" (Place in an ASCII file badguys.lsn)
Now edit it off-line, save as 'modified.lsn'
"import b modified"
Now replace the internal bad-sector list with the new modified one:
"fixbs"
7) Save a list of currently deleted files on an HPFS volume:
Find deleted files (could take quite a while!):
"find* z"
Save the deleted-Fnode LSN's in a file:
"export deleted"
Optionaly, also save PATH info and recovery chances using a logfile:
"log deleted"
"list f+f"
"log"
- This will result in a (possibly large!) deleted.log with one line
per deleted file with size, recovery percentage and PATH+filename
8) Show the list of free diskspace area's for HPFS volumes
"slt $ a"
9) Show all detected anomalies in the SLT (like allocation errors)
"slt * * * +"
10) Display the FAT for a diskette in drive A:
"dfs vol a"
"fatshow"
11) Display the FAT Root-directory for partition C:
"dfs part C"
"root"
12) Save the master-boot-sector on a different PC connected with a parallel
laplink cable and running the LPT tool (see www.fsys.demon.nl):
"dfs disk 1"
"sim [lpt.exe]d:\images\mbr.img 0 1"
13) Restore the master-boot-sector from a different PC connected with LPT:
"dfs disk 1"
"wrim [lpt.exe]d:\images\mbr.img 0 1"
14) Collect information to perform a manual un-fdisk (find all boot sectors):
"log unfdisk"
"disk 1"
"find* erb"
"list +d"
"export unfdisk"
15) Recover a 'lost' NTFS partition where the boot-sector is damaged and
the partition is not recognized by NT anymore (assuming 3rd partition):
"part 3"
"fs NTFS"
"fixboot"
16) Automatically FDISK a workstation using a batch- or command-file like:
echo DFSee FDISK generic workstation > dfsfdisk.log
dfsdos fdisk! newmbr 1 clean
dfsdos fdisk! create primary bmgr
dfsdos fdisk! startable 1
dfsdos fdisk! create logical fat 6 1 -1,c MAINT
dfsdos fdisk! create primary hpfs * 1 +0 WARP
This will create a disk with bootmanager (image prepared with DFSIBMGR)
a small maintanance partition at the end of the disk minus 1 cylinder
and a primary partition filling the rest of the disk.
17) Automatically FDISK a server-machine using a batch- or command-file like:
echo DFSee FDISK RAID server > dfsfdisk.log
dfsdos fdisk! newmbr * clean
dfsdos fdisk! create primary bmgr
dfsdos fdisk! startable 1
dfsdos fdisk! create primary hpfs 300 1 0 SYSTEM
dfsdos fdisk! create logical fat 200 1
dfsdos fdisk! create logical hpfs * 1 0 RESTORE
dfsdos fdisk! create logical hpfs * 2
dfsdos fdisk! create logical fat * 3
dfsdos fdisk! setboot 0:SYSTEM
dfsdos fdisk! setboot m:advanced
Known limitations and bugs
--------------------------
- There is only recognition for BeFS, the BEOS journalling filesystem
- There is recognition for NTFS, and most of the MFT record display
- FAT32 is implemented and tested using Henk Kelders OS2FAT32.IFS, no
support for the special OS2FAT32 EA's is there yet.
- Allocation integrity checks do not check the allocation for EA's
- Accessing (large ?) partition using the 'vol' command in the DFSDOS version
seems to be unreliable. Wrong data is sometimes returned.
On a diskette (vol a:) everything seems to be OK, so I recommend using
only the 'part x' command for accessing hard-disk partitions and use
the 'vol' command only for floppies. (DFSDOS restriction only)
- LZW compression on the SIM/WRIM commands does not work yet in combination
with the (OS/2 only) LPT tool using I/O through a named-pipe.
- LZW compression seems to be UNRELIABLE on large images!
- Automatic reboot (in SETBOOT) doesn't work with DFSDOS and Win9x
Considered improvements
-----------------------
Rewrite of this documentaion in a description, command-reference and
technical info on filesystems (possibly in HTML)
More automatic detection of inconsistencies (like CHKDSK, FST, HVA, CHKPART)
This will show HPFS problems like CHKDSK does, but in more detail and
maybe some more types of inconsistencies.
Real coverage of other file-systems besides HPFS like FAT, EXT2, NTFS ...
VFAT date/time info and long filenames added in ver 2.56
FAT32 functionality added/fixed in ver 2.65
NTFS functionality expanded in version ver 2.80
Generic edit and write capability,
This will allow recovery operations without using other (third-party)
utilities. The user interface needs to support screen-editing for this.
Note: Some write enabled commands have been implemented starting with 1.90
Improved volume/disk locking implemented in version 2.25
Basic edit and write capability added in version 2.50
Writing to a 'volume' and from the DFSDOS version in 2.55
Recovery for missing/damaged bootsector resulting in FDISK
display of "unformatted". (Note: implemented for HPFS and NTFS as of 2.82)
Recovery for a 'quick format' on HPFS (unformat)
Recovery for repartitioning (un-fdisk)
Save and restore complete partitioning schemes using diskarea's or diskette
LINUX version, port being investigated, low priority.
More FDISK and some FORMAT capabilities, creating FAT or HPFS partitions
This will allow unattended, batch-like installation procedures
to be started from DOS diskettes.
FDISK query command(s) to determine disk-sizes, nr-of-partitions etc.
from the command-line or a batch-file (in RC / errorlevel)
Save and restore complete partitioning info to/from a file or harddisk area.
More complete Logical Volume Manager support (LVM) and support for the
Journalled File System (JFS) for OS/2 Warpserver for e-bussines (Aurora)