8

I've got some really, really old IDE hard drives, like a Conner CP3024 drive which is a whopping 21 megabyte in size. I've been trying to rescue it, but there seems to be some strangeness with the disk geometry.

The data sheet for the drive says you should set the CHS drive geometry to 615/4/17 in the BIOS, which is some kind of "virtual" geometry, which uses some feature Conner calls "Universal Translate Mode". But this is not the physical geometry of the drive, which you get when you let the BIOS auto-detect or query the drive with hdparm, which shows up as 636/2/33.

The problem comes when attempting to read the drive. For some reason the drive thinks it's in the virtual geometry mode, and will throw read errors for every sector number above 17. I finally fixed this by using a really old version of a Linux distro, where you can pass hdc=615,4,17 as a boot parameter and force Linux to obey a certain drive geometry.

This feature seems to have been removed as Linux moved over to libata - and I can't find any way to do the same under a modern Linux kernels. Does an alternative way to override drive geometry exist?

ymgve
  • 181
  • 2
  • Did you try the syntax described there: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/ide/ide.rst?h=v5.10#n82 ? Or is that also disabled with libata? – A.B Jan 16 '21 at 12:47
  • Wow. Pre-LBA code hasn't been tested for years. Use the old kernel. What the heck are you running this on? – stark Jan 16 '21 at 13:34
  • I looked briefly at the ```ide_core``` module, but it doesn't seem to be loaded on the modern distros I use for testing (latest tinycore and debian). The computers I use load the ```pata_via``` and ```pata_sil680``` modules respectively, and both seem to go through ```libata``` (Drive shows up as sdX in both cases instead of hdX). – ymgve Jan 16 '21 at 17:37
  • One thing I noticed is that ```hdmparm -I``` shows the current CHS as 0/0/0 where I think the "virtual" CHS geometry should have been inserted. From glancing at the ```libata``` code, ```ata_dev_init_params``` should have been called at some point and should have set those parameters, so maybe there's an odd bug somewhere. – ymgve Jan 16 '21 at 17:42
  • @ymgve: did you figure out how to specify CHS parameters for modern kernels using `libata`? I'm looking for means to access a _Conner CP30254_ myself... – Fonic Jan 02 '22 at 15:32
  • 2
    @Maxxim the only solution I found was to use an older distro - I think I used TinyCore 1.4.3 (also have downloaded 3.8.4 but not sure I used that) – ymgve Jan 03 '22 at 16:17

1 Answers1

2
#!/bin/bash

# Install hdparm if not already installed (for Debian-based systems)
sudo apt-get install -y hdparm

# Set the desired geometry using hdparm
sudo hdparm -g 615,4,17 /dev/sdX

# Disable LBA translation and force the drive to use the specified geometry
sudo hdparm -N p615,4,17 /dev/sdX

Please note that this script provides a general framework for working with older IDE hard drives, and you may need to adapt it based on your specific setup and requirements. Remember to replace /dev/sdX with the appropriate device identifier for your system.