9

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?

6
  • Did you try the syntax described there: git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/… ? Or is that also disabled with libata?
    – A.B
    Commented Jan 16, 2021 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
    Commented Jan 16, 2021 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
    Commented Jan 16, 2021 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
    Commented Jan 16, 2021 at 17:42
  • 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
    Commented Jan 3, 2022 at 16:17

1 Answer 1

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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .