web-dev-qa-db-ja.com

CentOSでドライブのSATAリンク速度を下げる方法は?

CentOSで起動時にSATAドライブを3Gb/sで実行するにはどうすればよいですか?

背景:

6Gb/s SATA転送速度をサポートしていると主張するマザーボードに問題がありますが、その上に4つのドライブを使用すると、ディスクIOが重いソフトウェアRAID 10で、SATAリンクの一部がカーネルエラーをスローし始めます。 ata1.00: failed command: WRITE FPDMA QUEUED。ただし、常にata1とは限らず、毎回異なるドライブであり、各ディスクで拡張テストを個別に実行してもエラーは発生しません。

エラーが発生すると、カーネル/ OS(CentOS 6.2)は最終的にリンクを数回リセットし、引き続き失敗する場合は、リンク速度を3Gb/sに変更します。それが発生すると、セッションの残りの期間、そのドライブのエラーが停止します。

マザーボードのSATAバスが4つのドライブすべてを6Gb/sで処理できるとは思えないため、OSにSATAリンクを3Gb/sに設定して起動時に開始するように指示します。マザーボードのBIOSでリンク速度を変更するオプションが見つかりませんでした。

質問:

  1. どうすればいいですか?すなわち。設定ファイル?

  2. RAIDアレイが組み立てられ、ルートパーティションがマウントされた状態でシステムが実行されている間に実行できますか、それともレスキューCDから起動する必要がありますか?

  3. これによりデータが失われますか?もちろんバックアップは持っていますが、再インストール/復元は数時間の作業であり、できれば避けたいです。

6
Nick

残念ながら実行時には何もありません(読み取り専用の情報を含む/ 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仕様を正しく(またはそのバグのあるものなど)正しく認識していないためです。

5
Matthew Ife

ここでのMIfeの答えは良い手がかり(参考になる参考文献として+1)でしたが、完全に完全ではありませんでした。

SATAリンクを3Gb/sに設定するには:

  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. リブート

上記を実行した後、IO仮想マシンイメージをディスクのある部分から別の部分にコピーするような集中的な操作をこれ以上取得することなく実行できるようになりましたWRITE FPDMA QUEUEDエラー。

4
Nick

誰かが私と同じようにこの質問につまずくかもしれません:問題の非常に単純な解決策は、SATAケーブルを交換することです。 SSDを2014年から2018年のようなシステムに移動し、古いシールドされていないケーブルを使用して接続しました。ここで説明したエラーと問題を正確に受け取りました。ケーブルを最新のシールド付きケーブルに交換した後、それらはすべて完全になくなりました。

/var/log/syslog SATAコントローラーがリンク速度を1.5 GBにリセットしようとしましたが、ディスクとの通信に失敗しました。構成を変更することなく、新しいケーブルを接続しても問題なく動作しました。

したがって、いくつかの構成変更を適用する前に、単純なソリューションアプローチを試してみてください。

1
Dirk Hillbrecht

この方法では3Gbpsにダウングレードできない場合がありますが、リンクを1.5Gbpsにダウングレードできる可能性があります。 10kドライブがないかSSDでない限り、いずれにしても150MB/sのリンクを飽和させることはできません...

ほとんどのハードドライブは、ジャンパーを使用して低速のネゴシエーションを強制できます。 Google for "Sata 1ジャンパードライブモデル"

0
Hubert Kario