8980 BIOS clock is sometimes one hour fast
[unleashed.git] / usr / src / man / man1m / fsdb_udfs.1m
blob60ae5524e099e320642315d1565b43f76aa8a646
1 '\" te
2 .\"  Copyright (c) 1999 Sun Microsystems, Inc. All Rights Reserved.
3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
6 .TH FSDB_UDFS 1M "Nov 26, 2017"
7 .SH NAME
8 fsdb_udfs \- udfs file system debugger
9 .SH SYNOPSIS
10 .LP
11 .nf
12 \fBfsdb \fR [\fB-F\fR] udfs [\fIgeneric_option\fR] [\fB-o \fR\fIspecific_option\fR] \fIspecial\fR
13 .fi
15 .SH DESCRIPTION
16 .LP
17 The \fBfsdb_udfs\fR command is an interactive tool that can be used to patch up
18 a damaged \fBudfs\fR file system. \fBfsdb_udfs\fR has conversions to translate
19 block and i-numbers into their corresponding disk addresses. Mnemonic offsets
20 to access different parts of an inode are also included. Mnemonic offsets
21 greatly simplify the process of correcting control block entries or descending
22 the file system tree.
23 .sp
24 .LP
25 \fBfsdb\fR contains several error-checking routines to verify inode and block
26 addresses. These can be disabled if necessary by invoking \fBfsdb\fR with the
27 \fB-o\fR option or by using the \fBo\fR command.
28 .sp
29 .LP
30 \fBfsdb\fR reads one block at a time, and therefore works with raw as well as
31 block \fBI/O\fR devices. A buffer management routine is used to retain commonly
32 used blocks of data in order to reduce the number of read system calls. All
33 assignment operations result in an immediate write-through of the corresponding
34 block. In order to modify any portion of the disk, \fBfsdb\fR must be invoked
35 with the \fB-w\fR option.
36 .sp
37 .LP
38 Wherever possible, \fBadb\fR-like syntax has been adopted to promote the use of
39 \fBfsdb\fR through familiarity.
40 .SH OPTIONS
41 .LP
42 The following options are supported:
43 .sp
44 .ne 2
45 .na
46 \fB\fB-o\fR \fIspecific_option\fR\fR
47 .ad
48 .RS 22n
49 Specify \fBudfs\fR file system specific options in a comma-separated list with
50 no intervening spaces. The following specific options are supported:
51 .sp
52 .ne 2
53 .na
54 \fBo\fR
55 .ad
56 .RS 12n
57 Override some error conditions.
58 .RE
60 .sp
61 .ne 2
62 .na
63 \fBp=\fIstring\fR\fR
64 .ad
65 .RS 12n
66 Set prompt to \fIstring\fR.
67 .RE
69 .sp
70 .ne 2
71 .na
72 \fBw\fR
73 .ad
74 .RS 12n
75 Open for write.
76 .RE
78 .sp
79 .ne 2
80 .na
81 \fB?\fR
82 .ad
83 .RS 12n
84 Display usage.
85 .RE
87 .RE
89 .SH USAGE
90 .LP
91 Numbers are considered hexadecimal by default. The user has control over how
92 data is to be displayed or accepted. The \fBbase\fR command displays or sets
93 the input and output base. Once set, all input defaults to this base and all
94 output displays in this base. The base can be overriden temporarily for input
95 by preceding hexadecimal numbers by \fB0x\fR, preceding decimal numbers with a
96 \fB0t\fR, or octal numbers with a \fB0\fR. Hexadecimal numbers beginning with
97 \fBa\fR-\fBf\fR or \fBA\fR -\fBF\fR must be preceded with a \fB0x\fR to
98 distinguish them from commands.
99 .sp
101 Disk addressing by \fBfsdb\fR is at the byte level. However, \fBfsdb\fR offers
102 many commands to convert a desired inode, directory entry, block, and so forth,
103 to a byte address. After the address has been calculated, \fBfsdb\fR records
104 the result in the current address (\fBdot\fR).
107 Several global values are maintained by \fBfsdb\fR\fB\fR:
108 .RS +4
110 .ie t \(bu
111 .el o
112 Current base (referred to as \fBbase\fR)
114 .RS +4
116 .ie t \(bu
117 .el o
118 Current address (referred to as \fBdot\fR)
120 .RS +4
122 .ie t \(bu
123 .el o
124 Current inode (referred to as \fBinode\fR)
126 .RS +4
128 .ie t \(bu
129 .el o
130 Current count (referred to as \fBcount\fR)
132 .RS +4
134 .ie t \(bu
135 .el o
136 Current type (referred to as \fBtype\fR)
140 Most commands use the preset value of \fBdot\fR in their execution. For
141 example,
143 .in +2
145  > 2:inode
147 .in -2
152 first sets the value of dot (\fB\&.\fR) to \fB2\fR, colon (\fB:\fR), signifies
153 the start of a command, and the \fBinode\fR command sets \fBinode\fR to
154 \fB2\fR. A count is specified after a comma (\fB,\fR). Once set, count remains
155 at this value until a new command is encountered that resets the value back to
156 \fB1\fR (the default).
159 So, if
161 .in +2
163 > 2000,400/X
165 .in -2
170 is entered, \fB400\fR hex longs are listed from \fB2000\fR, and when completed,
171 the value of dot is \fB 2000 + 400 * sizeof\fR (long). If a RETURN is then
172 entered, the output routine uses the current values of \fBdot\fR, \fBcount\fR,
173 and \fBtype\fR and displays \fB400 \fRmore hex longs. An asterisk (\fB*\fR)
174 causes the entire block to be displayed. An example showing several commands
175 and the use of RETURN would be:
177 .in +2
179 > 2:ino; 0:dir?d
181 .in -2
188 .in +2
190 > 2:ino; 0:db:block?d
192 .in -2
197 The two examples are synonymous for getting to the first directory entry of the
198 root of the file system. Once there, subsequently entering a RETURN, plus
199 (\fB+\fR), or minus (\fB-\fR)  advances to subsequent entries. Notice that
201 .in +2
203 > 2:inode; :ls
205 .in -2
212 .in +2
214 > :ls /
216 .in -2
221 is again synonymous.
222 .SS "Expressions"
224 The following symbols are recognized by \fBfsdb\fR:
226 .ne 2
228 \fBRETURN\fR
230 .RS 13n
231 Update the value of dot by the current value of \fItype\fR and \fIdisplay\fR
232 using the current value of \fIcount\fR.
236 .ne 2
238 \fB\fI#\fR\fR
240 .RS 13n
241 Update the value of dot by specifying a numeric expression. Specify numeric
242 expressions using addition, subtraction, multiplication, and division
243 operators ( \fB+\fR, \fB-\fR, \fB*\fR, and \fB%\fR). Numeric expressions are
244 evaluated from left to right and can use parentheses. After evaluation, the
245 value of dot is updated.
249 .ne 2
251 \fB, \fIcount\fR\fR
253 .RS 13n
254 Update the count indicator. The global value of \fIcount\fR is updated to
255 \fIcount\fR. The value of \fIcount\fR remains until a new command is run. A
256 \fIcount\fR specifier of \fB*\fR attempts to show a blocks's worth of
257 information. The default for \fIcount\fR is \fB1\fR.
261 .ne 2
263 \fB? \fI f\fR\fR
265 .RS 13n
266 Display in structured style with format specifier \fBf\fR. See \fBFormatted
267 Output\fR.
271 .ne 2
273 \fB/ \fIf\fR\fR
275 .RS 13n
276 Display in unstructured style with format specifier \fBf\fR. See \fBFormatted
277 Output\fR.
281 .ne 2
283 \fB\&.\fR
285 .RS 13n
286 Display the value of dot.
290 .ne 2
292 \fB+\fIe\fR\fR
294 .RS 13n
295 Increment the value of dot by the expression \fIe\fR. The amount actually
296 incremented is dependent on the size of type: \fBdot = dot + \fR\fIe \fR\fB*
297 \fR\fBsizeof\fR (\fItype\fR) The default for \fIe\fR is \fB1\fR.
301 .ne 2
303 \fB\(mi\fIe\fR\fR
305 .RS 13n
306 Decrement the value of dot by the expression \fIe \fR. See \fB+\fR.
310 .ne 2
312 \fB*\fIe\fR\fR
314 .RS 13n
315 Multiply the value of dot by the expression \fIe\fR. Multiplication and
316 division don't use \fItype\fR. In the above calculation of dot, consider the
317 \fBsizeof\fR (\fItype\fR) to be \fB1\fR.
321 .ne 2
323 \fB%\fIe\fR\fR
325 .RS 13n
326 Divide the value of dot by the expression \fIe\fR. See \fB*\fR.
330 .ne 2
332 \fB< \fIname\fR\fR
334 .RS 13n
335 Restore an address saved in register \fIname\fR. \fIname\fR must be a single
336 letter or digit.
340 .ne 2
342 \fB> \fIname\fR\fR
344 .RS 13n
345 Save an address in register \fIname\fR. \fIname\fR must be a single letter or
346 digit.
350 .ne 2
352 \fB= \fIf\fR\fR
354 .RS 13n
355 Display indicator. If \fIf\fR is a legitimate format specifier (see
356 \fBFormatted Output\fR), then the value of dot is displayed using format
357 specifier \fIf\fR. Otherwise, assignment is assumed. See \fB= [s] [e]\fR.
361 .ne 2
363 \fB= [\fIs\fR] [\fIe\fR]\fR
365 .RS 13n
366 Change the value of dot using an assignment indicator. The address pointed to
367 by dot has its contents changed to the value of the expression \fIe\fR or to
368 the \fBASCII\fR representation of the quoted (\fB"\fR) string \fIs\fR. This can
369 be useful for changing directory names or \fBASCII\fR file information.
373 .ne 2
375 \fB=+ \fIe\fR\fR
377 .RS 13n
378 Change the value of dot using an incremental assignment. The address pointed to
379 by dot has its contents incremented by expression \fIe\fR.
383 .ne 2
385 \fB=- e\fR
387 .RS 13n
388 Change the value of dot using a decremental assignment. Decrement the contents
389 of the address pointed to by dot by expression \fIe\fR.
392 .SS "Commands"
394 A command must be prefixed by a colon (\fB:\fR). Only enough letters of the
395 command to uniquely distinguish it are needed. Multiple commands can be entered
396 on one line by  separating them by a SPACE, TAB, or semicolon (\fB;\fR).
399 To view a potentially unmounted disk in a reasonable manner, \fBfsdb\fR
400 supports the \fBcd\fR, \fBpwd\fR, \fBls\fR, and \fBfind\fR commands. The
401 functionality of each of these commands basically matches that of its UNIX
402 counterpart. See \fBcd\fR(1), \fBpwd\fR(1), \fBls\fR(1), and \fBfind\fR(1) for
403 details. The \fB*\fR, \fB,\fR, \fB?\fR, and \fB-\fR wildcard characters are
404 also supported.
407 The following commands are supported:
409 .ne 2
411 \fBbase[=\fIb\fR]\fR
413 .sp .6
414 .RS 4n
415 Display or set the base. All input and output is governed by the current base.
416 Without the \fB=\fR \fIb\fR, displays the current base. Otherwise, sets the
417 current base to \fIb\fR. Base is interpreted using the old value of base, so to
418 ensure correctness use the \fB0\fR, \fB0t\fR, or \fB0x\fR prefix when changing
419 the base. The default for base is hexadecimal.
423 .ne 2
425 \fBblock\fR
427 .sp .6
428 .RS 4n
429 Convert the value of dot to a block address.
433 .ne 2
435 \fBcd [\fIdir\fR]\fR
437 .sp .6
438 .RS 4n
439 Change the current directory to directory  \fIdir\fR. The current values of
440 inode and dot are also updated. If \fBdir\fR is not specified, changes
441 directories to inode 2, root (\fB/\fR).
445 .ne 2
447 \fBdirectory\fR
449 .sp .6
450 .RS 4n
451 If the current inode is a directory, converts the value of dot to a directory
452 slot offset in that directory, and dot now points to this entry.
456 .ne 2
458 \fBfile\fR
460 .sp .6
461 .RS 4n
462 Set the value of dot as a relative block count from the beginning of the file.
463 The value of dot is updated to the first byte of  this block.
467 .ne 2
469 \fBfind \fIdir\fR [\fB-name\fR \fIn\fR] | [\fB-inum\fR\fI i\fR]\fR
471 .sp .6
472 .RS 4n
473 Find files by name or i-number. Recursively searches directory \fIdir\fR and
474 below for file names whose i-number matches\fB i\fR or whose name matches
475 pattern \fIn\fR. Only one of the two options (\fB-name\fR or \fB-inum\fR) can
476 be used at one time. The find \fB-print\fR is not necessary or accepted.
480 .ne 2
482 \fBfill=\fIp\fR\fR
484 .sp .6
485 .RS 4n
486 Fill an area of disk with pattern \fIp\fR. The area of disk is delimited by dot
487 and count.
491 .ne 2
493 \fBinode\fR
495 .sp .6
496 .RS 4n
497 Convert the value of dot to an inode address. If successful, the current value
498 of inode is updated as well as the value of dot. As a convenient shorthand, if
499 \fB:inode\fR appears at the beginning of the line, the value of dot is set to
500 the current inode and that inode is displayed in inode format.
504 .ne 2
506 \fBls [ \fB-R\fR ] [\fB-l\fR ] \fIpat1\fR \fIpat2\fR...\fR
508 .sp .6
509 .RS 4n
510 List directories or files. If no file is specified, the current directory is
511 assumed. Either or both of the options can be used (but, if used, must be
512 specified before the filename specifiers). Wild card characters are available
513 and multiple arguments are acceptable. The long listing shows only the i-number
514 and the name; use the inode command with \fB?i\fR to get more information.
518 .ne 2
520 \fBoverride\fR
522 .sp .6
523 .RS 4n
524 Toggle the value of override. Some error conditions might be overridden if
525 override is toggled to \fBon\fR.
529 .ne 2
531 \fBprompt "\fIp\fR"\fR
533 .sp .6
534 .RS 4n
535 Change the \fBfsdb\fR prompt to \fIp\fR. \fIp\fR must be enclosed in quotes.
539 .ne 2
541 \fBpwd\fR
543 .sp .6
544 .RS 4n
545 Display the current working directory.
549 .ne 2
551 \fBquit\fR
553 .sp .6
554 .RS 4n
555 Quit \fBfsdb\fR.
559 .ne 2
561 \fBtag\fR
563 .sp .6
564 .RS 4n
565 Convert the value of dot and if this is a valid tag, print the volume structure
566 according to the tag.
570 .ne 2
572 \fB!\fR
574 .sp .6
575 .RS 4n
576 Escape to the shell.
579 .SS "Inode Commands"
581 In addition to the above commands, several other commands deal with inode
582 fields and operate directly on the current inode (they still require the colon
583 (\fB:\fR). They can be used to more easily display or change the particular
584 fields. The value of dot is only used by the \fB:db\fR and \fB:ib\fR commands.
585 Upon completion of the command, the value of dot is changed so that it points
586 to that particular field. For example,
588 .in +2
590 > :ln=+1
592 .in -2
597 increments the link count of the current inode and sets the value of dot to the
598 address of the link count field.
601 The following inode commands are supported:
603 .ne 2
605 \fBat\fR
607 .RS 8n
608 Access time
612 .ne 2
614 \fBbs\fR
616 .RS 8n
617 Block size
621 .ne 2
623 \fBct\fR
625 .RS 8n
626 Creation time
630 .ne 2
632 \fBgid\fR
634 .RS 8n
635 Group id
639 .ne 2
641 \fBln\fR
643 .RS 8n
644 Link number
648 .ne 2
650 \fBmt\fR
652 .RS 8n
653 Modification time
657 .ne 2
659 \fBmd\fR
661 .RS 8n
662 Mode
666 .ne 2
668 \fBmaj\fR
670 .RS 8n
671 Major device number
675 .ne 2
677 \fBmin\fR
679 .RS 8n
680 Minor device number
684 .ne 2
686 \fBnm\fR
688 .RS 8n
689 This command actually operates on the directory name field. Once      poised at
690 the desired directory entry (using the \fBdirectory\fR command), this command
691 allows you to change or display the directory name. For example,
693 .in +2
695  > 7:dir:nm="foo"
697 .in -2
700 gets the \fB7\fRth directory entry of the current inode and changes its name to
701 \fBfoo\fR. Directory names cannot be made larger than the field allows. If an
702 attempt is made to make a directory name larger than the field allows,, the
703 string is truncated to fit and a warning message is displayed.
707 .ne 2
709 \fBsz\fR
711 .RS 8n
712 File size
716 .ne 2
718 \fBuid\fR
720 .RS 8n
721 User \fBID\fR
725 .ne 2
727 \fBuniq\fR
729 .RS 8n
730 Unique \fBID\fR
733 .SS "Formatted Output"
735 Formatted output comes in two styles and many format types. The two styles of
736 formatted output are: structured and unstructured. Structured output is used to
737 display inodes, directories, and so forth. Unstructured output displays raw
738 data.
741 Format specifiers are preceded by the slash (\fB/\fR) or question mark
742 (\fB?\fR) character. \fItype\fR is updated as necessary upon completion.
745 The following format specifiers are preceded by the \fB?\fR character:
747 .ne 2
749 \fBi\fR
751 .RS 5n
752 Display as inodes in the current base.
756 .ne 2
758 \fBd\fR
760 .RS 5n
761 Display as directories in the current base.
766 The following format specifiers are preceded by the \fB/\fR character:
768 .ne 2
770 \fBb\fR
772 .RS 9n
773 Display as bytes in the current base.
777 .ne 2
779 \fBc\fR
781 .RS 9n
782 Display as characters.
786 .ne 2
788 \fBo | O\fR
790 .RS 9n
791 Display as octal shorts or longs.
795 .ne 2
797 \fBd | D\fR
799 .RS 9n
800 Display as decimal shorts or longs.
804 .ne 2
806 \fBx | X\fR
808 .RS 9n
809 Display as hexadecimal shorts or longs.
812 .SH EXAMPLES
814 \fBExample 1 \fRUsing fsdb as a calculator for complex arithmetic
817 The following command displays \fB2010\fR in decimal format, and is an example
818 of using \fBfsdb\fR as a calculator for complex arithmetic.
821 .in +2
823 > 2000+400%(20+20)=D
825 .in -2
829 \fBExample 2 \fRUsing fsdb to display an i-number in idode fomat
832 The following command displays the i-number \fB386\fR in inode format.\fB386\fR
833 becomes the current inode.
836 .in +2
838 > 386:ino?i
840 .in -2
844 \fBExample 3 \fRUsing fsdb to change the link count
847 The following command changes the link count for the current inode to \fB4\fR.
850 .in +2
852 > :ln=4
854 .in -2
858 \fBExample 4 \fRUsing fsdb to increment the link count
861 The following command increments the link count by \fB1\fR.
864 .in +2
866 > :ln=+1
868 .in -2
872 \fBExample 5 \fRUsing fsdb to display the creation time as a hexadecimal long
875 The following command displays the creation time as a hexadecimal long.
878 .in +2
880 > :ct=X
882 .in -2
886 \fBExample 6 \fRUsing fsdb to display the modification time in time format
889 The following command displays the modification time in time format.
892 .in +2
894 > :mt=t
896 .in -2
900 \fBExample 7 \fRUsing fsdb to display in ASCII
903 The following command displays, in \fBASCII\fR, block \fB0\fR of the file
904 associated with the current inode.
907 .in +2
909 > 0:file/c
911 .in -2
915 \fBExample 8 \fRUsing fsdb to display the directory enteries for the root inode
918 The following command displays the first block's directory entries for the root
919 inode of this file system. This command stops prematurely if the \fBEOF\fR is
920 reached.
923 .in +2
925 > 2:ino,*?d
927 .in -2
931 \fBExample 9 \fRUsing fsdb to change the current inode
934  The following command changes the current inode to that associated with the
935 \fB5\fRth directory entry (numbered from \fB0\fR) of the current inode. The
936 first logical block of the file is then displayed in \fBASCII\fR.
939 .in +2
941 > 5:dir:inode; 0:file,*/c
943 .in -2
947 \fBExample 10 \fRUsing fsdb to change the i-number
950  The following command changes the i-number for the \fB7\fRth directory slot in
951 the root directory to \fB3\fR.
954 .in +2
956 > 2:inode; 7:dir=3
958 .in -2
962 \fBExample 11 \fRUsing fsdb to change the name field
965 The following command changes the \fIname\fR field in the directory slot to
966 \fBname\fR.
969 .in +2
971  > 7:dir:nm="name"
973 .in -2
977 \fBExample 12 \fRUsing fsdb to display the a block
980 The following command displays the \fB3\fRrd block of the current inode as
981 directory entries.
984 \fBExample 13 \fRUsing fsdb to set the contents of address
987 The following command sets the contents of address \fB2050\fR to
988 \fB0xffffffff\fR. \fB0xffffffff\fR can be truncated, depending on the current
989 type.
992 .in +2
994 > 2050=0xffff
996 .in -2
1000 \fBExample 14 \fRUsing fsdb to place an ASCII string at an address
1003 The following command places the \fBASCII\fR string \fBthis is some text\fR at
1004 address \fB1c92434\fR.
1007 .in +2
1009 > 1c92434="this is some text"
1011 .in -2
1014 .SH SEE ALSO
1016 \fBclri\fR(1M), \fBfsck_udfs\fR(1M), \fBdir\fR(4),  \fBattributes\fR(5)