過年前, 因為某台機器連續壞了二顆 Seagate 250G HDD.
所以備載容量下降 500G.
在 slzzp 的道德勸說之下(他說資料比金錢重要呀), 所以最後就選了 Seagate ES.2 ST31000340NS (1000G) 的 HDD 做為備援.
原來以為裝上去就可以用, 不過慘的是, Linux 預設只抓到 33MB.
ata4: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
ata4.00: HPA detected: current 65134, native 1953525167
ata4.00: ATA-6: ST31000340NS, SN04, max UDMA/133
ata4.00: 65134 sectors, multi 16: LBA48 NCQ (depth 0/32)
ata4.00: configured for UDMA/100
scsi 3:0:0:0: Direct-Access ATA ST31000340NS SN04 PQ: 0 ANSI: 5
sd 3:0:0:0: [sdc] 65134 512-byte hardware sectors (33 MB)
sd 3:0:0:0: [sdc] Write Protect is off
sd 3:0:0:0: [sdc] Mode Sense: 00 3a 00 00
sd 3:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sd 3:0:0:0: [sdc] 65134 512-byte hardware sectors (33 MB)
sd 3:0:0:0: [sdc] Write Protect is off
sd 3:0:0:0: [sdc] Mode Sense: 00 3a 00 00
sd 3:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sdc: unknown partition table
sd 3:0:0:0: [sdc] Attached SCSI disk
sd 3:0:0:0: Attached scsi generic sg2 type 0
看起來真是悲慘呀, 1000G 只抓到 33MB, 連零頭都沒有.
到 Seagate 的網站 Search 他們的 forums , 有查到一篇類似的文章
ST31000340NS now appears as a 31MB Hard Drive
有講到用 Seatools 去調整 Sectors 的數量, 就可以使用.
有人也提到是 BIOS 的問題, 不過因為小弟不才, 剛好搞過 IDE Linux Driver, 基本上 OS 都是跨過 BIOS, 透過 IDE Controller 去讀取 HDD 介面的, 所以如果 size 有問題, 除非是 IDE Controller 的 BIOS 回寫到 IDE. 否則應該也不會有這樣的問題. LBA48 主要的限制是在 137G, 所以有人提到 chipset 的 bug, 我也認為不太可能. (我同時試過 Silicon Image 和 Intel ICH5).
所以我就很厚臉皮的寫信去 Linux-Ide Mailing List 問.
Linux-ide 的 developer 也很熱心, 很快的就開發出新的工具解決我的問題.
1. 下載 hdparm-8.1(含以後的版本)
2. 檢查 HDD 實際的大小
# ./hdparm -N /dev/sdc
/dev/sdc:
max sectors = 65134/1953525168, HPA is enabled
3. 暫時改變 HDD 的 Sectors
./hdparm -N1953525168 /dev/sdc
4. 用 rmmod sata_sil 再 modprobe sata_sil 讓 Linux 重抓一次硬碟的容量. 理論上直接 Access 應該也 OK, 但是我是失敗的.
5. 如果 fdisk 沒有問題, 再用指令
./hdparm -Np1953525168 /dev/sdc
寫回去 HDD.
6. 重開機看 Linux 是不是能正確抓到所有的容量…
7. 如果沒有抓到所有的容量, 請換一台電腦再試試看吧….
我自己是 Step 1-6 就成功了, 用到目前也沒有問題.
發佈留言