add README and man page
This commit is contained in:
parent
5bbbed059e
commit
4a10e87da5
1
Makefile
1
Makefile
|
@ -8,4 +8,5 @@ clean:
|
||||||
rm -f dump_inode
|
rm -f dump_inode
|
||||||
|
|
||||||
install:
|
install:
|
||||||
|
install -D dump_inode.8 $(DESTDIR)$(PREFIX)/man/man8/dump_inode.8
|
||||||
install -Ds dump_inode $(DESTDIR)$(PREFIX)/sbin/dump_inode
|
install -Ds dump_inode $(DESTDIR)$(PREFIX)/sbin/dump_inode
|
||||||
|
|
4
README
Normal file
4
README
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
A small tool to recover deleted files from UFS/UFS2 filesystems on
|
||||||
|
OpenBSD. Might also work on other BSD variants, but I have not
|
||||||
|
tested this. It allows inspecting the inode table, listing of deleted
|
||||||
|
entries in a directory and dumping of data belonging to an inode.
|
123
dump_inode.8
Normal file
123
dump_inode.8
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 2023 Thomas Lindner <tom@dl6tom.de>
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this software for any
|
||||||
|
.\" purpose with or without fee is hereby granted, provided that the above
|
||||||
|
.\" copyright notice and this permission notice appear in all copies.
|
||||||
|
.\"
|
||||||
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
.\"
|
||||||
|
.Dd February 15, 2023
|
||||||
|
.Dt DUMP_INODE 8
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm dump_inode
|
||||||
|
.Nd recover deleted files from UFS/UFS2 filesystems
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm dump_inode
|
||||||
|
.Op Fl ad
|
||||||
|
.Op Fl i Ar inode
|
||||||
|
.Op Fl o Ar outputfile
|
||||||
|
.Ar partition
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
allows recovery of deleted files by inspecting the inode table, listing of
|
||||||
|
deleted entries in a directory and dumping of data belonging to an inode.
|
||||||
|
.Pp
|
||||||
|
Generally, you would
|
||||||
|
.Xr umount 8
|
||||||
|
a filesystem from which you want to recover a deleted file, to avoid
|
||||||
|
overwriting data.
|
||||||
|
However, to recover a file with
|
||||||
|
.Nm
|
||||||
|
it is required that there is still a process that has the file open, to avoid
|
||||||
|
that the size and block numbers in the inode are cleared.
|
||||||
|
Therefore, it is necessary to keep the filesystem mounted.
|
||||||
|
.Pp
|
||||||
|
The options are as follows:
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Fl a
|
||||||
|
Iterate over the whole inode table.
|
||||||
|
Conflicts with
|
||||||
|
.Fl i Ar inode .
|
||||||
|
.It Fl d
|
||||||
|
List directory entries.
|
||||||
|
Tries to also list deleted entries.
|
||||||
|
.It Fl i Ar inode
|
||||||
|
Specify the inode.
|
||||||
|
Conflicts with
|
||||||
|
.Fl a .
|
||||||
|
.It Fl o Ar outputfile
|
||||||
|
Write the filedata of the inode to
|
||||||
|
.Ar outputfile .
|
||||||
|
Requires
|
||||||
|
.Fl i Ar inode .
|
||||||
|
Use filename - to write to stdout.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
If neither
|
||||||
|
.Fl d
|
||||||
|
nor
|
||||||
|
.Fl o Ar outputfile
|
||||||
|
are specified, the default action is showing the inode content.
|
||||||
|
You must specify either
|
||||||
|
.Fl a
|
||||||
|
or
|
||||||
|
.Fl i Ar inode .
|
||||||
|
.Sh EXAMPLES
|
||||||
|
You can use
|
||||||
|
.Xr ls 1
|
||||||
|
to get the inode number of a directory:
|
||||||
|
.Pp
|
||||||
|
.Dl # ls -di example
|
||||||
|
.Dl 1671677 example
|
||||||
|
.Pp
|
||||||
|
Then use
|
||||||
|
.Nm
|
||||||
|
to list the directory and find the inode number of the deleted file:
|
||||||
|
.Pp
|
||||||
|
.Dl # dump_inode -di 1671677 sd1k
|
||||||
|
.Dl deleted:0 inode:1671677 type:d name:.
|
||||||
|
.Dl deleted:0 inode:10079295 type:d name:..
|
||||||
|
.Dl deleted:1 inode:1671678 type:f name:test
|
||||||
|
.Dl deleted:1 inode:0 type:u name:
|
||||||
|
.Pp
|
||||||
|
Otherwise, you can list directories starting from the filesystem root, which
|
||||||
|
has always inode number 2:
|
||||||
|
.Pp
|
||||||
|
.Dl # dump_inode -di 2 sd1k
|
||||||
|
.Dl deleted:0 inode:2 type:d name:.
|
||||||
|
.Dl deleted:0 inode:2 type:d name:..
|
||||||
|
.Dl deleted:0 inode:8303627 type:d name:tom
|
||||||
|
.Dl deleted:0 inode:522240 type:d name:_sysupgrade
|
||||||
|
.Dl deleted:0 inode:3 type:d name:lost+found
|
||||||
|
.Dl deleted:1 inode:1201152 type:d name:test
|
||||||
|
.Dl deleted:1 inode:8192 type:u name:
|
||||||
|
.Pp
|
||||||
|
Note, that the listing of deleted entries is based on heuristics and might be
|
||||||
|
spurious.
|
||||||
|
.Pp
|
||||||
|
If you cannot find the inode number of your file this way, you can try to dump
|
||||||
|
the whole inode table.
|
||||||
|
To find your file this way, you need some criteria to identify it e.g. files
|
||||||
|
that are deleted but still open have nlink 0 but a size that is not 0:
|
||||||
|
.Pp
|
||||||
|
.Dl # dump_inode -a sd1k | grep nlink:0 | grep -v size:0
|
||||||
|
.Dl ...
|
||||||
|
.Dl inode:1671678 type:f mode:644 nlink:0 uid:1000 gid:1000 size:5 atime:1676817142 mtime:1676817121 ctime:1676817200
|
||||||
|
.Dl ...
|
||||||
|
.Pp
|
||||||
|
Note, that this data might not be written to disk yet and your inode still has
|
||||||
|
a nlink that is not 0.
|
||||||
|
You can force writeback to disk with
|
||||||
|
.Xr sync 8 .
|
||||||
|
.Pp
|
||||||
|
Once you got the inode of your file you can recover its data:
|
||||||
|
.Pp
|
||||||
|
.Dl # dump_inode -i 1671678 -o test sd1k
|
Loading…
Reference in a new issue