Dump-like file system backup for Unix, built on Venti.
This commit is contained in:
parent
0c98da8bf8
commit
004aa293f3
27 changed files with 4437 additions and 0 deletions
54
src/cmd/vbackup/diskcat.c
Normal file
54
src/cmd/vbackup/diskcat.c
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <diskfs.h>
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: fscat fspartition\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
extern int nfilereads;
|
||||
u8int *zero;
|
||||
u32int i;
|
||||
u32int n;
|
||||
Block *b;
|
||||
Disk *disk;
|
||||
Fsys *fsys;
|
||||
|
||||
ARGBEGIN{
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
if(argc != 1)
|
||||
usage();
|
||||
|
||||
if((disk = diskopenfile(argv[0])) == nil)
|
||||
sysfatal("diskopen: %r");
|
||||
if((disk = diskcache(disk, 16384, 16)) == nil)
|
||||
sysfatal("diskcache: %r");
|
||||
if((fsys = fsysopen(disk)) == nil)
|
||||
sysfatal("ffsopen: %r");
|
||||
|
||||
zero = emalloc(fsys->blocksize);
|
||||
fprint(2, "%d blocks total\n", fsys->nblock);
|
||||
n = 0;
|
||||
for(i=0; i<fsys->nblock; i++){
|
||||
if((b = fsysreadblock(fsys, i)) != nil){
|
||||
write(1, b->data, fsys->blocksize);
|
||||
n++;
|
||||
blockput(b);
|
||||
}else
|
||||
write(1, zero, fsys->blocksize);
|
||||
if(b == nil && i < 2)
|
||||
sysfatal("block %d not in use", i);
|
||||
}
|
||||
fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);
|
||||
exits(nil);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue