LINUX.ORG.RU

2 SATA HDD

 


0

2

Привет!

В общем, трабл такой:

материнка Asus P5G41T - такая вот https://www.asus.com/Motherboards/P5G41TM_LX/

У неё 4 SATA порта. Южный мост AHCI не поддерживает. По-сути, похоже, просто IDE разведено как SATA, то есть оно явно в master/slave режиме попарно.

Проблема вот в чем: когда я подключаю 2 жестких диска в master-slave, то есть в порты [SATA0+SATA1] или [SATA2+SATA3], то при обращении одновременно к двум дискам начинают сыпаться ошибки типа

Jan 17 00:16:34 mkdlab1 kernel: [ 1991.008082] ata1: lost interrupt (Status 0x50) Jan 17 00:16:34 mkdlab1 kernel: [ 1991.008124] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen Jan 17 00:16:34 mkdlab1 kernel: [ 1991.008530] ata1.00: failed command: WRITE DMA Jan 17 00:16:34 mkdlab1 kernel: [ 1991.008798] ata1.00: cmd ca/00:08:38:37:49/00:00:00:00:00/e4 tag 0 dma 4096 out Jan 17 00:16:34 mkdlab1 kernel: [ 1991.008805] res 40/00:00:09:4f:c2/00:00:00:00:00/10 Emask 0x4 (timeout) Jan 17 00:16:34 mkdlab1 kernel: [ 1991.009594] ata1.00: status: { DRDY } Jan 17 00:16:34 mkdlab1 kernel: [ 1991.009832] ata1: soft resetting link Jan 17 00:16:34 mkdlab1 kernel: [ 1991.180395] ata1: FORCE: cable set to 40c Jan 17 00:16:34 mkdlab1 kernel: [ 1991.188351] ata1.00: configured for UDMA/133 Jan 17 00:16:34 mkdlab1 kernel: [ 1991.196245] ata1.01: configured for UDMA/33 Jan 17 00:16:34 mkdlab1 kernel: [ 1991.196282] ata1: EH complete

Насколько я помню, в IDE режимы «делились пополам» при использовании master+slave. Типа если контроллер поддерживал UDMA5, то обоим винтам на канале надо было говорить UDMA2 - и всё прекрасно работало. Видимо, тут та же проблема «configured for UDMA/133 .... configured for UDMA/33».

Можно ли как-то принудительно в линуксе им сказать, чтобы «жили» в UDMA2? hdparm -X udma2 не помогает - ругается на ошибку.

★★★★★

Ах да, чуть не забыл:

если винты повесить на SATA0+SATA2 (то есть, оба «master»), никаких ошибок не сыплется.

То есть, это не глюки кабелей и не глюки винтов.

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

А зачем их вешать на один канал? Или планируется более 2 винтов?

Ну и да, ничего указывать явно не надо, ни в IDE ни здесь. Все должно работать.

Советую с настройками биоса поиграться...

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

Предполагается 4 винта.

Хотел на каждый порт по винту.

«Все должно работать.» - дак в том-то и дело, что «должно».

По hdparm -I на обоих винтах пишет, что включен UDMA6. То есть, если контроллер работает в UDMA5/6 и оба винта вешаются как master/slave, то результат вполне правильный - дерутся.

Ну, в общем, решил просто контроллер SATA отдельный ещё купить и повесить все 4 винта как master.

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

То есть, если контроллер работает в UDMA5/6 и оба винта вешаются как master/slave, то результат вполне правильный - дерутся.

Бред. С какой радости они должны драться-то??? На нормальных платах все прекрасно работает.

Смотрите настройки биоса, мож пляски с бубном помогут.

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

Дружище, ты меня за круглого кретина считаешь?

Игрался я с настройками биоса - без толку.

Да и, вообще говоря, 32-х битные ОС пере-инициализируют все устройства при запуске ОС. По-сути, от настроек биоса зависит только возможность загрузить саму ОС. В дальнейшем настройки биоса полностью игнорируются.

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

