= ホスト防護領域(HPA)の設定と参照 = <> == 目的 == * 手持ちのSSDでHPA(ホスト防護領域・`Host Protected Area`)を設定してみた。 * HPA設定による効果としては、 * OSからすら使用できない領域を設定することで、設定された領域への一切のアクセスを許さない。 * この効果は特にSSDの場合、ウェアレベリングに効果がでる。 * これは、使われない(特に書き込まれない)ことがハードウェア的に保証されているからである。 * なおあくまでも「サイズ」を指定してるだけなので、特定の固定領域を保護する仕組みでは無い。 * ウェアレベリングをどう設定するかによるが、エンタープライズクラスのSSDを想定した設定を行ってみる。 * たとえば400GBサイズのSSDの場合、512GB分のセルを乗せた上で、112GB分をウェアレベリングに使用してたりする。 * また領域の一部をSLC(`Single Level Cell`)するといった工夫で寿命を延ばしていたりもする。 * なおHPAによる領域保護は、SLCに変換してくるわけでもないので、効果はあくまで擬似的なものである。 == 検証環境 == * [[https://www.FreeBSD.org/|FreeBSD]] 13.0-CURRENT ※古いバージョンで動きます * [[https://www.links.co.jp/item/liva-z-n4200/|ECS LIVA-Z4]]に[[https://jp.transcend-info.com/Embedded/Products/No-800|TS512GMT400S]]を搭載して動作確認した。 {{{ ada0 at ahcich1 bus 0 scbus1 target 0 lun 0 ada0: ACS-2 ATA SATA 3.x device ada0: Serial Number 002021B4E50963200045 ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) ada0: Command Queueing enabled ada0: 488386MB (1000215216 512 byte sectors) }}} * 本例の製品は容量512GBを謳ってるので、1,073,741,824セクター(512B/セクター)あるはずだが、実際には1,000,215,216セクター(447GB)しか存在しない。 * 差分の73,526,608セクター=約35GB、全体容量の6.8%ほど足りないわけだが、この製品におけるウェアレベリングのための領域を意味している。 * 額面からすると、512GBというより480GBと謳ってくれる方がよっぽど安心できるのではあるが、容量512GBを期待してた人からすると肩透かしをくらった気分ではある。 = 実際にHPAしてみる = 使用可能領域を400GB({{{400GB×1024MB/GB×1024KB/MB×1024B/KB÷512B/セクター}}}=838,860,800セクター)に制限してみる。 下記の通り実行するだけで良い。 {{{#!highlight console numbers=disable # camcontrol hpa ada0 -s 838860800 -y }}} {{{#!wiki caution この時 `-P` (persist)オプションの指定が必要かもしれません。 本製品では `-P` オプションの指定は不要でした。 }}} 下記に実行例を示す。 * 作業前の状態確認 {{{#!highlight console numbers=disable # camcontrol hpa ada0 pass0: ACS-2 ATA SATA 3.x device pass0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) Feature Support Enabled Value Host Protected Area (HPA) yes no 1000215216/1000215216 HPA - Security no # geom disk list ada0 Geom name: ada0 Providers: 1. Name: ada0 Mediasize: 512110190592 (477G) Sectorsize: 512 Mode: r0w0e0 descr: TS512GMTS400S ident: 002021B4E50963200045 rotationrate: 0 fwsectors: 63 fwheads: 16 }}} * HPAの実施 {{{#!highlight console numbers=disable # camcontrol hpa ada0 -s 838860800 -y pass0: ACS-2 ATA SATA 3.x device pass0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) Feature Support Enabled Value Host Protected Area (HPA) yes yes 838860800/1000215216 HPA - Security no }}} * 作業後の状態確認 {{{#!highlight console numbers=disable # camcontrol hpa ada0 pass0: ACS-2 ATA SATA 3.x device pass0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) Feature Support Enabled Value Host Protected Area (HPA) yes yes 838860800/1000215216 HPA - Security no # geom disk list ada0 Geom name: ada0 Providers: 1. Name: ada0 Mediasize: 512110190592 (477G) Sectorsize: 512 Mode: r0w0e0 descr: TS512GMTS400S ident: 002021B4E50963200045 rotationrate: 0 fwsectors: 63 fwheads: 16 }}} 見ての通りHPAが「有効」(`Enabled=yes`)となり、最大容量(1,000,215,216セクター)に対して、使用可能容量(838,860,800セクター)が制限されたことが確認できる。 また、変更後のディスクサイズはOS(GEOMサブシステム)から認識されないことから再起動すること。 再起動時のカーネルメッセージは下記の通りである。 {{{ ada0 at ahcich1 bus 0 scbus1 target 0 lun 0 ada0: ACS-2 ATA SATA 3.x device ada0: Serial Number 002021B4E50963200045 ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) ada0: Command Queueing enabled ada0: 409600MB (838860800 512 byte sectors) }}} = HPAの解放 = 制限するのと違い、最大サイズを指定することで解除される。またこの時「Enabled」が「no」に変わる。 {{{#!highlight console numbers=disable # camcontrol hpa ada0 -s 1000215216 -y pass0: ACS-2 ATA SATA 3.x device pass0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 1024bytes) Feature Support Enabled Value Host Protected Area (HPA) yes no 1000215216/1000215216 HPA - Security no }}} = 付録 = 検証したドライブに対して {{{camcontrol identify}}}、{{{camcontrol security}}} および {{{camcontrol hpa}}} を実行した結果についての記録。 * [[FreeBSD/camcontrol/Transcend M2 SSD 400S|Transcend TS512GMTS400S]] = 参考文献 = * [[https://decomo.info/wiki/freebsd/freebsd_set_hpa_with_camcontrol|FreeBSDのcamcontrolでHPAを設定する]] * [[https://man.freebsd.org/query=camcontrol(8)|camcontrol(8)]]