LINUX.ORG.RU

Старый винт и DMA-режим


0

0

Проблема следующая. Есть старый и слегка покоцанный 100-гигабайтник Seagate. При загрузке он определяется как:

hdb: ST3120022A, ATA DISK drive
hdb: host max PIO5 wanted PIO255(auto-tune) selected PIO4
hdb: host side 80-wire cable detection failed, limiting max speed to UDMA33
hdb: UDMA/33 mode selected
hdb: max request size: 512KiB
hdb: 234441648 sectors (120034 MB) w/2048KiB Cache, CHS=16383/255/63

Но в udma/33 он работает некорректно, сыпет ошибками и т.д, поэтому приходится выполнять:
hdparm -Xudma0 /dev/hdb, после чего винт нормально работает в UDMA/16.

Теперь собственно вопрос: как, окромя вставки команды в rc-скрипты, можно указать системе, что этот винт надо устанавливать в UDMA/16? Это в сторону udev нужно копать, или ядру параметр передать какой-нить? В BIOS на эту тему ничего не нашел, там DMA можно лишь включить, и выключить.
Заранее спасибо за ответы.

★★★★★

Может тебе просто следует внимательно посмотреть на штырьки в IDE разъёме винта? Один из них мог уйти глубоко внутрь и поэтому получается, что у тебя "host side 80-wire cable detection failed". Просто подтянешь его обратно пинцетом и будет работать нормальный DMA автоматом. У меня такое сто раз было.

Demon37 ★★★★
()
Ответ на: комментарий от Demon37

DMA работает нормальный. мне нужно _ниже_ чем он выставляется, а не выше :) винт на низкой скорости еще работает, а на высокой уже дохнет.

Komintern ★★★★★
() автор топика

> Это в сторону udev нужно копать, или ядру параметр передать какой-нить? В BIOS на эту тему ничего не нашел, там DMA можно лишь включить, и выключить.

Ядру передать libata.force с нужными значениями.

anonymous
()
Ответ на: комментарий от anonymous

> Ядру передать libata.force с нужными значениями.

И в UDMA/16 окажутся все винты :)

Кроме как в rc.local - в слаке некуда команды hdparm'а совать.

Deleted
()
Ответ на: комментарий от Deleted

libata.force= [LIBATA] Force configurations. The format is comma
separated list of "[ID:]VAL" where ID is
PORT[:DEVICE]. PORT and DEVICE are decimal numbers
matching port, link or device. Basically, it matches
the ATA ID string printed on console by libata. If
the whole ID part is omitted, the last PORT and DEVICE
values are used. If ID hasn't been specified yet, the
configuration applies to all ports, links and devices.

кажется то что надо :)

Komintern ★★★★★
() автор топика
Ответ на: комментарий от Deleted

и кстати я не в rc.local пихаю, а в rc.hdparm, который сам написал и который аж из rc.S дергается :)

Komintern ★★★★★
() автор топика
Ответ на: комментарий от Deleted

> И в UDMA/16 окажутся все винты :)

4.2

там можно указывать устройство.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.