По-сути, похоже, просто IDE разведено как SATA,

Так не бывает. IDE вот, бывало, вешали на SATA-контроллер.

Типа если контроллер поддерживал UDMA5, то обоим винтам на канале
надо было говорить UDMA2

Чего ?? Надо было устройства подключать, которые один и тот же режим поддерживают, иначе выставлять по минимальному.

когда я подключаю 2 жестких диска в master-slave

Нет понятия master/slave у SATA.

Видимо, тут та же проблема «configured for UDMA/133 .... configured for UDMA/33».

По идее, на разных каналах должно быть можно разную скорость использовать. Но х его з.

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

Да и, вообще говоря, 32-х битные ОС пере-инициализируют все устройства при запуске ОС. По-сути, от настроек биоса зависит только возможность загрузить саму ОС. В дальнейшем настройки биоса полностью игнорируются.

Бред. Отключите контроллер SATA в биосе, и попробуйте с флэшки подмонтировать SATA девайс...

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

Бред.

Нет, это правда.

Отключите контроллер SATA в биосе

Тут вопрос в том, как отключается контроллер. В некоторых реализациях он, действительно, отключается, либо могут переключаться режимы (тот же вариант с ahci/legacy). Но это не относится к настройкам самого контроллера потом. Например, в прошлом, я часто пользовался этим при подключении больших HDD к контроллерам, которые это не поддерживали. Просто надо было установить параметры CHS таким образом, чтобы H и S соответствовали большому HDD, а C поставить в пределах, достаточных для загрузочного раздела (ну или максимум). Очень смешно было читать про максимальный поддерживаемый объём в зависимости от материнки.

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

Есть понятие у интел контроллеров, которые имитируют IDE на SATA каналах.

Нет понятия master/slave у SATA. Понятие появляется только тогда, когда IDE на SATA вешают. Полноценный IDE, с двумя разъёмами.

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

«Нет понятия master/slave у SATA»

Вот только проблемка в том, что в списке дисков биос мне пишет 3M, 3S, 4M, 4S. :)

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

Тут вопрос в том, как отключается контроллер.

Точно так же как и конфигурируется. Записью определенных битов в регистры устройства.

В некоторых реализациях он, действительно, отключается, либо могут переключаться режимы (тот же вариант с ahci/legacy). Но это не относится к настройкам самого контроллера потом.

Неужто? Т.е. запустив контроллер в legacy, после загрузки линя он заработает в ahci?

Например, в прошлом, я часто пользовался этим при подключении больших HDD к контроллерам, которые это не поддерживали. Просто надо было установить параметры CHS таким образом, чтобы H и S соответствовали большому HDD, а C поставить в пределах, достаточных для загрузочного раздела (ну или максимум).

Путаете теплое с мягким. Поддержку LBA/LBA48 биосом с режимами работы контроллера.

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

Бред. Повторяюсь, возьмите интел мамку с native/legacy режимом. Возьмите любую утиль типа виктории/MHDD. Подключите винты, и посмотрите как они определяются на IDE контроллерах.

А еще интел мамки умеют пару SATA портов представлять как master/slave девайсы первичного или вторичного канала стандартного IDE контроллера, на стандартных портах ввода-вывода...

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

Неужто? Т.е. запустив контроллер в legacy, после загрузки линя он заработает в ahci?

Ужто. Предлагаю перечитать, что я написал. Одно дело - переключение режимов работы вообще, другое - настройки в конкретном режиме работы.

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

А еще интел мамки умеют пару SATA портов представлять как

Это - не SATA. Ещё раз. Рекомендую почитать про стандарты.

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

Отключите AHCI на интеле ICH7-ICH10, убедитесь.

У меня ICH5 есть. Он, вовсе, AHCI не знает. В чём я должен убедиться ?

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

