Hitta super-block backups i NetBSD 2.0 ffsv2

Johan Krüger-Haglert aliquis at link-net.org
Mon Jan 2 13:26:30 CET 2006


On Mon, Jan 02, 2006 at 10:34:26AM +0100, Urban Boquist wrote:
> Johan> Jag har en (tidigare) NetBSD 2.x maskin vars disk har rasat
> Johan> verkar det som, jag kommer åt alla slices förutom 'a' där jag
> Johan> [...]
> 
> Johan> Vet inte om det här är rätt sätt att använda det men särskilt
> Johan> bra går det ju inte:
> Johan> # dumpfs -a /dev/wd1
> Johan> dumpfs: /dev/wd1d: could not find superblock, skipped
> 
> Hmmm, du borde nog köra det på /dev/rwd1a om det är filsystemet på
> a-partitionen du har problem med (och det heter inte "slice" i NetBSD). ;-)
> 
> Johan> Om någon kan hjälpa mig är jag tacksam, om ingen kan är det
> Johan> inte hela världen, /home överlevde iaf ;)
> 
> Förtvivla inte!
> 
> Jag råkade stava fel i ett dd-kommando häromveckan och blåste helt
> början av en disk. Programmet nedan fick mig på fötter igen snabbt,
> det letar superblock med det magiska numret. Ger en del falska träffar
> tyvärr, ta något som ser bra ut och läs ut sektorn med dd och titta
> sedan på den med hexdump.
> 
> Lycka till! :-)
> 
> Mvh,
> 	-- Urban
> 
> #include <fcntl.h>
> #include <unistd.h>
> #include <sys/param.h>
> #include <ufs/ufs/dinode.h>
> #include <ufs/ffs/fs.h>
> 
> main(int argc, char **argv)
> {
> 	static char buf[2048];
> 	struct fs *fs;
> 	int fd;
> 	u_int64_t i;
> 	int j;
> 
> 	fd = open(argv[1], O_RDONLY, 0);
> 	if (fd < 0) {
> 		perror("open");
> 		exit(1);
> 	}
> 	for (i = 0;;i++) {
> 		if (lseek(fd, i * 512, SEEK_SET) < 0) {
> 			perror("seek");
> 			exit(1);
> 		}
> 		if (read(fd, buf, sizeof(buf)) != sizeof(buf)) {
> 			perror("read");
> 			exit(1);
> 		}
> 		if (i % (2048*1024) == 0) {
> 			printf("i=%qd, ",i);
> 			printf("%qd GB\n", i / (2048*1024));
> 		}
> 
> 		for (j = 0; j < sizeof(buf) - sizeof(struct fs); j+=4) {
> 			fs = (struct fs*)&buf[j];
> 			if (fs->fs_magic == FS_UFS1_MAGIC &&
> 			    (fs->fs_fsmnt[0] == '/' || fs->fs_fsmnt[0] == '\0'))
> 				printf("superblock in sector %qd:\n", i);
> 		}
> 	}
> 	exit(0);
> }

Vet inte om detta gällde freebsd eller netbsd men jag provade:
# hexdump /dev/rwd1a |grep "0119 1954"
hexdump: /dev/rwd1a: Input/output error

(ovanstående kod)
# ./a.out /dev/rwd1a
i=0, 0 GB
read: Input/output error

Jan  2 13:20:00  /netbsd: wd1a: error reading fsbn 128 of 128-143 (wd1 bn 191; cn 0 tn 3 sn 2), retrying
Jan  2 13:20:00  /netbsd: wd1: (uncorrectable data error)

Jan  2 13:21:51  /netbsd: wd1a: error reading fsbn 128 of 128-255 (wd1 bn 191; cn 0 tn 3 sn 2), retrying
Jan  2 13:21:51  /netbsd: wd1: (uncorrectable data error)

Jan  2 13:23:23  /netbsd: wd1a: error reading fsbn 125 of 125-128 (wd1 bn 188; cn 0 tn 2 sn 62), retrying
Jan  2 13:23:23  /netbsd: wd1: (uncorrectable data error)

Jan  2 13:23:32  /netbsd: wd1a: error reading fsbn 128 of 125-128 (wd1 bn 191; cn 0 tn 3 sn 2), retrying
Jan  2 13:23:32  /netbsd: wd1: (uncorrectable data error)
Jan  2 13:23:34  /netbsd: wd1a: error reading fsbn 128 of 125-128 (wd1 bn 191; cn 0 tn 3 sn 2)wd1: (uncorrectable data error)

Söta sådana får jag ju...

-- 
   ______  __     __  ____  _____  __  _____   Johan Krüger-Haglert
  (___  :\/  \___/  \/    \/  /  \/  \/  ___)  <aliquis at link-net.org> 
   /  .   \  /   )  /  /  /  /   /   /___  .:\ Phn: +46 (0)xxxxxxxxxxxx
  (________)____/__/\__\\/\_____/\__/\_______/      +46 (0)xxxxxxxxxxxx
  GPG: 0x18D55ECE  (2408 6110 63CC D22C CC31  77E5 5736 3C7F 18D5 5ECE)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.stacken.kth.se/pipermail/bus/attachments/20060102/8fb15b43/attachment.bin


More information about the BUS mailing list