On Mon, 22 Mar 2021, Stan Johnson wrote: > My issue with the retirement of legacy IDE isn't technical. Two of the > systems that I use are a PowerBook Wallstreet and a PowerBook 3400c. > Both of these laptops have internal IDE drives, an external SCSI port, > and require BootX to boot into Linux. BootX wants explicit specification > of the root device (e.g. /dev/sda4, /dev/hda4, etc.). With libata, the > disk drive names change depending on what is connected to the SCSI port. > I'm aware that I can use "UUID=" or "LABEL=" in /etc/fstab, but that > naming convention doesn't work with BootX. So using BootX will become > more complicated depending on connected SCSI devices, if any. >
The /dev/hda, hdb etc. names are transient and don't refer to any particular drive. That is, they have the same problem that /dev/sda, sdb etc. have. That is, if you plug or unplug ATA devices from the powerbook expansion bay, you can alter the internal ATA (boot) device naming. Changing the kernel .config can also affect internal ATA device naming: config BLK_DEV_IDE_PMAC_ATA100FIRST bool "Probe on-board ATA/100 (Kauai) first" depends on BLK_DEV_IDE_PMAC help This option will cause the ATA/100 controller found in UniNorth2 based machines (Windtunnel PowerMac, Aluminium PowerBooks, ...) to be probed before the ATA/66 and ATA/33 controllers. Without these, those machine used to have the hard disk on hdc and the CD-ROM on hda. This option changes this to more natural hda for hard disk and hdc for CD-ROM. Also, the legacy ide subsystem names devices according to the sequence in which drivers are loaded, which is fragile. Anyway, I admit that adopting libata makes a very old problem slightly worse. > Even in Linux, it can be convenient (at least for me) to have /dev/hda > and /dev/hdb internal disks and, if connected, /dev/sdX external > disk(s). > We did find a solution for this. You can ensure that /dev/sda always refers to an internal ATA drive by inhibiting the SCSI bus scan until after the internal ATA devices are probed. To do that, you have to set the "scsi_mod.scan=manual" kernel parameter. Then, after the internal devices have been probed, you can scan the SCSI bus manually after logging in, or automatically with the /etc/rc.local script (or equivalent): # echo "- - -" > /sys/class/scsi_host/hostX/scan The main drawback of this is that SCSI partitions listed in /etc/fstab (if any) won't get mounted early by the init scripts. They would get mounted by udisks (or similar) after the explicit bus scan runs. (But you could improve on that if you needed to.)