It seems like there should be a better way to detect this other than
trial and error.  I put a new 1 TB drive in my laptop (Seagate
ST1000LM024) about a month ago.  Being aware there was such a limit I
made small boot partitions at the beginning of the drive (I thought):
32 GB Windows, 64 GB OpenBSD, 32 GB Linux.  As predicted everything
worked at first, then installing MeTV keys made my Linux unbootable
with an error from Lilo about the key file being corrupt and I suspect
it's related to this limit.  The original position of the file was
probably OK, the new file got made in an unreachable position.

So I've probably got some storage-only partitions that won't boot, but
I want to avoid the same thing happening when I put a 1 TB drive
(Seagate
ST31000340AS) in my laptop machine (Dell Optiplex GX270) because I
really would like Linux working somewhere since I want to play with
Android stuff.  I need to be able to build kernels for my phones and
use Android Studio.

So on the laptop:
Disk: wd0       geometry: 121601/255/63 [1953525168 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: 0C      0   1   1 -   4079 254  63 [          63:    65545137 ] Win95 FAT32L
 1: A6   4080   0   1 -  12365 254  63 [    65545200:   133114590 ] OpenBSD
 2: 83  12366   0   1 -  16444 254  63 [   198659790:    65529135 ] Linux files*
 3: 05  16445   0  62 - 121600 254  63 [   264188986:  1689331079 ] Extended DOS
Offset: 264188986       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 0B  16445   1   1 -  20524 254  63 [   264188988:    65545137 ] Win95 FAT-32
 1: 05  20525   0   1 -  24604 254  63 [   329734125:    65545200 ] Extended DOS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Offset: 329734125       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 0B  20525   1   1 -  24604 254  63 [   329734188:    65545137 ] Win95 FAT-32
 1: 05  24605   0   1 -  25114 254  63 [   395279325:     8193150 ] Extended DOS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Offset: 395279325       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 82  24605   1   1 -  25114 254  63 [   395279388:     8193087 ] Linux swap
 1: 05  25115   0   1 -  88856  76  52 [   403472475:  1024004005 ] Extended DOS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Offset: 403472475       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: A6  25115  63  37 -  88856  76  52 [   403476480:  1024000000 ] OpenBSD
 1: 05  88857   0   1 - 121600 254  63 [  1427487705:   526032360 ] Extended DOS
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Offset: 1427487705      Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 83  88857   1   1 - 121600 254  63 [  1427487768:   526032297 ] Linux files*
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused

# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: ST1000LM024 HN-M
duid: abd27361b43df756
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 121601
total sectors: 1953525168
boundstart: 65545200
boundend: 198659790
drivedata: 0

16 partitions:
#                size           offset  fstype [fsize bsize  cpg]
  a:          4194288         65545200  4.2BSD   2048 16384    1 # /
  b:           524288         69739488    swap                   # none
  c:       1953525168                0  unused
  d:          6291456         70263776  4.2BSD   2048 16384    1
  e:          4194304         76555232  4.2BSD   2048 16384    1 # /home
  g:       1024000000        403476480  4.2BSD   4096 32768    1 # /usr
  i:         65545137               63   MSDOS                   # /win_c
  j:         65529135        198659790  ext2fs                   # /linux0
  k:         65545137        264188988   MSDOS                   # /win_d
  l:         65545137        329734188   MSDOS                   # /win_e
  m:          8193087        395279388 unknown                   # none
  n:        526032297       1427487768  ext2fs                   # /linux1

d530# calc ' 198659790 +  65529135 '
        264188925
d530# calc '264188925 / 16065'
        16445
d530# calc '2 ^ 14'
        16384
d530#

If the BIOS only uses 14 bits for keeping track of the cylinder this may be the
problem.  But how can we find this out?  Both machines are running the
latest BIOS available from Dell.  I have 32 gig msdos partitions
because I still use FAT32, and some Windows tool will delete a FAT32
partition over 32 gigs, I've seen it happen.

It seems like it should be possible to write a tool for this, you
create a partition, fill most of it with dummy files, then at the very
end put the file you want the BIOS to find, reboot and see if it still
finds it.  If it does, you blow it away and keep making it bigger
until it doesn't work anymore.  It probably comes down to a certain
number of bits used for addressing somewhere, but much depends on the
machine's BIOS and the hard drive's geometry.

I used gparted (Linux live CD) for making these BTW, which doesn't
even know what an A6 partition is.  Seems like it might be worth
educating them and maybe getting gparted into ports.  My disklabel
here isn't quite up to date, my fstab mounts the 2nd OpenBSD partition
as /usr and the linux swap as a 2nd swap:

/dev/wd0b none swap sw 0 0
/dev/wd0m none swap sw 0 0
/dev/wd0a / ffs rw 1 1
/dev/wd0e /home ffs rw,nodev,nosuid 1 2
/dev/wd0g /usr ffs rw,nodev 1 2
/dev/wd0i /win_c  msdos rw 0 0
/dev/wd0k /win_d  msdos rw 0 0
/dev/wd0l /win_e  msdos rw 0 0
/dev/wd0j /linux0 ext2fs rw 0 0
/dev/wd0n /linux1 ext2fs rw 0 0
/dev/cd0a /cdrom cd9660 ro,noauto 0 0


-- 
Credit is the root of all evil.  - AB1JX

Reply via email to