Otto  -I think you are missing the big picture here and
Ashley can confirm it or
disprove me -

1 - this system had two IDE drives in it at Linux
installation time.
        A (the MASTER) and B (The Slave), There is no SCSI, NO
RAID, no LVM.
just a simple plain vanilla LINUX setup.

2 - Linux was installed in its entirety along with grub as
the
boot loader onto Drive A

3 - NOTHING was loaded onto Drive B at time of linux
installation.

4 - Drive B was later used to store files and such.

5 - GRUB NEVER used any part of DRIVE B at any time during
it's lifetime It ONLY used
the contents of DRIVE A to boot from.

6 - DRIVE B Crashed. Upon removal of drive b from the ide
chain, Ashley found HIMSELF
with a totally unbootable system for absolutely no sane
reason. The only drive he needed
for booting was Drive A which was still intact.

7 - this is proven by the addition of a replacement BLANK
Drive
B which then cured his system.

8 - GRUB is not trying to load anything from Drive B. The
Phase one half of GRUB ,
stored on the boot block of Drive A (MBR), can not find the
Phase 1.5 part of Grub
also stored on drive A because it's concept of
where that information is stored has been altered by the
ROM BIOS's changed perception
of the drive layout info for Drive A. This changed
perception , probably the
address of the drive or its geometry, is being caused by the
changes in
the drive select jumpers required by DRIVE A
when a SLAVE drive is removed or added onto the chain.

9 - The system can ALWAYS load the MBR because it is always
on BLOCK 0
or Cylinder Track and Sector 0
on the disk drive. It is a known fixed location which does
not change
even if drive geometrys are changed. The ROM BIOS on the
Motherboard loads
this single disk block into RAM and executes it.
It prints out "GRUB" to let you know it is there, then
attempts to locate the /boot partition start on the hard
drive to load Phase 1.5 which is the real OS Bootstrap
program.

10 - The MBR "KNOWS" where phase 1.5 is because the location
of the start of the
the /boot partition and phase 1.5 is HARDCODED into the MBR
program when it is
built and placed on the boot block.
The MBR merely know to go some far into the disk and read.
If You change the offset of /boot on the harddrive
by resizing the parition spaces between cylinder 0 and where
ever /boot originally started at
you trash the MBR's ability to find Phase 1.5 for the same
reason - you relocated Phase 1.5
on the drive and did not tell the MBR. The MBR uses the same
IO code the DOS bootstraps
use and has their same constraints about maximum Logical
block or
CTS values.

11 - the issue here is that somehow removing the drive b and
changing the drive select
on DRIVE A changes
where everything but where block 0 is located on the disk
drive. I dont know why, have
not read the GRUB sources or how as
I cant see his machine - his drives would normally be
LOGICAL BLOCK ADDRESSED,maybe
CTS addressed, but somehow, and only Ashley can figure this
out, the BIOS view of
the drive changes when he changes the drive select jumper.
And it is the BIOS DISK IO routines
that are normally used by the MBR boot strap to read the
disk contents.
The MBR is a sector long program which means at best it can
be 512 bytes long.

Lets take this to a CTS (Cylinder TRACK and SECTOR) View of
the hard drive -
I dont know if you program, but if you do -
View CTS as indices into a three dimensional Matrix. The
base address of the matrix
is always at the same address no matter what.
Think of Cylinders are Rings on a Tree, Tracks as fixed
horizontal slices
through the tree (like slicing a banana,) and sectors as pie
slices across DIVIDING UP
the surface OF A SINGLE TRACK and replicated down through
all the tracks

Boot Block/MBR - LOCATED at CTS 0-0-0  array[0][0][0]

Phase 1.5 bootstrap located at CTS 50-0-10 to 50-129-16,  50
cylinders
into the hard drive. array[50][129][10] is the start

The drive's geometry is currently 1024 cylinders, 256 tracks
per cylinder
and 512 sectors per track. array is of dimension
[1024][256]512]

IDE drives have had the ability to remap
the same physical disk geometry into many virtual disk
geometries.

If we shift the the drive via internal map settings OR
through manual
configuration tell the ROM BIOS that this disk is now say
512 cylinders,
512 tracks per cylinder and 512 sectors per track, CTS
50-129-10 will no longer
be addressed by the drive to the same physical location on
the disk.
array is now dimensioned as [512][512][512]. what was at
50-0-10 is not there
now, ITS PROBABLY NOW ADDRESSED AS       100-129-10.
(A SINGLE LOGICAL CYLINDER ON THE DISK MAY NOW BE COMPOSED
OF TWO
ADJACENT PHYSICAL CYLINDERS)

The ISSUE - THE MBR is hardcoded with the 50-0-10 address
and does not know to
double the cylinder count to get to where it needs to be.

This is one possibility, the other is that the MBR has a
base address to the drive controller
itself that references nothing once the drive select jumpers
change to BIOS's
idea of what the drive controller address should be. The
disk used to be IDE1DriveM,
now its IDE1DriveOnly. The mbr still is looking for
IDE1DriveM
which no longer exists.

The bottom line is his issue is not with GRUB, but with his
motherboard and the particular drives he is using.
The cure may lie in a  FIRMWARE upgrade or in finding a way
to regenerate the MBR
in the new configuration in the same manner
as it is created during the install process. to reset the
now incorrect
references to their new equivalents.


THe Phase 1 MBR cant find the phase 1.5 piece not because it
is on DRIVE B
but because it is now looking in the wrong space on  drive A
because the perception of
drive A has changed either in it's address it's layout so
the ROM BIOS routines
essentially read the wrong information off the drive (say
the contents of /etc/passwd
instead of the phase 1.5 bootstrap program and then try to
execute non-code and crash.

You would have to play with his system and GRUB to figure
exactly what has
changed. One can only guess otherwise.


>  -----Original Message-----
>  From: [EMAIL PROTECTED]
>  [mailto:[EMAIL PROTECTED] Behalf Of Otto
Haliburton
>  Sent: Sunday, August 03, 2003 5:13 AM
>  To: [EMAIL PROTECTED]
>  Subject: RE: GRUB failure
>
>
>
>  Hi all,
>       We have all been ignoring one fact and that is for some
reason
>  GRUB is loading part of the boot loader on the second
drive.  It
>  apparently thinks that linux is on the second drive.  A
>  setup where the
>  boot loader is on the MBR of drive A but linux is on
drive B
>  so that the
>  boot is A -> B -> A.  Ashley while I believe you when you
>  say that there
>  is nothing on drive B would you post a fdisk listing of
partitions on
>  drive b.  In the meantime, you can remove drive b and
boot
>  from floppy
>  and then reinstall GRUB with B removed from the system
and note any
>  error messages that install prints when this occurs
because either it
>  will install successfully or it will fail with error
messages.
>
>       To those of you, who have the theory that GRUB is
loading stage1
>  and can't load stage2 answer the question, "how it can
find
>  stage1 and
>  then can't find stage2?", when both are in the same GRUB
>  directory.  It
>  can not find the GRUB directory period.
>
>
>  --
>  redhat-list mailing list
>  unsubscribe
mailto:[EMAIL PROTECTED]
>  https://www.redhat.com/mailman/listinfo/redhat-list
>


-- 
redhat-list mailing list
unsubscribe mailto:[EMAIL PROTECTED]
https://www.redhat.com/mailman/listinfo/redhat-list

Reply via email to