一度は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ビットの読み取り/書き込みはドライブ自体の設定を反映/変更しません。
このワーストケースのシナリオでは、書き込みキャッシュを無効にしてカーネルに新しいキャッシュ設定を通知するには、hdparm
SATLビットと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/fstab
gnome-disks を使用してインストールオプションを含めるようにドライブオプションを編集または変更できます。sync