Как снизить скорость 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 материнской платы, чтобы изменить скорость соединения.

Вопросы:

  1. Как бы я поступил так? то есть. файл конфигурации?

  2. Это можно сделать, когда система работает с собранным RAID-массивом и смонтированным корневым разделом, или мне нужно загрузиться с аварийного компакт-диска?

  3. Приведет ли это к какой-либо потере данных? Конечно, у меня есть резервные копии, но переустановка / восстановление - это несколько часов работы, которых я бы хотел избежать, если это возможно.

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 Гбит / с:

  1. редактировать /boot/grub/grub.conf

  2. Найдите строку, которая начинается с 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...

  3. добавлять libata.force=3.0 в эту строку ядра где-то.

  4. перезагружать

Выполнив вышесказанное, я теперь могу выполнять интенсивные операции ввода-вывода, такие как копирование образов виртуальной машины с одной части диска на другую, не получая больше WRITE FPDMA QUEUED ошибки.

Как кто-то может наткнуться на этот вопрос так же, как я только что сделал: очень простым решением проблемы может быть замена кабеля SATA. Я перенес SSD с 2014 года в систему 2018 года и использовал старый неэкранированный кабель для его подключения. Я получил именно ошибки и проблемы, описанные здесь. Все они полностью исчезли после того, как я заменил кабель на современный экранированный.

Я мог даже видеть в /var/log/syslog что контроллер SATA попытался сбросить скорость соединения до 1,5 ГБ и все еще не смог связаться с диском. Без каких-либо изменений в конфигурации, он работал абсолютно безупречно с подключенным новым кабелем.

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

Понижение его до 3Gbps может быть невозможно, но должно быть возможно понизить ссылки до 1,5 Гбит / с. Если у вас нет дисков 10 КБ или SSD, они все равно не смогут насытить канал со скоростью 150 МБ / с...

Большинство жестких дисков можно заставить договориться о более низкой скорости, используя перемычки. Google для "Sata 1 перемычки вашей модели диска"

Другие вопросы по тегам