Advanced Format

提供: ArchWiki
2017年10月7日 (土) 22:43時点におけるKusakata.bot (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

イントロダクション

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 セクタを使うようにアライメントされず、思うような性能が出せません。

外部リンク

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 ST1000DM010 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 ST4000DM000 4.0 TB 512 4096
Seagate ST4000DM005 4.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
Seagate ST4000LM016 4.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 を追加してください。

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 に対応している場合)。

パーティションのアライメント

ノート: 現在アライメントを手動で設定する必要はありません。最新バージョンの libblkid を利用するツールなら Advanced Format を自動的に扱うことができます。

アライメントをサポートするツールのバージョンは以下の通りです:

  • 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 に対応しています。

詳しくは このページ を参照してください。

パーティションのアライメントを確認

ノート: 以下のコマンドは MBR でのみ使えます。GPT では出来ません。
# 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