Какие настройки? Поддержка LBA/размер винта/прочее - это не настройки контроллера, это настройки функций BIOS, контроллеру на это плевать. Так что мимо.

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

Переключите в legacy.

Предлагаю взять описание контроллера и убедиться, что это всего лишь логическое представление, которое не имеет отношение к аппаратной части и, как следствие, вообще никак не влияет на взаимную работу SATA-устройств с разными версиями SATA.

контроллеру на это плевать. Так что мимо.

Предлагаю изучить man hdparm.

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

Предлагаю взять описание контроллера и убедиться, что это всего лишь логическое представление, которое не имеет отношение к аппаратной части и, как следствие, вообще никак не влияет на взаимную работу SATA-устройств с разными версиями SATA.

Какие разные версии SATA? Вы о чем? ICH5 поддерживает одну-единственную версию сата - SATA 1.

Возьмите винт с кучкой бэдов, повешайте на один канал. На второй канал повешайте нормальный винт. Попробуйте почитать с обеих винтов и убедитесь, как один винт не влияет на другой...

Предлагаю изучить man hdparm.

Предлагаю попробовать включить через hdparm или еще как отклченный в биосе канал IDE контроллера к примеру.

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

Какие разные версии SATA ?

Если посмотреть в начало обсуждения, можно увидеть фразу: «Нет понятия master/slave у SATA». И чей-то ответ: «Есть понятие у интел контроллеров, которые имитируют IDE на SATA каналах». Так вот. Логическая имитация этого для ОС к обсуждаемой проблеме никак не относится. И речь, изначально, о том, что два SATA-устройства не должны оказывать влияние друг на друга. Никак.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от NiTr0

или еще как отклченный в биосе канал IDE контроллера к примеру.

Да не вопрос. Всё зависит от реализации в железе. :-) Только не hdparm за это уже отвечать будет. А вот всякие настройки UDMA/разное (которые раньше и в биос можно было делать) вполне себе можно менять. А, ещё, можно вовсе BIOS контроллера отключить, к примеру, SCSI, или дополнительного IDE/SATA, если они у материнки отдельные, и всё будет работать.

Кстати, настрой Intel Matrix RAID (он там с какого ICH пошёл ?) и попробуй его увидеть не в виде отдельных разделов (без mdadm).

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

И речь, изначально, о том, что два SATA-устройства не должны оказывать влияние друг на друга. Никак.

Повторяюсь: возьмите посыпавшийся винт, который на каждый запрос чтения задумывается секунд на 30. Повешайте его на ICH5 ваш, переключив его в legacy (ну чтобы порты сата на одном IDE канале видны были). И посмотрите, как дохлый винт «не будет оказывать влияния» на винт на втором порту.

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

возьмите посыпавшийся винт

Поищу.

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

А, ещё, можно вовсе BIOS контроллера отключить, к примеру, SCSI, или дополнительного IDE/SATA, если они у материнки отдельные, и всё будет работать.

Угу, сконфигуренное по умолчанию. Переключить его в AHCI из IDE к примеру не получится при всем желании. Или в RAID (после чего меняются DeviceID).

Кстати, настрой Intel Matrix RAID (он там с какого ICH пошёл ?) и попробуй его увидеть не в виде отдельных разделов (без mdadm).

Он вообще-то программно реализуется, на уровне биоса...

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

Он вообще-то программно реализуется, на уровне биоса...

Вот-вот. После чего не работает.

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

Угу, сконфигуренное по умолчанию. Переключить его в AHCI из IDE к примеру не получится при всем желании.

Я даже уточню слегка: у интелов южные мосты умеют AHCI только те, которые имеют индекс R.

То есть, ICH7 - не умеет. ICH7R - умеет. И так далее.

Кроме того, во многих случаях AHCI становится доступной только если перевести контроллер именно в режим софтверного RAID. А без этого режима оно работает как legacy.

