Missing '.' fsck cannot fix.

2007-12-25 7:21:00

I have fixed my problem with the "missing `.' fsck cannot fix". I want

to thank the following people clearing up my confusion.

Ed Arnold

smb@ulysses.att.c

Stephane Tsacas

"Matt Crawford"

William LeFebvre

Harris A. Jaffee

dan@BBN.COM

Mike Raffety

Kevin Sheehan

tim@ben.dciem.dnd

klaus u schallhor

Harris A. Jaffee

To summarize, somehow I no longer had `.' as the first entry in the

directory for the partition. Several people mentioned using od to find

out what is there. Doing od -c /u4 gets

0000000 \0 \0 \0 002 \0 \f \0 001 377 \0 \0 \0 \0 \0 \0 002

0000020 \0 \f \0 002 . . \0 \0 \0 \0 \0 003 \0 024 \0 \n

0000040 l o s t + f o u n d \0 \0 \0 \0 006 \0

0000060 \0 \f \0 003 g n u \0 \0 \0 242 001 001 310 \0 005

0000100 l o c a l \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0

0000120 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0

*

0001000

In comparing this to other directories it is clear that the 377 on the first

line should be a `.'

Using od on the raw disk I found out that the location of the inode

for the directory is at 074000:

od -c /dev/rsd2h | less ( and searched for /l o s t/ and

                                  backed up)

0740000 \0 \0 \0 002 \0 \f \0 001 377 \0 \0 \0 \0 \0 \0 002

0740020 \0 \f \0 002 . . \0 \0 \0 \0 \0 003 \0 024 \0 \n

0740040 l o s t + f o u n d \0 \0 \0 \0 006 \0

0740060 \0 \f \0 003 g n u \0 \0 \0 242 001 001 310 \0 005

0740100 l o c a l \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0

0740120 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0

So at location 0740010 (octal) I want to put a `.'

How to fix it?

Well several people mentioned adb. and do something like:

------------------------------------------------------------------------

adb -w - /dev/rsd2h

0o0740010/x

                        (should produce "3c008: ff00".)

0o0740010/w 0x2e00

                        (should produce "3c008: 0xff00 = 0x2e00".)

$q

------------------------------------------------------------------------

Unfortunately, I keep getting "data not found" message from my sun

4/330(OS:4.1). However, when I tried the same on a SS2 (4/75) it

works fine. If anyone knows why please tell me.

A couple people mentions emacs. I don't think emacs will let root

edit the raw disk file. Anyway I couldn't get it to work.

A really cute solution is to use a dd; edit; dd trick as follows:

------------------------------------------------------------------------

        # dd if=/dev/rsd2h of=1sector bs=512 skip=480

        # <edit the file "1sector" with emacs or whatever>

        # dd if=1sector of=/dev/rsd2h bs=512 seek=480

------------------------------------------------------------------------

The solution I used was a C program. Many of you pointed out that I

had 074000 where I should have had 0740000. Here is the C program that

I used. Thanks to all of you.

------------------------------------------------------------------------

#include <stdio.h>

#include <fcntl.h>

main()

{

  int fd;

  int ja;

  int oc;

  unsigned char buf[2048];

  for(ja=0; ja<2048; buf[ja++] = '\0');

  fd = open ("/dev/rsd2h",O_RDWR,0);

  printf("fd : %d\n",fd);

  ja = get(fd,(long) 0740000,&buf[0],2048);

  printf("ja : %d\n",ja);

  

  for(ja = 0; ja < 24; ja++)

    {

      oc = buf[ja];

      printf("%d: %o\n",ja,oc);

    }

  buf[8] = '.';

  ja = put(fd,(long) 0740000,&buf[0],2048);

}

int get(int fd,long pos, unsigned char *buf, int n)

{

  int ls;

  if ((ls=lseek(fd,pos,0)) >= 0)

    {

      printf("ls from lseek %d\n",ls);

      ls = read(fd, buf, n);

      if (ls < 0) perror("read error");

      return ls;

    }

  else

    {

      perror("get error");

      return -1;

    }

}

int put(int fd,long pos, unsigned char *buf, int n)

{

  int ls;

  if ((ls=lseek(fd,pos,0)) >= 0)

    {

      printf("ls from lseek %d\n",ls);

      ls = write(fd, buf, n);

      if (ls < 0) perror("write error");

      return ls;

    }

  else

    {

      perror("get error");

      return -1;

    }

}

  


--

______________________________________________________________________________
Robert McLay | When you have a problem, put NO in front of
Manager CFD Lab | it and you have: NO PROBLEM.
Dept ASE-EM |
University of Texas at Austin | -- Eric Beckman's 2nd Law
|
mclay@wilbur.ae.utexas.edu |

Comments

Got something to say?

You must be logged in to post a comment.