Verder Terug Inhoud

12. De Linux 65535 cylinder limiet

De HDIO_GETGEO ioctl retourneert verkort het aantal cylinders. Dit betekent dat als je meer dan 65535 cylinders hebt, het aantal wordt afgekapt, en (voor een typische SCSI setup met 1 MiB cylinders) kan een 80 GiB disk verschijnen als een 16 GiB disk. Zodra men het probleem herkent, is het makkelijk op te lossen.

12.1 IDE problemen met 34+ GB disks

Drives groter dan 33.8 GB zullen met kernels ouder dan 2.3.21 niet werken. De details zijn als volgt. Veronderstel dat je een nieuwe IBM-DPTA-373420 disk met een capaciteit van 66835440 sectoren (34.2 GB) kocht. Kernels van voor 2.3.21 zullen je laten weten dat de grootte 769*16*63 = 775152 sectoren (0.4 GB) is, wat een beetje teleurstellend is. En het opgeven van opdrachtregelparameters hdc=4160,255,63 helpt helemaal niet - deze worden gewoon genegeerd. Wat is er aan de hand? De routine idedisk_setup() haalt de geometrie op die door de disk wordt gerapporteerd (en dat is 16383/16/63) en overschrijft wat de gebruiker op de opdrachtregel specificeerde, zodat de gebruikersdata alleen voor de BIOS geometrie wordt gebruikt. De routine current_capacity() of idedisk_capacity() berekent opnieuw het cylindernummer als 66835440/(16*63)=66305, maar aangezien dit in een short is opgeslagen wordt het 769. Aangezien lba_capacity_is_ok() id->cyls verwijderde, zal iedere volgende aanroep ernaar false retourneren, zodat de diskcapaciteit 769*16*63 wordt. Voor verscheidene kernels is een patch beschikbaar. Een patch voor 2.0.38 is te vinden op ftp.kernel.org. Een patch voor 2.2.12 is te vinden op www.uwsg.indiana.edu. De 2.2.14 kernels ondersteunen deze disks. In de 2.3.* kernelseries is er sinds 2.3.21 ondersteuning voor deze disks. Met kan het probleem via de hardware ook "oplossen" door een jumper te gebruiken om de grootte tot 33.8 af te kappen. In veel gevallen zal een BIOS upgrade vereist zijn als men van de disk wil booten.


Verder Terug Inhoud