Het artikel beschrijft de technische details en de praktische ervaringen met SMD-schijven, een high-performance opslagtechnologie uit de jaren 70 en 80. De auteur analyseert de fysieke eigenschappen van deze zware schijven (tot 11 inch) en hun specifieke interface, die aparte kabels gebruikt voor commando's en data.
Centraal in het verhaal staat de Sun-4/260, een SPARC-gebaseerd systeem met een VME-architectuur waarbij geheugen en storage-controllers als kaarten werden toegevoegd. De auteur bespreekt verschillende controllers, waaronder de Xylogics en de snellere Ciprico Rimfire.
Daarnaast komen diverse technische hindernissen aan bod bij het draaien van OpenBSD op deze hardware:
- De Boot Block Bug, veroorzaakt door een mismatch tussen de block size van het bestandssysteem (16 KB) en de I/O-limiet van de PROM-monitor (8216 bytes).
- Problemen met de afhandeling van defecte sectoren, wat een softwarematige bug in de driver bleek te zijn.
- De noodzaak van low-level formattering na fysiek transport vanwege mogelijke verschuivingen in de kopuitlijning.
Het artikel sluit af met een analyse van de fysieke anatomie van de schijven en een vergelijking van ondersteunde disk-geometrieën per controller.
Vreemde Middeleeuwse Apparaten
De SMD-interface werd pas genormaliseerd als ANSI X3.91M-1982 in 1982, na vijf jaar werk, en werd later in 1987 herzien. Hoewel er in de jaren 80 andere opslagtechnologieën verschenen, zoals ESDI (gestandaardiseerd in 1984) of SCSI (gestandaardiseerd in 1986), maakten de schijven met de hoogste capaciteit allemaal gebruik van de SMD-interface.
Hardware-specificaties en fysieke eigenschappen
SMD-schijven gebruikten aanvankelijk platters van 11 inch, later van 8 inch. Met een nominale snelheid van 3600 rpm (60 omwentelingen per seconde), hoewel Fujitsu later afweek van de norm met enkele schijven die zelfs sneller draaiden op 3961 rpm, was er een aanzienlijke hoeveelheid stroom nodig om deze schijven op te spinnen.
Deze schijven waren bovendien extreem zwaar. Terwijl 8-inch modellen voorzichtig door één persoon gedragen konden worden, vereiste het verplaatsen van 11-inch schijven meestal het gebruik van een kar.
De SMD-interface
Het was dan ook geen verrassing dat Sun Microsystems zijn high-end servers en workstations leverde met SMD-schijven en Xylogics-controllers. In tegenstelling tot SCSI en modernere opslaginterfaces, heeft de SMD-interface aparte kabels voor commando's en data.
Afhankelijk van de controller wordt de commandokabel ofwel via alle schijven gerouteerd (daisy-chained), of is er per schijf één dedicated commandokabel die rechtstreeks met de controller is verbonden. De datakabels zijn onafhankelijk en verbinden de controller altijd direct met een schijf.
De overgang naar SCSI en de Sun-4/260
Tegen de tijd dat deze systemen in de kelders van hobbyisten terechtkwamen, waren er SCSI-schijven met een hoge capaciteit verschenen. In het begin van de jaren 2000 gebruikte ik bijvoorbeeld een Micropolis 1924 5,25" SCSI-schijf van 2 GB op mijn Sun-3/260. Voor zover ik weet, was de grootste SMD-schijfcapaciteit ooit ongeveer 1,25 GB, wat minder dan tweederde van die SCSI-capaciteit is.
Toen ik in het jaar 2000 begon te werken aan OpenBSD/sun3, had ik geen SMD-schijven en kon ik de Xylogics-drivers niet testen. Dit veranderde in de zomer van 2001, toen ik een buitengebruikgestelde Sun-4/260 kast vond, samen met een SMD-schijfkast van hetzelfde formaat.
Architectuur van de Sun-4/260
De 4/200-serie waren de eerste SPARC-systemen die door Sun werden verkocht. Afhankelijk van de grootte van de VME-behuizing waren dit:
- De 4/260: in een grote deskside-kast van 12 slots op wielen.
- De 4/280: een rackable versie die de helft van een 19-inch rack vulde en 16 VME-slots bood.
Het moederbord was in beide gevallen hetzelfde: een grote (9U) vierkante printplaat met een SPARC-processor van 16,67 MHz en een Floating-Point Unit (FPU). Het beschikte over twee seriële poorten, een gecombineerde toetsenbord- en muispoort voor een Sun Type 3-toetsenbord, een monochroom framebuffer met hoge resolutie (1600x1200) en een Ethernet-interface.
Er was geen on-board geheugen; geheugen werd geïnstalleerd als VME-kaarten die via de private "P2"-bus van Sun communiceerden met de CPU-kaart om de toegang te versnellen. Er konden tot vier geheugenkaarten worden geïnstalleerd (in varianten van 8, 16 of 32 MB), wat een maximaal fysiek geheugen van 128 MB mogelijk maakte.
Storage Controllers
Opslagcontrollers werden ook als VME-kaarten toegevoegd. De meeste systemen hadden ten minste een SCSI-controller in slot 7 voor de interne schijven:
- De zeer beperkte, zelfgemaakte "Sun-2" sc-controller (kon geen parity-signalen correct afhandelen).
- De iets betere, op NCR5380 gebaseerde "Sun-3" si-controller.
Meestal werd in slot 8 een tweede controller geplaatst: een SCSI-controller met externe aansluiting of een SMD-controller (soms zelfs twee). De Xylogics 7053 VME (9U) controller kon bijvoorbeeld vier schijven aansturen. Er bestond ook een kleinere 6U-versie (model 753) voor andere VME-systemen, zoals die van Silicon Graphics of Motorola.
Vanwege de subtiele verschillen tussen de VME-slots schreef Sun een specifieke handleiding over de voorkeurslocaties voor elke kaart en de configuratie van de VME-backplane jumpers voor correcte interrupt-aflevering: cardcage slot assignment and backplane configuration procedures.
Technische uitdagingen en bugfixing
Bij het opzetten van de machine bleek een van de geheugenkaarten defect. Van de twee SMD-schijven (met een brute capaciteit van 368 MB en een geformatteerde capaciteit van 280 MB) werkte er slechts één.
De Boot Block Bug
Na het installeren van OpenBSD trad er een probleem op: de machine bootte niet meer vanaf de schijf. De PROM-monitor gaf een cryptische melding: xy: error A.
Na analyse bleek dat het probleem zat in de grootte van de I/O-operaties:
- De eerste fase van de bootloader is beperkt tot 8 KB. Deze laadt de tweede fase van de bootloader.
- In juli 2003 werd de standaard block size voor filesystems gewijzigd van 8 KB naar 16 KB.
- De PROM-monitor heeft echter een eigen limiet voor I/O-operaties van precies 8216 bytes (iets meer dan 8 KB).
- Wanneer de bootloader probeerde een blok van 16 KB te lezen, faalde de operatie.
De oplossing was om de I/O-aanvragen van de bootloader te beperken tot deze limiet en meerdere kortere leesacties uit te voeren om de volledige data te verkrijgen.
Bad Sector Handling
Een ander probleem was de afhandeling van defecte sectoren. Bij moderne schijven gebeurt dit automatisch door de on-disk controller. Bij SMD-schijven is het echter de verantwoordelijkheid van de software-driver om de lijst met defecte sectoren te laden en te beheren.
In de Xylogics-drivers leidde dit tot foutmeldingen zoals Illegal head. Na onderzoek bleek dit een 19 jaar oude bug te zijn in de xy-driver, die aanwezig was sinds de eerste dag. Na het repareren hiervan kon ik ook disklabel -A implementeren voor automatische partitionering op SMD-schijven.
Fysieke degradatie en retirement
Een oude regel voor SMD-schijven is dat ze na fysiek transport opnieuw geformatteerd moeten worden, omdat de uitlijning van de koppen kan zijn verschoven. Omdat OpenBSD geen low-level format-programma heeft voor SMD, gebruikte ik SunOS 4.1 om dit te doen.
Ondanks dit bleef de CDC 9720-schijf defecte sectoren produceren en werd hij in april 2017 definitief buiten gebruik gesteld.
Anatomie van een SMD-schijf
Bij het demonteren van de schijf vielen enkele zaken op:
- De platters hadden een oranje kleur (in de vroege jaren 90 werden deze grijs).
- De chassisbodem bevat een mechanische rem. Wanneer de stroom uitvalt, ontlaadt een condensator zich, waardoor een veer de rem op de draaias laat vallen om de spoel snel te stoppen.
- Volgens de handleiding kan de schijf bij het opstarten kortstondig tot 6 ampère aan stroom verbruiken.
De Ciprico Rimfire Controller
Een laatste project was het poorten van de SunOS Ciprico Rimfire-driver naar BSD. De Rimfire was aanzienlijk sneller dan de Xylogics-controller dankzij 512 KB cachegeheugen en intensief gebruik van read-ahead.
De Rimfire heeft een "Xylogics 451 compatibiliteitsmodus" (via de JSUN-jumper), waardoor hij kan booten via de Sun PROM, ook al ondersteunt de PROM de controller eigenlijk niet. Een belangrijke waarschuwing in de handleidingen is dat men alle schijven opnieuw moet formatteren bij het vervangen van een SMD-controller, omdat formaten controller-afhankelijk kunnen zijn.
Technische noot over SMD-geometrie
In tegenstelling tot SCSI definieert SMD geen manier voor een controller om de fysieke geometrie van een apparaat op te vragen. De Ciprico Rimfire probeert dit wel via een "Interrogate Disk"-commando door seek-commando's uit te voeren tot er een fout optreedt. Dit is echter zeer traag en faalt bij schijven met 1024 cilinders of meer, omdat de eerste revisie van de SMD-standaard slechts 10 bits voor cilindernummers toeliet.
Daarom schrijft het systeem na het formatteren de geometrie in de eerste sector (cilinder 0, head 0, sector 0), aangezien deze altijd toegankelijk is zonder dat de totale geometrie bekend hoeft te zijn.
Lijst van ondersteunde schijven (voorbeeld uit /etc/format.dat):
| Schijftype | Controller | Cilinders | Heads | Sectoren | RPM |
| Fujitsu-M2312K | XY450 | 587 | 7 | 32 | 3600 |
| Fujitsu-M2333 | XY450/XD7053 | 821 | 10 | 67 | 3600 |
| CDC EMD 9720 | XY450/XD7053 | 1147 | 10 | 48 | 3600 |
| Hitachi DK815-10 | XY450/XD7053 | 1735 | 15 | 67 | 3600 |
| NEC D2363 | XY450/XD7053 | 964 | 27 | 67 | 3600 |
Het bleek dat de Xylogics 451 en 7053 controllers zes van de acht ondersteunde schijven gemeen hadden. Of dit een technische of commerciële beperking was, blijft onduidelijk.
Vreemde Middeleeuwse Apparaten
De SMD-interface werd pas genormaliseerd als ANSI X3.91M-1982 in 1982, na vijf jaar werk, en werd later in 1987 herzien. Hoewel er in de jaren 80 andere opslagtechnologieën verschenen, zoals ESDI (gestandaardiseerd in 1984) of SCSI (gestandaardiseerd in 1986), maakten de schijven met de hoogste capaciteit allemaal gebruik van de SMD-interface.
Hardware-specificaties en fysieke eigenschappen
SMD-schijven gebruikten aanvankelijk platters van 11 inch, later van 8 inch. Met een nominale snelheid van 3600 rpm (60 omwentelingen per seconde), hoewel Fujitsu later afweek van de norm met enkele schijven die zelfs sneller draaiden op 3961 rpm, was er een aanzienlijke hoeveelheid stroom nodig om deze schijven op te spinnen.
Deze schijven waren bovendien extreem zwaar. Terwijl 8-inch modellen voorzichtig door één persoon gedragen konden worden, vereiste het verplaatsen van 11-inch schijven meestal het gebruik van een kar.
De SMD-interface
Het was dan ook geen verrassing dat Sun Microsystems zijn high-end servers en workstations leverde met SMD-schijven en Xylogics-controllers. In tegenstelling tot SCSI en modernere opslaginterfaces, heeft de SMD-interface aparte kabels voor commando's en data.
Afhankelijk van de controller wordt de commandokabel ofwel via alle schijven gerouteerd (daisy-chained), of is er per schijf één dedicated commandokabel die rechtstreeks met de controller is verbonden. De datakabels zijn onafhankelijk en verbinden de controller altijd direct met een schijf.
De overgang naar SCSI en de Sun-4/260
Tegen de tijd dat deze systemen in de kelders van hobbyisten terechtkwamen, waren er SCSI-schijven met een hoge capaciteit verschenen. In het begin van de jaren 2000 gebruikte ik bijvoorbeeld een Micropolis 1924 5,25" SCSI-schijf van 2 GB op mijn Sun-3/260. Voor zover ik weet, was de grootste SMD-schijfcapaciteit ooit ongeveer 1,25 GB, wat minder dan tweederde van die SCSI-capaciteit is.
Toen ik in het jaar 2000 begon te werken aan OpenBSD/sun3, had ik geen SMD-schijven en kon ik de Xylogics-drivers niet testen. Dit veranderde in de zomer van 2001, toen ik een buitengebruikgestelde Sun-4/260 kast vond, samen met een SMD-schijfkast van hetzelfde formaat.
Architectuur van de Sun-4/260
De 4/200-serie waren de eerste SPARC-systemen die door Sun werden verkocht. Afhankelijk van de grootte van de VME-behuizing waren dit:
- De 4/260: in een grote deskside-kast van 12 slots op wielen.
- De 4/280: een rackable versie die de helft van een 19-inch rack vulde en 16 VME-slots bood.
Het moederbord was in beide gevallen hetzelfde: een grote (9U) vierkante printplaat met een SPARC-processor van 16,67 MHz en een Floating-Point Unit (FPU). Het beschikte over twee seriële poorten, een gecombineerde toetsenbord- en muispoort voor een Sun Type 3-toetsenbord, een monochroom framebuffer met hoge resolutie (1600x1200) en een Ethernet-interface.
Er was geen on-board geheugen; geheugen werd geïnstalleerd als VME-kaarten die via de private "P2"-bus van Sun communiceerden met de CPU-kaart om de toegang te versnellen. Er konden tot vier geheugenkaarten worden geïnstalleerd (in varianten van 8, 16 of 32 MB), wat een maximaal fysiek geheugen van 128 MB mogelijk maakte.
Storage Controllers
Opslagcontrollers werden ook als VME-kaarten toegevoegd. De meeste systemen hadden ten minste een SCSI-controller in slot 7 voor de interne schijven:
- De zeer beperkte, zelfgemaakte "Sun-2" sc-controller (kon geen parity-signalen correct afhandelen).
- De iets betere, op NCR5380 gebaseerde "Sun-3" si-controller.
Meestal werd in slot 8 een tweede controller geplaatst: een SCSI-controller met externe aansluiting of een SMD-controller (soms zelfs twee). De Xylogics 7053 VME (9U) controller kon bijvoorbeeld vier schijven aansturen. Er bestond ook een kleinere 6U-versie (model 753) voor andere VME-systemen, zoals die van Silicon Graphics of Motorola.
Vanwege de subtiele verschillen tussen de VME-slots schreef Sun een specifieke handleiding over de voorkeurslocaties voor elke kaart en de configuratie van de VME-backplane jumpers voor correcte interrupt-aflevering: cardcage slot assignment and backplane configuration procedures.
Technische uitdagingen en bugfixing
Bij het opzetten van de machine bleek een van de geheugenkaarten defect. Van de twee SMD-schijven (met een brute capaciteit van 368 MB en een geformatteerde capaciteit van 280 MB) werkte er slechts één.
De Boot Block Bug
Na het installeren van OpenBSD trad er een probleem op: de machine bootte niet meer vanaf de schijf. De PROM-monitor gaf een cryptische melding: xy: error A.
Na analyse bleek dat het probleem zat in de grootte van de I/O-operaties:
- De eerste fase van de bootloader is beperkt tot 8 KB. Deze laadt de tweede fase van de bootloader.
- In juli 2003 werd de standaard block size voor filesystems gewijzigd van 8 KB naar 16 KB.
- De PROM-monitor heeft echter een eigen limiet voor I/O-operaties van precies 8216 bytes (iets meer dan 8 KB).
- Wanneer de bootloader probeerde een blok van 16 KB te lezen, faalde de operatie.
De oplossing was om de I/O-aanvragen van de bootloader te beperken tot deze limiet en meerdere kortere leesacties uit te voeren om de volledige data te verkrijgen.
Bad Sector Handling
Een ander probleem was de afhandeling van defecte sectoren. Bij moderne schijven gebeurt dit automatisch door de on-disk controller. Bij SMD-schijven is het echter de verantwoordelijkheid van de software-driver om de lijst met defecte sectoren te laden en te beheren.
In de Xylogics-drivers leidde dit tot foutmeldingen zoals Illegal head. Na onderzoek bleek dit een 19 jaar oude bug te zijn in de xy-driver, die aanwezig was sinds de eerste dag. Na het repareren hiervan kon ik ook disklabel -A implementeren voor automatische partitionering op SMD-schijven.
Fysieke degradatie en retirement
Een oude regel voor SMD-schijven is dat ze na fysiek transport opnieuw geformatteerd moeten worden, omdat de uitlijning van de koppen kan zijn verschoven. Omdat OpenBSD geen low-level format-programma heeft voor SMD, gebruikte ik SunOS 4.1 om dit te doen.
Ondanks dit bleef de CDC 9720-schijf defecte sectoren produceren en werd hij in april 2017 definitief buiten gebruik gesteld.
Anatomie van een SMD-schijf
Bij het demonteren van de schijf vielen enkele zaken op:
- De platters hadden een oranje kleur (in de vroege jaren 90 werden deze grijs).
- De chassisbodem bevat een mechanische rem. Wanneer de stroom uitvalt, ontlaadt een condensator zich, waardoor een veer de rem op de draaias laat vallen om de spoel snel te stoppen.
- Volgens de handleiding kan de schijf bij het opstarten kortstondig tot 6 ampère aan stroom verbruiken.
De Ciprico Rimfire Controller
Een laatste project was het poorten van de SunOS Ciprico Rimfire-driver naar BSD. De Rimfire was aanzienlijk sneller dan de Xylogics-controller dankzij 512 KB cachegeheugen en intensief gebruik van read-ahead.
De Rimfire heeft een "Xylogics 451 compatibiliteitsmodus" (via de JSUN-jumper), waardoor hij kan booten via de Sun PROM, ook al ondersteunt de PROM de controller eigenlijk niet. Een belangrijke waarschuwing in de handleidingen is dat men alle schijven opnieuw moet formatteren bij het vervangen van een SMD-controller, omdat formaten controller-afhankelijk kunnen zijn.
Technische noot over SMD-geometrie
In tegenstelling tot SCSI definieert SMD geen manier voor een controller om de fysieke geometrie van een apparaat op te vragen. De Ciprico Rimfire probeert dit wel via een "Interrogate Disk"-commando door seek-commando's uit te voeren tot er een fout optreedt. Dit is echter zeer traag en faalt bij schijven met 1024 cilinders of meer, omdat de eerste revisie van de SMD-standaard slechts 10 bits voor cilindernummers toeliet.
Daarom schrijft het systeem na het formatteren de geometrie in de eerste sector (cilinder 0, head 0, sector 0), aangezien deze altijd toegankelijk is zonder dat de totale geometrie bekend hoeft te zijn.
Lijst van ondersteunde schijven (voorbeeld uit /etc/format.dat):
| Schijftype | Controller | Cilinders | Heads | Sectoren | RPM |
| Fujitsu-M2312K | XY450 | 587 | 7 | 32 | 3600 |
| Fujitsu-M2333 | XY450/XD7053 | 821 | 10 | 67 | 3600 |
| CDC EMD 9720 | XY450/XD7053 | 1147 | 10 | 48 | 3600 |
| Hitachi DK815-10 | XY450/XD7053 | 1735 | 15 | 67 | 3600 |
| NEC D2363 | XY450/XD7053 | 964 | 27 | 67 | 3600 |
Het bleek dat de Xylogics 451 en 7053 controllers zes van de acht ondersteunde schijven gemeen hadden. Of dit een technische of commerciële beperking was, blijft onduidelijk.