Die Platte hat 0 reallocated Blocks, badblocks findet nichts, es ist ein 80-poliges Kabel an der Platte, sie ist das einzige Gerät am Bus und eigentlich ist alles bestens.
Das Board ist ein ASROCK K7S8X Bios 2.60. Der Kernel ein 2.6.17 plain vanilla und das System Debian-Etch.
Bei der Angabe "sector=78165360" wird man stutzig. Das ist der letzte vom User benutzbare Sektor der Platte - vorausgesetzt man fängt bei 1 zu zählen an. Irgendwer sagt hier also dem Kernel nicht ganz die Wahrheit.
Oder ist hier noch ein Kernel-Bug beim Abschalten der HPA vergraben?
Hi, das Problem habe ich auch, allerdings nur mit zwei Platten an einem Promise-IDE-Controller. Das Problem konnte ich bisher auch noch nicht loesen und ich hatte ehrlich gesagt auch noch keine Lust dazu.
Die Meldungen tauchen bei mir auch nur sproradisch beim Booten auf.
On Tue, 29 Aug 2006, Paul Puschmann wrote: > > ide1 at 0x170-0x177,0x376 on irq 15 > > hda: max request size: 128KiB > > hda: Host Protected Area detected. > > current capacity is 78165360 sectors (40020 MB) > > native capacity is 78165361 sectors (40020 MB) > > hda: Host Protected Area disabled.
Das Datenblatt von Seagate[1] sagt, daß der obere Zahlenwert richtig ist:
SECTORS PER DRIVE (LBA mode) _____________78,165,360
Daher dürfte bei einer bei 0 beginnenden Zählung maximal der Sektor 78.165.359 angesprochen werden. Außer der Host Protected-Kram wird abgeschaltet (was irgendwie nicht zu funktionieren scheint). Dann wird natürlich 78.165.360 adressiert.
Augenblicklich sieht das für mich wie ein Firmware-Bug in der Platte aus, die einen um 1 zu hohen Wert zurückliefert.
Ich habe mal ein wenig in den Kernel-Sourcen gegraben und folgendes herausgefunden:
Das Abschalten der HPA findet in der ide-disk.c in der Funktion idedisk_set_max_address() bzw. in der idedisk_set_max_address_ext() statt.
Das Auslesen der Plattenparameter findet in idedisk_read_native_max_address_ext() bzw. in idedisk_read_native_max_address() statt.
In dem idedisk_read_*() ist in der Tat auch ein addr++ zu finden, das einen um 1 erhöhten Wert des von der Platte gelieferten maximalen Sektors zurückliefert. Auskommentieren von dem Inkrement ist zwar eklig - aber etwas klügeres fiel mir erst mal nicht ein, da ich den Wirkungszusammenhang in der ide-disk.c noch nicht so ganz im Detail verstanden habe.
> Hi, > das Problem habe ich auch, allerdings nur mit zwei Platten an einem > Promise-IDE-Controller. Das Problem konnte ich bisher auch noch nicht > loesen und ich hatte ehrlich gesagt auch noch keine Lust dazu.
Die Meldungen waren früher auch schon mal - aber der Rechner wurde nur 14 mal insgesamt gebootet. Da konnte man schon damit leben. Die Platte soll nun aber in ein Desktop. Dort ist die Sichtbarkeit dieses Fehlers dann schon etwas gravierender, wenn bei jedem Systemstart diese ziemlich beängstigenden (aber harmlosen) Meldungen vorbeihuschen.
> Die Meldungen tauchen bei mir auch nur sproradisch beim Booten auf.
Reboots sind für Kernel-Updates und Hardware-Tausch. 14 x booten in ca. drei Jahren sollten für sich sprechen... ;-)
> Ich habe mal ein wenig in den Kernel-Sourcen gegraben und folgendes > herausgefunden:
> Das Abschalten der HPA findet in der ide-disk.c in der Funktion > idedisk_set_max_address() bzw. in der idedisk_set_max_address_ext() statt.
> Das Auslesen der Plattenparameter findet in > idedisk_read_native_max_address_ext() bzw. in > idedisk_read_native_max_address() statt.
> In dem idedisk_read_*() ist in der Tat auch ein addr++ zu finden, das > einen um 1 erhöhten Wert des von der Platte gelieferten > maximalen Sektors zurückliefert. Auskommentieren von dem Inkrement ist > zwar eklig - aber etwas klügeres fiel mir erst mal nicht ein, da ich den > Wirkungszusammenhang in der ide-disk.c noch nicht so ganz im > Detail verstanden habe.
Egal ob eklig, unverstanden oder was auch immer: Der schnelle Erfolg gibt einem Recht. ;-)
Die Meldungen vom Boot:
SIS5513: SiS 962/963 MuTIOL IDE UDMA133 controller ide0: BM-DMA at 0xff00-0xff07, BIOS settings: hda:DMA, hdb:DMA ide1: BM-DMA at 0xff08-0xff0f, BIOS settings: hdc:DMA, hdd:DMA Probing IDE interface ide0... hda: ST340823A, ATA DISK drive ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 Probing IDE interface ide1... hdc: JLMS XJ-HD165H, ATAPI CD/DVD-ROM drive ide1 at 0x170-0x177,0x376 on irq 15 hda: max request size: 128KiB hda: 78165360 sectors (40020 MB) w/1024KiB Cache, CHS=65535/16/63, UDMA(100) hda: hda1 hda2 hdc: ATAPI 48X DVD-ROM drive, 512kB Cache, UDMA(33) Uniform CD-ROM driver Revision: 3.20 Attempting manual resume ReiserFS: hda1: found reiserfs format "3.6" with standard journal ReiserFS: hda1: using ordered data mode ReiserFS: hda1: journal params: device hda1, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30 ReiserFS: hda1: checking transaction log (hda1) ReiserFS: hda1: Using r5 hash to sort names
war die Wirkungsweise von:
static unsigned long idedisk_read_native_max_address(ide_drive_t *drive) ... /* addr++; since the return value is (maxlba - 1),
static unsigned long long idedisk_read_native_max_address_ext(ide_drive_t *drive) ... /* addr++; since the return value is (maxlba - 1),
in der drivers/ide/ide-disk.c vom Kernel-Source in den beiden genannten Funktionen.
Eigentlich gehört nun eine entsprechende Blacklist von Festplatten hier implementiert, die den maximalen Sektor bei 1 statt bei 0 anfangen zu zählen, aber für mich tut's der quick-fix wie oben angegeben.
Zu den in Frage kommenden Festplatten gehört mindestens mal die D540X-4K von Maxtor auch dazu.
> > Ich habe mal ein wenig in den Kernel-Sourcen gegraben und folgendes > > herausgefunden:
> > Das Abschalten der HPA findet in der ide-disk.c in der Funktion > > idedisk_set_max_address() bzw. in der idedisk_set_max_address_ext() statt.
> > Das Auslesen der Plattenparameter findet in > > idedisk_read_native_max_address_ext() bzw. in > > idedisk_read_native_max_address() statt.
> > In dem idedisk_read_*() ist in der Tat auch ein addr++ zu finden, das > > einen um 1 erhöhten Wert des von der Platte gelieferten > > maximalen Sektors zurückliefert. Auskommentieren von dem Inkrement ist > > zwar eklig - aber etwas klügeres fiel mir erst mal nicht ein, da ich den > > Wirkungszusammenhang in der ide-disk.c noch nicht so ganz im > > Detail verstanden habe.
> Egal ob eklig, unverstanden oder was auch immer: Der schnelle Erfolg gibt > einem Recht. ;-)
> Die Meldungen vom Boot:
*snip*
> Eigentlich gehört nun eine entsprechende Blacklist von Festplatten hier > implementiert, die den maximalen Sektor bei 1 statt bei 0 anfangen zu > zählen, aber für mich tut's der quick-fix wie oben angegeben.
> Zu den in Frage kommenden Festplatten gehört mindestens mal die D540X-4K > von Maxtor auch dazu.
Bei mir ist es auch eine Seagate, eine Hitachi und zwei WD800BB.
On Wed, 30 Aug 2006, Paul Puschmann wrote: > > Eigentlich gehört nun eine entsprechende Blacklist von Festplatten hier > > implementiert, die den maximalen Sektor bei 1 statt bei 0 anfangen zu > > zählen, aber für mich tut's der quick-fix wie oben angegeben.
> > Zu den in Frage kommenden Festplatten gehört mindestens mal die D540X-4K > > von Maxtor auch dazu.
> Bei mir ist es auch eine Seagate, eine Hitachi und zwei WD800BB.
> dann werd ich mal suchen.
Und weil's Dir auch vor nix graust, bekommst Du auch gleich den Patch ;-)
root@gitti:/usr/src/linux/drivers/ide# diff -u ide-disk.c.orig ide-disk.c --- ide-disk.c.orig 2006-08-30 14:54:34.000000000 +0200 +++ ide-disk.c 2006-08-30 14:55:12.000000000 +0200 @@ -355,7 +355,7 @@ | ((args.tfRegister[ IDE_HCYL_OFFSET] ) << 16) | ((args.tfRegister[ IDE_LCYL_OFFSET] ) << 8) | ((args.tfRegister[IDE_SECTOR_OFFSET] )); - addr++; /* since the return value is (maxlba - 1), we add 1 */ + /* addr++; since the return value is (maxlba - 1), we add 1 */ } return addr; } @@ -384,7 +384,7 @@ ((args.tfRegister[IDE_LCYL_OFFSET])<<8) | (args.tfRegister[IDE_SECTOR_OFFSET]); addr = ((__u64)high << 24) | low; - addr++; /* since the return value is (maxlba - 1), we add 1 */ + /* addr++; since the return value is (maxlba - 1), we add 1 */ } return addr; }
Seither ist zumindest mal beim Booten Schluss mit den SectorIdNotFound Meldungen. Wie gesagt - eklig - aber pragmatisch.
> > > Eigentlich gehört nun eine entsprechende Blacklist von Festplatten hier > > > implementiert, die den maximalen Sektor bei 1 statt bei 0 anfangen zu > > > zählen, aber für mich tut's der quick-fix wie oben angegeben.
> > > Zu den in Frage kommenden Festplatten gehört mindestens mal die D540X-4K > > > von Maxtor auch dazu.
> > Bei mir ist es auch eine Seagate, eine Hitachi und zwei WD800BB.
> > dann werd ich mal suchen.
> Und weil's Dir auch vor nix graust, bekommst Du auch gleich den Patch ;-)
> root@gitti:/usr/src/linux/drivers/ide# diff -u ide-disk.c.orig ide-disk.c > --- ide-disk.c.orig 2006-08-30 14:54:34.000000000 +0200 > +++ ide-disk.c 2006-08-30 14:55:12.000000000 +0200 > @@ -355,7 +355,7 @@ > | ((args.tfRegister[ IDE_HCYL_OFFSET] ) << 16) > | ((args.tfRegister[ IDE_LCYL_OFFSET] ) << 8) > | ((args.tfRegister[IDE_SECTOR_OFFSET] )); > - addr++; /* since the return value is (maxlba - 1), we add 1 */ > + /* addr++; since the return value is (maxlba - 1), we add 1 */ > } > return addr; > } > @@ -384,7 +384,7 @@ > ((args.tfRegister[IDE_LCYL_OFFSET])<<8) | > (args.tfRegister[IDE_SECTOR_OFFSET]); > addr = ((__u64)high << 24) | low; > - addr++; /* since the return value is (maxlba - 1), we add 1 */ > + /* addr++; since the return value is (maxlba - 1), we add 1 */ > } > return addr; > }
> Seither ist zumindest mal beim Booten Schluss mit den SectorIdNotFound > Meldungen. Wie gesagt - eklig - aber pragmatisch.
Danke. Wie war das nun, gab es schon einen Bugreport dafuer? Waere doch sicherlich interessant, oder?