Не знаю в чем причина именно такой модели поведения контроллера, но подозреваю что в некоторой креативности создателей материнок и биосописателей под них.

В моей матери стоит ICH7 и он работает только в режиме legacy и больше никак.

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

Т.е. запустив контроллер в legacy, после загрузки линя он заработает в ahci?

Для моего ich8m на ноуте benq s41 именно такой трюк работает. Грузится как ide c кодом 8086:2828, но после выполнения в grub setpci -d 8086:2828 90.b=40 до загрузки ядра он становится 8086:2829 и в лине уже работает в ahci

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

Хмммм... А ты действительно уверен, что там ahci ?

Ну ядро-то, предположим, думает что ahci.

А на самом деле - просто некорректно работает с контроллером...

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

Так думает ядро линя в mint 17 и оффтоп 7 в дуалбуте. Маловероятно что они оба ошибаются ;)

NightOperator ★★★
()
Последнее исправление: NightOperator (всего исправлений: 1)
Ответ на: комментарий от slamd64

Кстати возвращаяcь к стартовому посту - если hdparm не ставит тебе udma5/udma2, то попробуй до загрузки системы через тот же граб сделать libata.force=X:80c (для udma5,6) или 40c (для udma2 max) соответственно, где X берёшь из dmesg. Но имхо проблема всё-таки не в конкретном режиме udma.

NightOperator ★★★
()
Последнее исправление: NightOperator (всего исправлений: 1)
Ответ на: комментарий от NightOperator

Я вот нагуглил интеловую доку про ICH7.

Там пишут по-буржуйски, что AHCI-compatible только ICH7R/ICH7-M и какой-то ICH7-DH.

Типа, у ICH7 отвечающие за AHCI регистры не запускаются по дефолту. А отвечающий за включение регистров порт какой-то 94h - в ридонли. Но можно поменять значение другого порта, и тогда оно из ридонли станет rw. Появится ли функционал AHCI, если во все регистры/порты написать правильные значения - я ХЗ.

Вполне может быть. Но тогда для этого нужно, наверное, написать свою операционку, которая будет прокладкой между BIOSом и линуксовым загрузчиком.

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

Ну разницы собссно нет, переключается ли оно записью в регистр кодом биоса или пользовательским кодом. Но драйвер этого не делает.

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

Очень не факт, что DOS сможет работать после переключения режима контроллера.

DOS ведь использует 10h прерываение BIOSа для работы с железом. Соответственно, нужно чтобы BIOS «знал» о контроллере.

Для SCSI контроллеров используется собственный BIOS контроллера - расширение (замещение) соответствующих вызовов системного BIOSа.

А вот как быть с контроллером, физически умеющим AHCI, но не предоставляющем BIOSу информацию о себе и соответствующие прерывания?

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

Ну то есть, теоретически, наверное можно сделать так:

1. Загрузить DOS в режиме legacy.

2. Создать RAM-диск и поместить туда loadlin, образ ведра, образ init(rd,ramfs) - если используется, command.com

3. переключить вызовы command.com на рамдиск, запустив command.com с рамдиска

4. запустить переключалку режима контроллера в ahci

5. из рамдиска запустить loadlin

6. надеяться, что ведру хватит PCI ID для правильного распознавания и инициализации контроллера (типа, что не нужно ACPI и прочее щасте).

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

Я же и говорю - драйвер сродни досовскому. Обработчик 10-го прерывания.

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

Угу, такое тоже должно прокатить. Или патчевать grub, чтобы не заниматься нетрадиционными извращениями.

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

Вопрос, что считать нетрадиционными извращениями - груб или дос. :)

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

В какой-то версии ядра «исправили» порядок инициализации устройств на ide-шине так, что у меня перестал определяться сд-ром benq dw1640, потом вернули взад, в новых версиях, возможно, опять «исправили»

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

А у меня lspci на SATA девайс пишет «ide mode» незавсимо от того, чего в биосе выбрать

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