Ubuntuで外付けハードドライブの書き込みキャッシュ機能(dmesg)を実際にどのように無効にしますか?

Ubuntuで外付けハードドライブの書き込みキャッシュ機能(dmesg)を実際にどのように無効にしますか?

一度はsudo hdparm -W 0 /dev/sdbハードディスクの書き込みキャッシュをオフにしましたが、情報によると/dev/sdb: write-caching = 0 (off) 実際に書き込みキャッシュがオフになっていることがわかりました。

ただし、このディレクティブを使用すると、次のようにsudo dmesg表示されます。

[23361.915713] sd 32:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

書き込みキャッシュがまだ有効になっていることを確認し、Ubuntuで外付けハードドライブの書き込みキャッシュ機能(dmesg)を実際に無効にする方法を知りたいです。

答え1

出力は、dmesgデバイスが最初に見つかったときのようです。デバイス設定が変更されるたびに、この情報は再印刷されません。

hdparmこれにより、実際に書き込みキャッシュを無効にする必要があります。hdparm -W /dev/sdbクエリを再実行して確認できます。

答え2

USB(MSC / UAS)ドライブは、オペレーティングシステムにSCSIディスクとして表示されます。バックエンドドライブが(S)ATAドライブの場合、SCSI-ATA Translation Layer(SATL)はアダプタ/シャーシのブリッジチップファームウェアに実装されます。

SATLはATA / ACS標準のすべてのコマンド/機能のマッピングを実装するわけではありませんが、書き込みキャッシュ設定などの一般的な機能へのマッピングを持つことがよくあります。いずれにしても、ドライブの書き込みキャッシュ設定(つまり、キャッシュモードページのWCEビット)にマッピングされている対応するSCSI機能は、ドライブで書き込みキャッシュが有効になっていることを確認するためにカーネルが監視する機能です。

つまり、カーネル設定を変更しhdparmても認識できない場合は、SATLが結果を検出/反映しないか、カーネルに通知しないためです。

キャッシュ・モード・ページと MODE SENSE/MODE SELECT コマンドを実装するシェルがありますが、WCE ビットは実際の書き込みキャッシュ設定とまったく関連付けられていません。 WCEビットの読み取り/書き込みはドライブ自体の設定を反映/変更しません。

このワーストケースのシナリオでは、書き込みキャッシュを無効にしてカーネルに新しいキャッシュ設定を通知するには、hdparmSATLビットとWCEビットの実際の設定をそれぞれ変更する必要があります。

WCEビットが設定を反映している可能性がありますが、を使用して設定を変更すると、キャッシュされた値をトリガして更新する必要がありますhdparm。これはATA PASS-THROUGHコマンドを使用して実行されます。このような場合は、hdparmこれを避け、WCEビットを変更して設定を変更するだけで十分です。 (実際の設定が変更されたことを確認するには、hdparmまたはを使用します。)smartctl

WCEビットを変更するには、少なくとも2つの方法があります。 1つはユーザースペースプログラムを使用することですsdparm

sdparm --set WCE=0 /dev/sdX

write_throughもう1つの方法は、scsiディスクsysfsファイルに書き込むことですcache_type。次のコマンドを使用してファイルを検索できます。

find /sys/ -type f -path '*scsi_disk*cache_type'

lsscsiたとえば(またはUSBドライブ)を使用して、変更したい結果をlsusb.py -ui簡単に識別できるはずです。find

(このファイルには/sys/block/sdX/queue/write_cacheコンテンツがありますが、探しているファイルではありません。表現するWCEビットの現在値も同様です。 )

さらに、これらの両方の設定は一時的にすることができます。つまり、再起動や電源を入れ直しても保存されません。したがって、その設定を維持する必要がある場合は、起動/注文するたびに上記のプログラムを実行する必要があります。

編集:WCEを設定するたびに、私が言及した添付ファイルが実際に要求された値1に関係なく、実際の書き込みキャッシュ設定を有効に設定することに気づきました0。同様のシャーシがある場合は、常にWCEを0に変更してから、実際のキャッシュ設定を変更するために使用してくださいhdparm

答え3

USB経由でリムーバブルメディアへの書き込みキャッシュを無効にするには、ファイルを作成し(必要に応じて名前を付けることができます。で始まり、終了することを確認して/etc/udev/rules.d/99-udisks2-usb_mount.rulesください)、次のように入力します。99.rules

SUBSYSTEMS=="usb", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS_DEFAULTS}+="sync", ENV{UDISKS_MOUNT_OPTIONS_ALLOW}+="sync"

その後、再起動するか、コマンドを実行します。sudo udevadm control --reload-rules


特定のドライブの書き込みキャッシュを無効にするには、/etc/fstabgnome-disks を使用してインストールオプションを含めるようにドライブオプションを編集または変更できます。sync

関連情報