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