アドバンスドフォーマット
目次
イントロダクション
Advanced Format は伝統的な512バイトのセクタの代わりに4キロバイトのセクタを使うことでオーバーヘッドを減らします。古いフォーマットでのフォーマットの使用効率は 87% でした。Advanced Format ではフォーマットの効率を 96% まで高まり、ディスクの容量が最大で 11% 増えることになります。2014年までに、4k セクタは次世代の HDD の標準になる予定です。
さらに詳しい説明
4096バイトセクタの背景には各トラックのビット密度を上げるという狙いがあります。データセクタの間には Sync/DAM と ECC (Error Correction Code) 情報が挟まっているので、その間隙の数を減らすのです。512バイトセクタが8つあれば、トラックには8つの隙間が存在することになります。
セクタのサイズを4096バイト (8 x 512バイト) にすることで、データセクタのギャップは一つだけになり、複数の Sync/DAM と ECC ブロックを用意するのに必要なオーバーヘッドを省くことができ、同時にビット密度が高まります。
Linux のパーティショニングツールはデフォルトでは各パーティションをセクタ 63 から開始するため、4K セクタサイズを使用する HDD でトラックの最初から 4K セクタを使うようにアライメントされず、思うような性能が出せません。
外部リンク
- Western Digital’s Advanced Format: The 4K Sector Transition Begins
- White paper entitled "Advanced Format Technology."
- HDD のアライメントがされていないと読み書き性能が落ちます。詳しくは こちらの記事 を見てください。
4k セクタを使用している HDD のモデル
2011年6月現在、"Advanced Format" または 4k セクタをサポートしている HDD の数は以下のように限られています。
以下のリストに記載されているドライブは全て物理セクタのサイズが4096バイトです。ただし全てのドライブがセクタサイズを正しく OS に報告するわけではありません。(ATA-8 規格の新しいフィールドで) 報告される実際の値を、表の中では報告される物理セクタサイズとして示しています。パーティショニングツールはこの値を使ってアライメントを行うため、間違ってアライメントされる問題が起こらないようにセクタサイズを 4096 にする必要があります。
論理セクタサイズはデータの転送に使われるセクタサイズです。この値はディスクの LBA セクタの数だけ倍加されてディスクの容量になります。そのため、論理セクタが4096バイトのディスクでは、論理セクタが512バイトの同じ容量のドライブと比べて最大 LBA が少なくなります。(2009年以前にリリースされた) 旧式のオペレーティングシステムとの互換性は論理セクタが512バイトのドライブの方が良好ですが、発揮できるパフォーマンスは論理セクタが4096バイトのドライブの方が少しだけ上になります (例: NCQ バッファにより多くの読み書きリクエストを収納できる)。
メーカー | モデル | 容量 | 報告されるセクタサイズ (バイト) | |
---|---|---|---|---|
論理 | 物理 | |||
3.5" | ||||
Samsung | HD204UI | 2.0 TB | 512 | 512 |
Seagate | ST3500413AS | 500.0 GB | 512 | 512 |
Seagate | ST500DM002 | 500.0 GB | 512 | 4096 |
Seagate | ST1000DL002 | 1.0 TB | 512 | 4096 |
Seagate | ST1000DM003 | 1.0 TB | 512 | 4096 |
Seagate | ST2000DL003 | 2.0 TB | 512 | 512 |
Seagate | ST2000DM001 | 2.0 TB | 512 | 4096 |
Seagate | ST3000DM001 | 3.0 TB | 512 | 4096 |
Seagate | ST4000VN000 | 4.0 TB | 512 | 4096 |
Western Digital | WD3000F9YZ | 2.0 TB | 512 | 4096 |
Western Digital | WD30EZRX | 3.0 TB | 512 | 4096 |
Western Digital | WD20EZRX | 2.0 TB | 512 | 4096 |
Western Digital | WD30EZRSDTL | 3.0 TB | ||
Western Digital | WD25EZRSDTL | 2.5 TB | ||
Western Digital | WD20EARX | 2.0 TB | 512 | 4096 |
Western Digital | WD20EFRX | 2.0 TB | 512 | 4096 |
Western Digital | WD30EFRX | 3.0 TB | 512 | 4096 |
Western Digital | WD40EFRX | 4.0 TB | 512 | 4096 |
Western Digital | WD60EFRX | 6.0 TB | 512 | 4096 |
Western Digital | WD10EARS | 1.0 TB | ||
Western Digital | WD15EARS | 1.5 TB | 512 | 4096 |
Western Digital | WD20EARS | 2.0 TB | 512 | 4096 または 512 |
Western Digital | WD10EURS | 1.0 TB | ||
Western Digital | WD8000AARS | 800.0 GB | ||
Western Digital | WD6400AARS | 640.0 GB | ||
2.5" | ||||
Samsung | ST1000LM024 | 1.0 TB | 512 | 4096 |
Samsung | ST2000LM003 | 2.0 TB | 512 | 4096 |
Seagate | ST320LT007 | 320 GB | 512 | 4096 |
Seagate | ST9750420AS | 750 GB | 512 | 4096 |
Seagate | ST1000LM014 | 1.0 TB | 512 | 4096 |
Western Digital | WD10JPVT | 1.0 TB | 512 | 4096 |
Western Digital | WD10TPVT | 1.0 TB | ||
Western Digital | WD7500BPVT | 750.0 GB | ||
Western Digital | WD7500KPVT | 750.0 GB | ||
Western Digital | WD6400BPVT | 640.0 GB | ||
Western Digital | WD5000BPVT | 500.0 GB | ||
Western Digital | WD3200BPVT | 320.0 GB | ||
Western Digital | WD2500BPVT | 250.0 GB | 512 | 4096 |
Western Digital | WD1600BPVT | 160.0 GB | ||
Western Digital | WD7500BPKX | 750.0 GB | 512 | 4096 |
TOSHIBA | MQ01ABD100 | 1.0 TB | 512 | 4096 |
TOSHIBA | MQ01ABC150 | 1.5 TB | 512 | 4096 |
HDD が 4k セクタを使用しているかどうか判断する方法
ハードディスク (例: /dev/sdX
) の物理・論理セクタサイズは以下の sysfs エントリで確認することができます:
$ cat /sys/class/block/sdX/queue/physical_block_size $ cat /sys/class/block/sdX/queue/logical_block_size
以下のツールは (ドライブが正しい値を報告しているのを前提として) ドライブの物理セクタを報告します:
- smartmontools (5.41 から; smartmontools -a, 情報セクション)
- hdparm (9.12 から; hdparm -I, 設定セクション)
USB 接続のディスクでも上記のツールは使えます (USB ブリッジが SAT、別名 SCSI/ATA Translation または ANSI INCITS 431-2007 に対応している場合)。
パーティションのアライメント
アライメントをサポートするツールのバージョンは以下の通りです:
- fdisk (util-linux >= 2.15)。‘-c -u’ を使って起動することで DOS との互換性を無効化してシリンダーの代わりにセクタを使うことができます。
- parted (parted >= 2.1)。
- mdadm (util-linux >= 2.15)。
- lvm2 (util-linux >= 2.15)。
- mkfs.{ext,xfs,gfs2,ocfs2} は全て直接 libblkid に対応しています。
詳しくは このページ を参照してください。
パーティションのアライメントを確認
# fdisk -lu /dev/sda ... # Device Boot Start End Blocks Id System # /dev/sda1 2048 46876671 23437312 7 HPFS/NTFS
2048 (fdisk 2.17.2 からのデフォルト) が正しく HDD がアライメントされている証拠です。8 で割れる値なら問題ありません。
GPT (推奨)
GPT パーティションテーブルを使用する場合、gdisk を使ってパーティションを作成するだけでデフォルトでアライメントされます。SSD#パーティションアライメント を見てください。
WD Green HDD に関する特記事項
このセクションは Advanced Format テクノロジーには関係がありませんが、ユーザーが知っておくべき情報です。WD20EARS (や同じシリーズの容量が 1.0 や 1.5 TB のドライバー) は8秒ごとに読み込みヘッドを退避させるのですが、HDD の寿命という観点からすると、おぞましい何かとしか言えません。IntelliPark が使われているかどうか確認するには (smartmontools に含まれている) smartctl コマンドを使ってください。最後のカラムが頻繁に変わる場合、このセクションに書かれていることをあなたのドライブに適用するべきです。
# smartctl /dev/sdb -a | grep Load_Cycle 193 Load_Cycle_Count 0x0032 001 001 000 Old_age Always - 597115
hdparm で無効化
HDD の寿命を伸ばすために /etc/systemd/system/lcc_fix.service
で hdparm を使ってこの'機能'を無効します:
/etc/systemd/system/lcc_fix.service
[Unit] Description=WDIDLE3 [Service] Type=oneshot ExecStart=/usr/bin/hdparm -J 300 --please-destroy-my-drive /dev/sdX TimeoutSec=0 StandardInput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target
サービスを起動:
# systemctl start lcc_fix.service
起動時に自動で実行されるようにサービスを有効化:
# systemctl enable lcc_fix.service
なぜ "--please-destroy-my-drive" フラグを指定するのかは hdparm の作者である Mark Lord のメールを見てください:
> I have a Western DIgital \"Green\" drive (wd20ears). I noticed you added a -J switch and that > it is said to adjust the idle3 timeout. What frightens me is the output you gave it: > > How safe or not is this to use? I use it on my own drives. It works for me. If you can run the WDIDLE3.EXE MS-Dos program, then use it instead -- it was written by WD, and only they know how things really work there. If you cannot use the WDIDLE3.EXE, then you could consider "hdparm -J". It works for me, but it may or may not void some kind of warranty. Cheers -- Mark Lord Real-Time Remedies Inc. mlord@pobox.com
ファームウェアの値を変更して無効化 (永続)
この方法では idle3ctl と呼ばれるユーティリティを使って WD ハードドライブの idle3 タイマーのファームウェアの値を変更します (WD の wdidle3.exe と似ています)。公式のユーティリティと比べて、idle3 タイマーの値を変更する前に DOS のブートディスクを作成する必要がないというメリットがあります。さらに idle3ctl は USB-to-S-ATA ブリッジでも (場合によって) 動作します。idle3ctl をダウンロードして、展開して、コンパイルしてください。新しくコンパイルしたバイナリがあるフォルダから、次を実行して idle3 タイマーの値を取得してください:
# ./idle3ctl -g /dev/your_wd_hdd
次のコマンドで IntelliPark 機能を完全に無効化できます:
# ./idle3ctl -d /dev/your_wd_hdd
もしくは別の値 (0-255) に設定するには次を実行 (例: 10秒):
# ./idle3ctl -s 100 /dev/your_wd_hd
0-128 は0.1秒単位で 129-255 は30秒単位です。変更を適用するには、ドライブの電源の状態を一度オフにしてから再度オンにする必要があります (内部ドライブの状態を変えることが必要です。再起動では不十分)。
WD ハードドライブが認識されない場合、--force オプションを使ってください。他のオプションは次を参照:
$ ./idle3ctl -h