[linux] VYRIESENE: problem s prechodom na jadro 2.6.10rc1 - velke disky a stary HW

Lubomir Host rajo na platon.sk
Středa Únor 16 11:09:27 CET 2005


On Wed, Oct 27, 2004 at 04:50:37PM +0200, Lubomir Host wrote:
> Zdravim,
> 
> pouzivam starsie jadro 2.6.6-rc1 na starsom zeleze. Mam spraveny raid1
> na dvoch diskoch Maxtor 80G. Mirrorovane su jednotlive particie. Vypis
> 'mount' a 'cat /proc/mdstat' vyzera takto:
...[snip]...
> Pri upgrade na jadro 2.6.10rc1 som zobral stary .config, spravil make
> oldconfig, skompiloval, nainstaloval. Po reboote sa stalo to, ze
> posledne particie na disku "blbli". V dmesg bolo toto:
> 
> ---------------------------------------------------------------%<---------------------------------------------------------------
> 2004-10-27 13:56:48 Hostname [warning] kernel: end_request: I/O error, dev hdc, sector 88078911
> 2004-10-27 13:56:49 Hostname [err] kernel: Buffer I/O error on device hdc7, logical block 23437824
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: error=0x04 { DriveStatusError }
> 2004-10-27 13:56:49 Hostname [warning] kernel: ide: failed opcode was: unknown
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: error=0x04 { DriveStatusError }
> 2004-10-27 13:56:49 Hostname [warning] kernel: ide: failed opcode was: unknown
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: error=0x04 { DriveStatusError }
> 2004-10-27 13:56:49 Hostname [warning] kernel: ide: failed opcode was: unknown
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
> 2004-10-27 13:56:49 Hostname [warning] kernel: hdc: task_in_intr: error=0x04 { DriveStatusError }
> 2004-10-27 13:56:49 Hostname [warning] kernel: ide: failed opcode was: unknown
> 2004-10-27 13:56:49 Hostname [warning] kernel: ide1: reset: success
> ---------------------------------------------------------------%<---------------------------------------------------------------
> 
> V com moze byt problem? Chyba v jadre alebo v konfiguracii? Spominam
> si, ze kvoli starsiemu HW som musel zapinat v jadre volbu
> CONFIG_IDEDISK_STROKE.
> 
> Diik za kazdu radu, rajo

Odpoviem si teda sam: riesenie problemu je pomerne jednoduche. Pri boote
noveho jadra (k zmene doslo niekde medzi 2.6.6 a 2.6.8) treba pouzit
parametre "hda=stroke hdc=stroke".

V starsich jadrach (< 2.6.7) bolo potrebne mat zapnutu spominanu volbu
CONFIG_IDEDISK_STROKE. V novsich jadrach to treba jadru povedat
parametrom pri bootovani.

Odpoved sa nachadzala v linux-2.6.8/drivers/ide/ide-disk.c vo funkcii
idedisk_check_hpa():

-------------------------------%<-------------------------------
static inline void idedisk_check_hpa(ide_drive_t *drive)
{   
    unsigned long long capacity, set_max;
    int lba48 = idedisk_supports_lba48(drive->id);

    capacity = drive->capacity64;
    if (lba48)
        set_max = idedisk_read_native_max_address_ext(drive);
    else
        set_max = idedisk_read_native_max_address(drive);

    if (set_max <= capacity)
        return;

    printk(KERN_INFO "%s: Host Protected Area detected.\n"
             "\tcurrent capacity is %llu sectors (%llu MB)\n"
             "\tnative  capacity is %llu sectors (%llu MB)\n",
             drive->name,
             capacity, sectors_to_MB(capacity),
             set_max, sectors_to_MB(set_max));

    // nasledovne 2 riadky pribudli v 2.6.8 a nahradil sa tym
    // podmieneny preklad v starsich jadrach (CONFIG_IDEDISK_STROKE)
    if (!drive->stroke)
        return;

    if (lba48)
        set_max = idedisk_set_max_address_ext(drive, set_max);
    else
        set_max = idedisk_set_max_address(drive, set_max);
    if (set_max) {
        drive->capacity64 = set_max;
        printk(KERN_INFO "%s: Host Protected Area disabled.\n",
                 drive->name);
    }
}
-------------------------------%<-------------------------------

Jednoduchsiu odpoved mozno najst v linux-2.6.8/Documentation/ide.txt:

---------------------------------------%<---------------------------------------
 "hdx=stroke"           : Should you have a system w/ an AWARD Bios and your
                          drives are larger than 32GB and it will not boot,
                          one is required to perform a few OEM operations first.
                          The option is called "stroke" because it allows one
                          to "soft clip" the drive to work around a barrier
                          limit.
---------------------------------------%<---------------------------------------

Dakujem sam sebe za vyriesenie problemu. ;-)

rajo

-- 
Lubomir Host 'rajo' <rajo AT platon.sk>        ICQ #:  257322664
Platon Software Development Group              http://platon.sk/
GnuPG key: http://rajo.platon.sk/en/show,gpgkey
Encrypt your plaintext emails with GnuPG/PGP/OpenPGP:
http://platon.sk/cvs/cvs.php/scripts/perl/mail-gnupg/mail-gnupg-encrypt.pl
http://www.gnu.org/philosophy/no-word-attachments.html




Další informace o konferenci linux