次の問題に直面しました。 btrfsはデバイスのセクタ128の書き込みエラーを報告します/dev/sdd
。
sd 6:0:0:0: [sdd] Invalid command failure
sd 6:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 6:0:0:0: [sdd] Sense Key : Illegal Request [current]
sd 6:0:0:0: [sdd] Add. Sense: Invalid field in cdb
sd 6:0:0:0: [sdd] CDB: Write(10): 2a 08 00 00 00 80 00 00 08 00
end_request: critical target error, dev sdd, sector 128
BTRFS: lost page write due to I/O error on /dev/sdd
BTRFS: bdev /dev/sdd errs: wr 913238, rd 1, flush 150, corrupt 0, gen 0
私はこれを実行し、badblocks /dev/sdd
不良ブロックを返しませんでした。とにかく、私は(ある程度)安全を維持することに決め、セクター2048(デフォルト)で始まるパーティションを作成しました。
# fdisk -l /dev/sdd
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 234441647 234439600 111.8G 83 Linux
ドライブを btrfs ボリュームに追加します。すぐに同じ書き込みエラーが再び発生します(注、2176 = 2048 + 128)。
sd 13:0:0:0: [sdd] Invalid command failure
sd 13:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 13:0:0:0: [sdd] Sense Key : Illegal Request [current]
sd 13:0:0:0: [sdd] Add. Sense: Invalid field in cdb
sd 13:0:0:0: [sdd] CDB: Write(10): 2a 08 00 00 08 80 00 00 08 00
end_request: critical target error, dev sdd, sector 2176
BTRFS: lost page write due to I/O error on /dev/sdd1
BTRFS: bdev /dev/sdd1 errs: wr 12253, rd 0, flush 0, corrupt 0, gen 0
セクター128と2176の両方が不良ですか?さて、もう一度実行してbadblocks /dev/sdd
(つまり、不良ブロックが報告されていない)、パーティションをさらにプッシュしました。
# fdisk -l /dev/sdd
Device Boot Start End Sectors Size Id Type
/dev/sdd1 4096 234441647 234437552 111.8G 83 Linux
btrfs ボリュームを再作成します。 「不良ブロック」が同じ魔法の場所(4224 = 4096 + 128)に再び表示されます。
sd 6:0:0:0: [sdd] Invalid command failure
sd 6:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 6:0:0:0: [sdd] Sense Key : Illegal Request [current]
sd 6:0:0:0: [sdd] Add. Sense: Invalid field in cdb
sd 6:0:0:0: [sdd] CDB: Write(10): 2a 08 00 00 10 80 00 00 08 00
end_request: critical target error, dev sdd, sector 4224
BTRFS: lost page write due to I/O error on /dev/sdd1
BTRFS: bdev /dev/sdd1 errs: wr 124433, rd 0, flush 0, corrupt 0, gen 0
私は偶然の一致を信じていません。つまり、マジック128以前と128以降は他のセクタが失敗しませんでしたが、特定のセクタに問題がありました。
何が大丈夫ですか?私にカーネルのバグのように聞こえます。
追加情報:
- Linuxカーネルv3.16.0
/dev/sdd
SATA - USBアダプタJMicron経由(ID 152d:0567、どのように見えるか見てください):
情報:
sd 4:0:0:0: [sdb] Attached SCSI disk
scsi 6:0:0:0: Direct-Access JMicron Generic 0116 PQ: 0 ANSI: 6
sd 6:0:0:0: Attached scsi generic sg5 type 0
sd 6:0:0:0: [sdd] 234441648 512-byte logical blocks: (120 GB/111 GiB)
sd 6:0:0:0: [sdd] Write Protect is off
sd 6:0:0:0: [sdd] Mode Sense: 47 00 10 08
sd 6:0:0:0: [sdd] Write cache: enabled, read cache: enabled, supports DPO and FUA
sd 6:0:0:0: [sdd] Attached SCSI disk
答え1
問題の原因を見つけたようです。 JMicron SATA ブリッジに接続します。「Cdbの無効なフィールド」により外部USB3ディスクが失敗する。修理するそして送信bf5c4136fa5ce471bdbf4cf59a813e32755fd014含まれるカーネル v3.18.6、2015年2月6日に投稿されました。私は次のカーネルを試しました。
- 3.18.6-1~exp1- 役に立たない
- 3.19.3-1~exp1- 役に立たない
- 4.2.3-2~bpo8+1- 役に立たない。
実際の修正は次のように提出されました。9fa62b1a31c96715aef34f25000e882ed4ac4876カーネル4.4.xで利用可能です。
作業カーネル v4.4.x の dmesg は次のようになります。
scsi host7: uas
scsi 7:0:0:0: Direct-Access JMicron Generic 0116 PQ: 0 ANSI: 6
sd 7:0:0:0: [sdc] 234441648 512-byte logical blocks: (120 GB/111 GiB)
sd 7:0:0:0: [sdc] 4096-byte physical blocks
sd 7:0:0:0: [sdc] Write Protect is off
sd 7:0:0:0: [sdc] Mode Sense: 53 00 10 08
sd 7:0:0:0: [sdc] Disabling FUA
sd 7:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA