파티션을 더 이동한 후에도 파일 시스템에서 특정 섹터에 대한 쓰기 오류가 보고됩니다.

파티션을 더 이동한 후에도 파일 시스템에서 특정 섹터에 대한 쓰기 오류가 보고됩니다.

다음 문제에 직면했습니다. 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 이후에는 다른 섹터가 실패하지 않았지만 해당 특정 섹터에 문제가 있었습니다.

무엇이 괜찮습니까? 나에게 커널의 ​​버그처럼 들립니다.

추가 정보:

정보:

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일에 게시됨. 나는 다음 커널을 시도했습니다.

실제 수정 사항은 다음과 같이 제출되었습니다.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

관련 정보