Как снизить скорость SATA-соединения накопителя в CentOS?
Как заставить CentOS запускать диски SATA со скоростью 3 Гбит / с при загрузке?
Фон:
У меня проблема с материнской платой, которая утверждает, что поддерживает скорость передачи данных SATA 6 Гбит / с, но при использовании на ней 4 дисков, в программном RAID 10 с интенсивным дисковым вводом-выводом некоторые ссылки SATA начинают выдавать ошибки ядра, т.е. ata1.00: failed command: WRITE FPDMA QUEUED
, Но каждый раз это другой диск, не всегда ata1, и выполнение расширенного теста на каждом диске в отдельности не вызывает ошибок.
При возникновении ошибок ядро / ОС (CentOS 6.2) в конечном итоге сбрасывает канал несколько раз, а когда он продолжает отказывать, он изменяет скорость канала до 3 Гбит / с. Как только это происходит, ошибки останавливаются для этого диска до конца сеанса.
Что я хотел бы сделать, так это сказать ОС, чтобы при загрузке установить для SATA-ссылок скорость 3 Гбит / с, поскольку я не думаю, что шина SATA материнской платы может обрабатывать все 4 диска со скоростью 6 Гбит / с. Я не смог найти вариант в BIOS материнской платы, чтобы изменить скорость соединения.
Вопросы:
Как бы я поступил так? то есть. файл конфигурации?
Это можно сделать, когда система работает с собранным RAID-массивом и смонтированным корневым разделом, или мне нужно загрузиться с аварийного компакт-диска?
Приведет ли это к какой-либо потере данных? Конечно, у меня есть резервные копии, но переустановка / восстановление - это несколько часов работы, которых я бы хотел избежать, если это возможно.
4 ответа
К сожалению, во время выполнения ничего не происходит (есть /sys/class/ata_link, которая содержит информацию только для чтения).
Однако при загрузке кажется, что вы можете установить параметры, заставляющие значения, которые вы хотите. Документация для этого здесь: http://www.kernel.org/doc/Documentation/kernel-parameters.txt
Specifically
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.
If only DEVICE is omitted, the parameter applies to
the port and all links and devices behind it. DEVICE
number of 0 either selects the first device or the
first fan-out link behind PMP device. It does not
select the host link. DEVICE number of 15 selects the
host link and device attached to it.
The VAL specifies the configuration to force. As long
as there's no ambiguity shortcut notation is allowed.
For example, both 1.5 and 1.5G would work for 1.5Gbps.
The following configurations can be forced.
* Cable type: 40c, 80c, short40c, unk, ign or sata.
Any ID with matching PORT is used.
* SATA link speed limit: 1.5Gbps or 3.0Gbps.
* Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
udma[/][16,25,33,44,66,100,133] notation is also
allowed.
* [no]ncq: Turn on or off NCQ.
* nohrst, nosrst, norst: suppress hard, soft
and both resets.
* dump_id: dump IDENTIFY data.
If there are multiple matching configurations changing
the same attribute, the last one is used.
Судя по всему, параметр ядра libata.force=3.0G должен работать.
Что касается потери данных, то, вероятно, нет - но, честно говоря, поскольку производители SATA явно не соблюдают спецификацию SATA правильно (или с ошибками, или что-то еще), то кто знает.
Ответ MIfe здесь был хорошей подсказкой (+1 для полезной ссылки), но не полностью полной.
Чтобы установить ссылки SATA на 3 Гбит / с:
редактировать
/boot/grub/grub.conf
Найдите строку, которая начинается с
kernel
, По моему это было:kernel /vmlinuz-2.6.32-220.17.1.el6.x86_64 ro root=/dev/mapper/vg_lago-host rd_NO_LUKS LANG=en_US.UTF-8...
добавлять
libata.force=3.0
в эту строку ядра где-то.перезагружать
Выполнив вышесказанное, я теперь могу выполнять интенсивные операции ввода-вывода, такие как копирование образов виртуальной машины с одной части диска на другую, не получая больше WRITE FPDMA QUEUED
ошибки.
Как кто-то может наткнуться на этот вопрос так же, как я только что сделал: очень простым решением проблемы может быть замена кабеля SATA. Я перенес SSD с 2014 года в систему 2018 года и использовал старый неэкранированный кабель для его подключения. Я получил именно ошибки и проблемы, описанные здесь. Все они полностью исчезли после того, как я заменил кабель на современный экранированный.
Я мог даже видеть в /var/log/syslog
что контроллер SATA попытался сбросить скорость соединения до 1,5 ГБ и все еще не смог связаться с диском. Без каких-либо изменений в конфигурации, он работал абсолютно безупречно с подключенным новым кабелем.
Поэтому, прежде чем применять некоторые изменения конфигурации, вы можете просто попробовать простой подход к решению.
Понижение его до 3Gbps может быть невозможно, но должно быть возможно понизить ссылки до 1,5 Гбит / с. Если у вас нет дисков 10 КБ или SSD, они все равно не смогут насытить канал со скоростью 150 МБ / с...
Большинство жестких дисков можно заставить договориться о более низкой скорости, используя перемычки. Google для "Sata 1 перемычки вашей модели диска"