「アドバンスドフォーマット」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
(同期) |
||
(2人の利用者による、間の33版が非表示) | |||
1行目: | 1行目: | ||
[[Category:ストレージ]] |
[[Category:ストレージ]] |
||
[[en:Advanced Format]] |
[[en:Advanced Format]] |
||
+ | [[es:Advanced Format]] |
||
[[ru:Advanced Format]] |
[[ru:Advanced Format]] |
||
+ | [[tr:Advanced Format]] |
||
− | ==イントロダクション== |
||
+ | [[zh-hans:先进格式化]] |
||
− | [[wikipedia:Advanced Format|Advanced Format]] は伝統的な512バイトのセクタの代わりに4キロバイトのセクタを使うことでオーバーヘッドを減らします。古いフォーマットでのフォーマットの使用効率は 87% でした。Advanced Format ではフォーマットの効率を 96% まで高まり、ディスクの容量が最大で 11% 増えることになります。2014年までに、4k セクタは次世代の HDD の標準になる予定です。 |
||
+ | ハードディスクドライブ (HDD) における最小の物理記憶単位は[[Wikipedia:ja:ディスクセクタ|セクタ]]です。ソリッドステートドライブ (SSD) ではページがこれと等価です。[https://www.oo-software.com/en/docs/whitepaper/whitepaper_ssd.pdf] ストレージデバイスのファームウェアは物理セクタを、ソフトウェアが操作できる論理セクタに抽象化します。論理セクタのサイズは、ディスク上のアドレッシング可能な最小単位のサイズとなります。 |
||
+ | {{Note|ソフトウェアとドキュメントではストレージの種類に依らずに "セクタ" と "ブロック" を同じ意味で使用していることがあります。}} |
||
− | ===さらに詳しい説明=== |
||
− | 4096バイトセクタの背景には各トラックのビット密度を上げるという狙いがあります。データセクタの間には Sync/DAM と ECC (Error Correction Code) 情報が挟まっているので、その間隙の数を減らすのです。512バイトセクタが8つあれば、トラックには8つの隙間が存在することになります。 |
||
+ | ; 物理セクタサイズ: これは、物理ストレージデバイスがアトミックに書き込めるとする最小単位です。HDD の場合、これはプラッタにおけるセクタの実際のサイズです。従来、HDD の物理セクタサイズは 512 バイトでした。つまり、各セクタは 512 バイトのデータを格納できることを意味します。しかし、[[Wikipedia:Advanced Format#History|アドバンスドフォーマット]] HDD の登場により、物理セクタサイズは 4096 バイト (4 KiB) に増え、誤り訂正機能が向上しました。SSD は NAND フラッシュメモリの実際のページサイズ (典型的には 4 KiB から 16 KiB ) を公開せず、報告される物理セクタサイズは論理セクタサイズと同じです。NVMe SSD の場合は、利用可能であれば、Atomic Write Unit Power Fail (AWUPF) パラメータの値が使用されます。 |
||
− | セクタのサイズを4096バイト (8 x 512バイト) にすることで、データセクタのギャップは一つだけになり、複数の Sync/DAM と ECC ブロックを用意するのに必要なオーバーヘッドを省くことができ、同時にビット密度が高まります。 |
||
+ | ; 論理セクタサイズ: 論理セクタサイズ (別名、オペレーティングシステムセクタサイズ) は、オペレーティングシステムとアプリケーションに公開されるセクタサイズを表します。ソフトウェアのレベルでストレージデバイスに読み書きする際に用いられるセクタサイズです。論理セクタサイズは物理セクタサイズと異なる可能性があります。例えば、物理セクタサイズが 4096 バイトのアドバンスドフォーマット HDD は、古いシステムとアプリケーションとの互換性のために、依然として 512 バイトの論理セクタサイズを使用する場合があります。 |
||
+ | 異なる "レイヤー" (つまり、デバイス、スタックブロックデバイス、ファイルシステム) は、同じセクタサイズを使用するべきです。そうしないと、ファームウェアの変換レイヤーからのマッピングプロセス (通常は透過的ですが) で回避可能なオーバーヘッドが発生します。 |
||
− | Linux のパーティショニングツールはデフォルトでは各パーティションをセクタ 63 から開始するため、4K セクタサイズを使用する HDD でトラックの最初から 4K セクタを使うようにアライメントされず、思うような性能が出せません。 |
||
+ | 現在の物理セクタサイズと論理セクタサイズは [[lsblk]] で見られます: |
||
− | ===外部リンク=== |
||
− | *[http://www.anandtech.com/Show/Index/2888?cPage=2&all=False&sort=0&page=1 Western Digital’s Advanced Format: The 4K Sector Transition Begins] |
||
− | *[http://www.wdc.com/wdproducts/library/WhitePapers/ENG/2579-771430.pdf White paper entitled "Advanced Format Technology."] |
||
− | *HDD のアライメントがされていないと読み書き性能が落ちます。詳しくは [http://www.linuxconfig.org/linux-wd-ears-advanced-format こちらの記事] を見てください。 |
||
+ | {{Accuracy|以下のどちらのコマンド ({{ic|lsblk}} と {{ic|cat /sys/class...}}) も NVMe ドライブ (もしかすると全 SSD) の物理セクタサイズを正確に提供せず、代わりに論理セクタサイズを報告してしまいます。}} |
||
− | ==4k セクタを使用している HDD のモデル== |
||
− | 2011年6月現在、"Advanced Format" または 4k セクタをサポートしている HDD の数は以下のように限られています。 |
||
+ | {{hc|$ lsblk -td| |
||
− | 以下のリストに記載されているドライブは全て物理セクタのサイズが4096バイトです。ただし全てのドライブがセクタサイズを正しく OS に報告するわけではありません。(ATA-8 規格の新しいフィールドで) 報告される実際の値を、表の中では報告される物理セクタサイズとして示しています。パーティショニングツールはこの値を使ってアライメントを行うため、間違ってアライメントされる問題が起こらないようにセクタサイズを 4096 にする必要があります。 |
||
+ | NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME |
||
+ | sda 0 4096 0 4096 4096 1 mq-deadline 64 128 0B |
||
+ | nvme1n1 0 4096 0 4096 4096 0 none 1023 128 0B |
||
+ | nvme0n1 0 4096 0 4096 4096 0 none 1023 128 0B |
||
+ | }} |
||
+ | {{ic|PHY-SEC}} は物理セクタサイズを、{{ic|LOG-SEC}} は論理セクタサイズを指します。 |
||
− | 論理セクタサイズはデータの転送に使われるセクタサイズです。この値はディスクの LBA セクタの数だけ倍加されてディスクの容量になります。そのため、論理セクタが4096バイトのディスクでは、論理セクタが512バイトの同じ容量のドライブと比べて最大 LBA が少なくなります。(2009年以前にリリースされた) 旧式のオペレーティングシステムとの互換性は論理セクタが512バイトのドライブの方が良好ですが、発揮できるパフォーマンスは論理セクタが4096バイトのドライブの方が少しだけ上になります (例: NCQ バッファにより多くの読み書きリクエストを収納できる)。 |
||
+ | あるいは、以下の sysfs エントリから特定のドライブのセクタサイズを読み取ることができます: |
||
− | {|class="wikitable" |
||
− | !rowspan=2| メーカー !!rowspan=2| モデル !!rowspan=2| 容量 !!colspan=2| 報告されるセクタサイズ (バイト) |
||
− | |- |
||
− | ! 論理 !! 物理 |
||
− | |- |
||
− | |colspan=5| '''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 || [http://excess.org/article/2010/11/wd-hdd-lying-about-4k-sectors/ 4096] |
||
− | |- |
||
− | | Western Digital || WD20EARS || 2.0 TB || 512 || [http://community.wd.com/t5/Desktop-Mobile-Drives/Physical-Sector-Size-different-between-WD20EARS-00MVWB0-and/td-p/218226 4096] または [http://community.wdc.com/t5/Desktop/4k-sector-drive-reporting-512-byte-sectors-to-OS-why/td-p/205060 512] |
||
− | |- |
||
− | | Western Digital || WD10EURS || 1.0 TB |
||
− | |- |
||
− | | Western Digital || WD8000AARS || 800.0 GB |
||
− | |- |
||
− | | Western Digital || WD6400AARS || 640.0 GB |
||
− | |- |
||
− | |colspan=5| '''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 |
||
− | |} |
||
+ | $ cat /sys/class/block/''drive''/queue/physical_block_size |
||
− | {{Note|これを読んだらぜひ表に HDD を追加してください。}} |
||
+ | $ cat /sys/class/block/''drive''/queue/logical_block_size |
||
+ | セクタサイズは、[[fdisk]]、[[smartctl]]、そして [[hdparm]] の出力からも得られます。 |
||
− | == HDD が 4k セクタを使用しているかどうか判断する方法 == |
||
+ | == セクタサイズを変更する == |
||
− | ハードディスク (例: {{ic|/dev/sd''X''}}) の物理・論理セクタサイズは以下の sysfs エントリで確認することができます: |
||
− | $ cat /sys/class/block/sd''X''/queue/physical_block_size |
||
− | $ cat /sys/class/block/sd''X''/queue/logical_block_size |
||
− | + | {{Warning|ドライブのセクタサイズを変更すると、ドライブ上の全データが不可逆的に削除されます。}} |
|
− | * smartmontools (5.41 から; <tt>smartmontools -a</tt>, 情報セクション) |
||
− | * hdparm (9.12 から; <tt>hdparm -I</tt>, 設定セクション) |
||
+ | 一部の NVMe ドライブと "エンタープライズ" SATA ハードディスクドライブでは、それぞれ標準の NVMe コマンド (NVM Command Set Specification 1.0 及びそれ以降の {{ic|Format NVM}}) か ATA コマンド (ATA Command Set - 4 及びそれ以降の {{ic|SET SECTOR CONFIGURATION EXT}}) を使って、報告されるセクタサイズを変更することができます。ハードディスクドライブの場合、最適なパフォーマンスを得るために物理セクタサイズとマッチするように論理セクタサイズを変更します。一方、NVMe ソリッドステートドライブの場合、論理セクタサイズと物理セクタサイズの両方が変更されます。 |
||
− | USB 接続のディスクでも上記のツールは使えます (USB ブリッジが SAT、別名 SCSI/ATA Translation または ANSI INCITS 431-2007 に対応している場合)。 |
||
+ | 大抵、SATA ソリッドステートドライブはセクタサイズの変更をサポートしていません。例外は、報告される物理セクタサイズを変更できるが、論理セクタサイズは変更できない特定の Intel SATA SSD です。[https://superuser.com/q/982680] 報告される物理セクタサイズを変更するには [[#Intel]] に従ってください。 |
||
− | ==パーティションのアライメント== |
||
+ | ドライブのセクタサイズの変更は、低レベルなフォーマットが必要になる複雑なプロセスです。代替案として、ドライブ上にファイルシステムを作成する際にセクタサイズを手動で指定して最適なパフォーマンスを得ることができます。[[#dm-crypt]] と [[#ファイルシステム]] を見てください。 |
||
− | {{Note|現在アライメントを手動で設定する必要はありません。最新バージョンの libblkid を利用するツールなら Advanced Format を自動的に扱うことができます。}} |
||
+ | === アドバンスドフォーマットハードディスクドライブ === |
||
− | アライメントをサポートするツールのバージョンは以下の通りです: |
||
− | + | [[hdparm]] ユーティリティを使うことで、アドバンスドフォーマットハードディスクドライブのセクタサイズを変更できるかどうか調べることができます: |
|
− | * parted (parted >= 2.1)。 |
||
− | * mdadm (util-linux >= 2.15)。 |
||
− | * lvm2 (util-linux >= 2.15)。 |
||
− | * mkfs.{ext,xfs,gfs2,ocfs2} は全て直接 libblkid に対応しています。 |
||
+ | # hdparm -I /dev/sd''X'' {{!}} grep 'Sector size:' |
||
− | 詳しくは [https://www.tolaris.com/2011/07/21/libblkid-or-why-you-dont-need-to-worry-about-4k-disk-format/ このページ] を参照してください。 |
||
+ | {{Note|USB で接続されたドライブの場合、USB ブリッジが [[Wikipedia:SCSI / ATA Translation|SAT (SCSI/ATA Translation)]] (ANSI INCITS 431-2007) をサポートしている必要があります。}} |
||
− | ===パーティションのアライメントを確認=== |
||
− | {{Note|以下のコマンドは [[Master Boot Record|MBR]] でのみ使えます。[[GPT]] では出来ません。}} |
||
− | # fdisk -lu /dev/sda |
||
− | ... |
||
− | # Device Boot Start End Blocks Id System |
||
− | # /dev/sda1 2048 46876671 23437312 7 HPFS/NTFS |
||
+ | Sector Configuration Log に複数の論理セクタサイズが表示されるアドバンスドフォーマットドライブ では、それらのリストが表示されます: |
||
− | 2048 (fdisk 2.17.2 からのデフォルト) が正しく HDD がアライメントされている証拠です。8 で割れる値なら問題ありません。 |
||
+ | {{bc| |
||
− | ===GPT (推奨)=== |
||
+ | Logical Sector size: 512 bytes [ Supported: 512 4096 ] |
||
− | [[GPT]] パーティションテーブルを使用する場合、gdisk を使ってパーティションを作成するだけでデフォルトでアライメントされます。[[SSD#パーティションアライメント]] を見てください。 |
||
+ | Physical Sector size: 4096 bytes |
||
+ | }} |
||
+ | 複数の変更可能な論理セクタサイズをサポートしていないハードディスクドライブでは、現在のセクタサイズだけが報告されます。例えば、アドバンスドフォーマット 512e ドライブの場合: |
||
− | ==WD Green HDD に関する特記事項== |
||
+ | {{bc| |
||
− | このセクションは Advanced Format テクノロジーには関係がありませんが、ユーザーが知っておくべき情報です。WD20EARS (や同じシリーズの容量が 1.0 や 1.5 TB のドライバー) は8秒ごとに読み込みヘッドを退避させるのですが、HDD の寿命という観点からすると、おぞましい何かとしか言えません。IntelliPark が使われているかどうか確認するには (smartmontools に含まれている) smartctl コマンドを使ってください。最後のカラムが頻繁に変わる場合、このセクションに書かれていることをあなたのドライブに適用するべきです。 |
||
+ | Logical Sector size: 512 bytes |
||
− | # smartctl /dev/sdb -a | grep Load_Cycle |
||
− | + | Physical Sector size: 4096 bytes |
|
+ | }} |
||
+ | これらの種類のドライブで最適なパフォーマンスを得るには、[[#dm-crypt]] セクタサイズまたは[[#ファイルシステム]]のブロックサイズが少なくとも 4096 バイトであり、かつ 4096 バイト境界にアライメントされている必要があります。 |
||
− | === hdparm で無効化 === |
||
− | HDD の寿命を伸ばすために {{ic|/etc/systemd/system/lcc_fix.service}} で hdparm を使ってこの'機能'を無効します: |
||
+ | アドバンスドフォーマット 4Kn ドライブの場合: |
||
− | {{hc|/etc/systemd/system/lcc_fix.service |<nowiki> |
||
− | [Unit] |
||
− | Description=WDIDLE3 |
||
+ | {{bc| |
||
− | [Service] |
||
+ | Logical Sector size: 4096 bytes |
||
− | Type=oneshot |
||
+ | Physical Sector size: 4096 bytes |
||
− | ExecStart=/usr/bin/hdparm -J 300 --please-destroy-my-drive /dev/sdX |
||
+ | }} |
||
− | TimeoutSec=0 |
||
− | StandardInput=tty |
||
− | RemainAfterExit=yes |
||
+ | 4Kn ドライブでは、何も設定せずとも最適な設定になっており、パーティショニングやフォーマットの際に特別な考慮は必要ありません。そのまま使用することができます。 |
||
− | [Install] |
||
− | WantedBy=multi-user.target |
||
− | </nowiki>}} |
||
+ | SATA HDD が複数の論理セクタサイズとオプションの ATA コマンド {{ic|SET SECTOR CONFIGURATION EXT}} をサポートしている場合 (例えば、Seagate ドライブは FastFormat サポートを広告しています)、''hdparm'' を使ってサポートされているセクタサイズから選択することができます。論理セクタサイズを 4096 バイト (つまり、4Kn) に設定するには、以下を実行してください: |
||
− | サービスを起動: |
||
− | # systemctl start lcc_fix.service |
||
+ | # hdparm --set-sector-size 4096 --please-destroy-my-drive /dev/sd''X'' |
||
− | 起動時に自動で実行されるようにサービスを有効化: |
||
− | # systemctl enable lcc_fix.service |
||
+ | その後、''hdparm'' は論理セクタサイズが 4096 バイトであると報告するはずです: |
||
− | なぜ "--please-destroy-my-drive" フラグを指定するのかは hdparm の作者である Mark Lord のメールを見てください: |
||
+ | {{hc|# hdparm -I /dev/sd''X'' {{!}} grep 'Sector size:'| |
||
− | > I have a Western DIgital \"Green\" drive (wd20ears). I noticed you added a -J switch and that |
||
+ | Logical Sector size: 4096 bytes [ Supported: 512 4096 ] |
||
− | > it is said to adjust the idle3 timeout. What frightens me is the output you gave it: |
||
+ | Physical Sector size: 4096 bytes |
||
− | > |
||
+ | }} |
||
− | > 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 |
||
+ | === NVMe ソリッドステートドライブ === |
||
− | === ファームウェアの値を変更して無効化 (永続) === |
||
+ | ほとんどの[[ソリッドステートドライブ]] (SSD) は、論理ブロックアドレスサイズが 512 バイトであると報告します。たとえ、それより大きなサイズ (典型的には 4 KiB、8 KiB、またはそれ以上) を物理的に使用していたとしてもです。 |
||
− | {{Warning|無効化で使用するツールは実験的なので、自己責任で使ってください。}} |
||
+ | [[NVMe]] ドライブのフォーマットされた論理ブロックアドレスサイズ (FLBAS) を確認するには、{{Pkg|nvme-cli}} ユーティリティで ''Identify Namespace'' コマンドを使ってください: |
||
− | {{Note|この方法は永続的です。無効化する必要があるのは一回だけで済みます。}} |
||
+ | |||
+ | {{hc|# nvme id-ns -H /dev/nvme0n1 {{!}} grep "Relative Performance"| |
||
+ | LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes - Relative Performance: 0x2 Good (in use) |
||
+ | LBA Format 1 : Metadata Size: 0 bytes - Data Size: 4096 bytes - Relative Performance: 0x1 Better |
||
+ | }} |
||
+ | |||
+ | * {{ic|Metadata Size}} は、論理ブロックアドレス (LBA) 毎の追加メタデータのバイト数です。これは Linux ではあまり良くサポートされていないため、この値が 0 であるフォーマットを選ぶのが最適です。 |
||
+ | * {{ic|Relative Performance}} はそのフォーマットのパフォーマンスを示します: ''degraded''、''good''、''better''、''best'' のどれかです。 |
||
+ | |||
+ | [[smartctl]] も、サポートされている論理ブロックアドレスサイズを表示できますが、ユーザフレンドリーな説明は提供しません。例: |
||
+ | |||
+ | {{hc|# smartctl -c /dev/nvme0n1| |
||
+ | ... |
||
+ | Supported LBA Sizes (NSID 0x1) |
||
+ | Id Fmt Data Metadt Rel_Perf |
||
+ | 0 + 512 0 2 |
||
+ | 1 - 4096 0 1 |
||
+ | }} |
||
+ | |||
+ | 論理ブロックアドレスサイズを変更するには、{{ic|nvme format}} を使い、{{ic|--lbaf}} パラメータで好ましい値を指定してください: |
||
+ | |||
+ | {{hc|1=# nvme format --lbaf=1 /dev/nvme0n1|2= |
||
+ | You are about to format nvme0n1, namespace 0x1. |
||
+ | WARNING: Format may irrevocably delete this device's data. |
||
+ | You have 10 seconds to press Ctrl-C to cancel this operation. |
||
+ | |||
+ | Use the force [--force] option to suppress this warning. |
||
+ | Sending format operation ... |
||
+ | Success formatting namespace:1 |
||
+ | }} |
||
+ | |||
+ | この処理には数秒しかかからないはずです。 |
||
+ | |||
+ | {{Note|パーティショニングの際は以下の [[#パーティションのアライメント]] に従ってください。さもないと、パフォーマンス上の利点が水の泡になります。}} |
||
+ | |||
+ | {{Accuracy|電源状態や BIOS の設定をいじる前に、ネイティブの {{ic|nvme}} コマンドを使って操作ログを確認したり、{{ic|nvme reset}} ''など''を使ってコントローラをソフトリセットしたりすることをお勧めします。}} |
||
+ | |||
+ | 2020年より前のドライブは、POST の最後に "security freeze" を発行する非標準的なシステムで使用する場合、{{ic|Format NVM}} コマンドをブロックする可能性があります。[https://github.com/linux-nvme/nvme-cli/issues/816][https://forums.lenovo.com/topic/findpost/1300/5043069/5167342] {{ic|nvme format}} が失敗する場合、[[systemd#電源管理|システムをサスペンド]]してみて ([[電源管理/サスペンドとハイバネート#サスペンドの方法を変更する|S0ix ではなく S3 スリープを使用]]してください)、復帰後に {{ic|nvme format}} をもう一度実行してみてください。[https://github.com/linux-nvme/nvme-cli/issues/84][https://community.wd.com/t/sn750-cannot-format-using-the-nvme-command/254374] |
||
+ | |||
+ | === メーカー固有のプログラムを使う === |
||
+ | |||
+ | 上記の汎用ユーティリティでセクタサイズを変更できない場合、ドライブのメーカーのユーティリティを使用すれば変更できる場合があります。 |
||
+ | |||
+ | ==== Intel ==== |
||
+ | |||
+ | {{Out of date|Intel の SSD 事業が SK Hynix に買収されて Solidigm ブランドになって以降、Intel MAS は SSD を管理するために使用できなくなりました (Optane 製品を除く)。Solidigm は、Intel MAS が提供していた機能を持つ {{AUR|solidigm-sst-storage-tool-cli}} を提供しています。[[ソリッドステートドライブ/NVMe#Intel/Solidigm]] を参照してください。}} |
||
+ | |||
+ | Intel の場合、{{ic|1=-set PhysicalSectorSize=4096}} オプションと共に [https://downloadcenter.intel.com/download/29337/Intel-Memory-and-Storage-Tool-CLI-Command-Line-Interface-?product=83425 Intel Memory and Storage (MAS) Tool] ({{AUR|intel-mas-cli-tool}}) を使ってください。 |
||
+ | |||
+ | ==== Seagate ==== |
||
+ | |||
+ | Seagate の場合、{{AUR|openseachest}} を使ってください。 |
||
+ | |||
+ | すべてのドライブをスキャンし、適切なものを探してください。そして、見つけたドライブの情報を表示してください: |
||
+ | |||
+ | # openSeaChest_Basics --scan |
||
+ | # openSeaChest_Basics -d /dev/sd''X'' -i |
||
+ | |||
+ | ドライブの情報が出力されるはずです。シリアル番号を確認してください。 |
||
+ | |||
+ | そのドライブによってサポートされている論理ブロックサイズを確認してください: |
||
+ | |||
+ | # openSeaChest_Format -d /dev/sd''X'' --showSupportedFormats |
||
+ | |||
+ | 4096 が一覧に載っている場合、論理セクタサイズを 4096 バイトに変更できます: |
||
+ | |||
+ | # openSeaChest_Format -d /dev/sd''X'' --setSectorSize=4096 --confirm this-will-erase-data |
||
+ | |||
+ | このコマンドは完了するまで2分かかります。その後、ドライブは 4 KiB ネイティブセクタサイズを使用するようになります。 |
||
+ | |||
+ | == パーティションのアライメント == |
||
+ | |||
+ | パーティションを正しくアライメントすることで、読み込み・変更・書き込みの過剰なサイクルを回避できます。家庭用のコンピュータでは、各パーティションの開始位置とサイズを 1 MiB (1 048 576 バイト) 境界にアライメントするのが一般的です。これは、一般的に使用されているすべてのサイズ (1 MiB、512 KiB、128 KiB、4 KiB、512 B) で割り切ることができるので、一般的なページサイズとブロックサイズのシナリオすべてをカバーします。 |
||
+ | |||
+ | {{Warning|パーティションのアライメントを誤ると、dm-crypt/LUKS で 4096 バイトセクタを使用できなくなります。[https://lore.kernel.org/dm-crypt/fe8cd3b4-6d50-66d3-375c-254e278a6443@gmail.com/] を見てください。}} |
||
+ | |||
+ | * [[fdisk|fdisk、cfdisk、sfdisk]] はアライメントを自動的に管理します。 |
||
+ | * [[GPT fdisk|gdisk と cgdisk]] はアライメントを自動的に管理します。 |
||
+ | ** ''sgdisk'' はデフォルトで、パーティションの開始位置のみをアライメントします。パーティションのサイズや終了位置のアライメントも有効化するには、{{ic|-I}}/{{ic|--align-end}} オプションを使ってください。 |
||
+ | * [[Parted#アライメント|Parted]] はパーティションの開始位置のみをアライメントし、サイズと終了位置はアライメントしません。パーティションを作成するときは、パーティションの終了位置をメビバイトかより大きな IEC 2進接頭辞で指定するようにしてください。 |
||
+ | |||
+ | [https://github.com/crysman/check-partitions-alignment checkpartitionsalignment.sh] は、[[Parted]] と awk を使ってアライメントをチェックする bash スクリプトです。 |
||
+ | |||
+ | == dm-crypt == |
||
+ | |||
+ | [[Cryptsetup]] 2.4.0 では、{{ic|luksFormat}} は自動的に LUKS2 フォーマットに最適な暗号化セクタサイズを検出します [https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v2.4/v2.4.0-ReleaseNotes]。 |
||
+ | |||
+ | しかし、これが機能するには、デバイスが正しいデフォルトセクタサイズを報告する必要があります。[[#セクタサイズを変更する]] を見てください。 |
||
+ | |||
+ | {{ic|cryptsetup luksFormat}} を使用したあとに、LUKS2 ボリュームによって使用されているセクタサイズを確認できます: |
||
+ | |||
+ | # cryptsetup luksDump ''device'' | grep sector |
||
+ | |||
+ | デフォルトのセクタサイズが正しくない場合、4 KiB のセクタサイズをそれ以外のデフォルトのオプションで LUKS2 コンテナを強制的に作成することができます: |
||
+ | |||
+ | # cryptsetup luksFormat --sector-size=4096 ''device'' |
||
+ | |||
+ | このコマンドは、要求されたサイズがデバイスと一致しない場合、エラーでアボートします: |
||
+ | |||
+ | {{bc|# cryptsetup luksFormat --sector-size 4096 ''device'' |
||
+ | (...) |
||
+ | Verify passphrase: |
||
+ | Device size is not aligned to requested sector size. |
||
+ | }} |
||
+ | |||
+ | {{Note|実際のドライブが 4 KiB 物理セクタを使用しているときにこのコマンドが失敗する可能性がある理由については、[https://gitlab.com/cryptsetup/cryptsetup/-/issues/585 cryptsetup issue 585] を見てください。}} |
||
+ | |||
+ | デバイスを間違ったセクタサイズで暗号化してしまった場合、以下のコマンドでそのデバイスを再暗号化できます: |
||
+ | |||
+ | {{Warning|含まれているファイルシステムが、4096 バイトおよびその倍数のブロックサイズを持っていなければなりません。さもないと、ファイルシステムが破壊されます。}} |
||
+ | |||
+ | # cryptsetup reencrypt --sector-size=4096 ''device'' |
||
+ | |||
+ | == ファイルシステム == |
||
+ | |||
+ | 4Kn ディスク (物理セクタサイズが 4096 バイト、論理セクタサイズが 4096 バイト) では、全ての ''mkfs'' ユーティリティは 4096 バイトのブロックサイズを使用します。512e ディスク (物理セクタサイズが 4096、論理セクタサイズが 512 バイト) と 512n ディスク (物理セクタサイズが 512 バイト、論理セクタサイズが 512 バイト) では、''mkfs'' ユーティリティはそれぞれ異なる動作をします。 |
||
+ | |||
+ | {| class="wikitable" |
||
+ | |+ 非 4Kn ディスクにおけるファイルシステムのブロックサイズ (バイト単位) |
||
+ | ! ''mkfs'' ユーティリティ !! 512e ディスク !! 512n ディスク |
||
+ | |- |
||
+ | | ''mkfs.bcachefs'' || {{G|4096}} || {{R|[https://github.com/koverstreet/bcachefs/issues/765 512]}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.btrfs}} || {{G|4096}} || {{G|4096}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.exfat}} || {{R|[https://github.com/exfatprogs/exfatprogs/issues/277 512]}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.ext4}} || {{Y|4096}}<sup>1</sup> || {{Y|4096}}<sup>1</sup> |
||
+ | |- |
||
+ | | {{man|8|mkfs.fat}} || {{R|512}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.f2fs}} || {{R|[https://github.com/jaegeuk/f2fs-tools/issues/29 512]}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.jfs}} || {{G|4096}} || {{G|4096}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.nilfs2}} || {{G|4096}} || {{G|4096}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.ntfs}} || {{R|512}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.reiserfs}} || {{G|4096}} || {{G|4096}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.udf}} || {{R|512}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkfs.xfs}} || {{G|4096}} || {{R|512}} |
||
+ | |- |
||
+ | | {{man|8|mkswap}} || {{G|4096}} || {{G|4096}} |
||
+ | |- |
||
+ | | {{man|8|zpool-create|url=}} || {{R|512}} || {{R|512}} |
||
+ | |} |
||
+ | # {{man|8|mkfs.ext4}} はデフォルトで、512 MiB 未満のファイルシステムに対しては 1024 バイトセクタを、512 MiB 以上のファイルシステムに対しては 4096 バイトのセクタを使用します。 |
||
− | この方法では idle3ctl と呼ばれるユーティリティを使って WD ハードドライブの idle3 タイマーのファームウェアの値を変更します (WD の wdidle3.exe と似ています)。公式のユーティリティと比べて、idle3 タイマーの値を変更する前に DOS のブートディスクを作成する必要がないというメリットがあります。さらに idle3ctl は USB-to-S-ATA ブリッジでも (場合によって) 動作します。{{Pkg|idle3ctl}}{{Broken package link|パッケージが存在しません}} パッケージでインストールすることができます。次を実行して idle3 タイマーの値を取得してください: |
||
+ | ストレージデバイスが正しいセクタサイズを報告しない場合は、物理セクタサイズに応じてパーティションを明示的にフォーマットできます。 |
||
− | # ./idle3ctl -g /dev/your_wd_hdd |
||
+ | 特に、ファームウェアによって管理されている ''シングル磁気記録方式'' (Singled Magnetic Recording: SMR) ドライブは、物理セクタサイズが 4096 バイトの場合に 512 バイトの論理セクタサイズを使用すると、深刻な悪影響を受けます。これらのドライブは、パフォーマンスの異なる書き込み領域が存在し、アイドル時にはリマッピングの再割当てが発生しますが、高負荷なアクティブ書き込み (例: RAID resilvering、バックアップ、小さなファイルを大量に書き込む、rsync など) 時には、ファイルシステムのセクタサイズが異なる場合に書き込み速度が1桁の MB/s まで落ちる可能性があります。これは、高パフォーマンスな書き込み領域が枯渇し、単一の領域上でセクタの変換レイヤに高負荷がかかるからです。 |
||
− | 次のコマンドで IntelliPark 機能を完全に無効化できます: |
||
+ | {{Note|x86_64 システムでは、Linux は 4 KiB より大きいブロックサイズのファイルシステムをマウントすることができません。詳細と現在の進捗状況については [https://kernelnewbies.org/KernelProjects/large-block-size Large block sizes (LBS)] を参照してください。}} |
||
− | # ./idle3ctl -d /dev/your_wd_hdd |
||
− | + | 以下は、4096 バイトのセクタを明示的に設定する例です: |
|
+ | * [[Bcachefs]]: {{bc|1=# bcachefs format --block_size=4096 /dev/''device0'' /dev/''deviceN'' --replicas=''n''}} |
||
− | # ./idle3ctl -s 100 /dev/your_wd_hd |
||
+ | * exFAT: {{bc|# mkfs.exfat -s 4096 /dev/''device''}} |
||
+ | * [[ext4]]: {{bc|# mkfs.ext4 -b 4096 /dev/''device''}} |
||
+ | * [[FAT]]: {{bc|# mkfs.fat -S 4096 /dev/''device''}} |
||
+ | * [[NTFS-3G]]: {{bc|# mkfs.ntfs -Q -s 4096 /dev/''device''}} |
||
+ | * UDF: {{bc|# mkfs.udf -b 4096 /dev/''device''}} |
||
+ | * [[XFS]]: {{bc|1=# mkfs.xfs -s size=4096 /dev/''device''}} |
||
+ | * [[ZFS#Advanced Format ディスク|ZFS]]: {{bc|1=# zpool create -o ashift=12 ''poolname'' raidz ''device0'' … ''deviceN''}} |
||
+ | == 参照 == |
||
− | ''0''-''128'' は0.1秒単位で ''129-255'' は30秒単位です。変更を適用するには、ドライブの電源の状態を一度オフにしてから再度オンにする必要があります (内部ドライブの状態を変えることが必要です。再起動では不十分)。 |
||
+ | * [https://www.anandtech.com/Show/Index/2888 Western Digital’s Advanced Format: The 4K Sector Transition Begins] |
||
− | WD ハードドライブが認識されない場合、''--force'' オプションを使ってください。他のオプションは次を参照: |
||
+ | * [https://www.wdc.com/wdproducts/library/WhitePapers/ENG/2579-771430.pdf White paper entitled "Advanced Format Technology."] |
||
+ | * HDD のアライメントを間違えると、読み込み/書き込みのパフォーマンスが劣化します。具体的な例は [https://linuxconfig.org/linux-wd-ears-advanced-format] を見てください。 |
||
+ | {{TranslationStatus|Advanced Format|2024-11-04|819836}} |
||
− | $ ./idle3ctl -h |
2024年11月4日 (月) 18:12時点における最新版
ハードディスクドライブ (HDD) における最小の物理記憶単位はセクタです。ソリッドステートドライブ (SSD) ではページがこれと等価です。[1] ストレージデバイスのファームウェアは物理セクタを、ソフトウェアが操作できる論理セクタに抽象化します。論理セクタのサイズは、ディスク上のアドレッシング可能な最小単位のサイズとなります。
- 物理セクタサイズ
- これは、物理ストレージデバイスがアトミックに書き込めるとする最小単位です。HDD の場合、これはプラッタにおけるセクタの実際のサイズです。従来、HDD の物理セクタサイズは 512 バイトでした。つまり、各セクタは 512 バイトのデータを格納できることを意味します。しかし、アドバンスドフォーマット HDD の登場により、物理セクタサイズは 4096 バイト (4 KiB) に増え、誤り訂正機能が向上しました。SSD は NAND フラッシュメモリの実際のページサイズ (典型的には 4 KiB から 16 KiB ) を公開せず、報告される物理セクタサイズは論理セクタサイズと同じです。NVMe SSD の場合は、利用可能であれば、Atomic Write Unit Power Fail (AWUPF) パラメータの値が使用されます。
- 論理セクタサイズ
- 論理セクタサイズ (別名、オペレーティングシステムセクタサイズ) は、オペレーティングシステムとアプリケーションに公開されるセクタサイズを表します。ソフトウェアのレベルでストレージデバイスに読み書きする際に用いられるセクタサイズです。論理セクタサイズは物理セクタサイズと異なる可能性があります。例えば、物理セクタサイズが 4096 バイトのアドバンスドフォーマット HDD は、古いシステムとアプリケーションとの互換性のために、依然として 512 バイトの論理セクタサイズを使用する場合があります。
異なる "レイヤー" (つまり、デバイス、スタックブロックデバイス、ファイルシステム) は、同じセクタサイズを使用するべきです。そうしないと、ファームウェアの変換レイヤーからのマッピングプロセス (通常は透過的ですが) で回避可能なオーバーヘッドが発生します。
現在の物理セクタサイズと論理セクタサイズは lsblk で見られます:
$ lsblk -td
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME sda 0 4096 0 4096 4096 1 mq-deadline 64 128 0B nvme1n1 0 4096 0 4096 4096 0 none 1023 128 0B nvme0n1 0 4096 0 4096 4096 0 none 1023 128 0B
PHY-SEC
は物理セクタサイズを、LOG-SEC
は論理セクタサイズを指します。
あるいは、以下の sysfs エントリから特定のドライブのセクタサイズを読み取ることができます:
$ cat /sys/class/block/drive/queue/physical_block_size $ cat /sys/class/block/drive/queue/logical_block_size
セクタサイズは、fdisk、smartctl、そして hdparm の出力からも得られます。
目次
セクタサイズを変更する
一部の NVMe ドライブと "エンタープライズ" SATA ハードディスクドライブでは、それぞれ標準の NVMe コマンド (NVM Command Set Specification 1.0 及びそれ以降の Format NVM
) か ATA コマンド (ATA Command Set - 4 及びそれ以降の SET SECTOR CONFIGURATION EXT
) を使って、報告されるセクタサイズを変更することができます。ハードディスクドライブの場合、最適なパフォーマンスを得るために物理セクタサイズとマッチするように論理セクタサイズを変更します。一方、NVMe ソリッドステートドライブの場合、論理セクタサイズと物理セクタサイズの両方が変更されます。
大抵、SATA ソリッドステートドライブはセクタサイズの変更をサポートしていません。例外は、報告される物理セクタサイズを変更できるが、論理セクタサイズは変更できない特定の Intel SATA SSD です。[2] 報告される物理セクタサイズを変更するには #Intel に従ってください。
ドライブのセクタサイズの変更は、低レベルなフォーマットが必要になる複雑なプロセスです。代替案として、ドライブ上にファイルシステムを作成する際にセクタサイズを手動で指定して最適なパフォーマンスを得ることができます。#dm-crypt と #ファイルシステム を見てください。
アドバンスドフォーマットハードディスクドライブ
hdparm ユーティリティを使うことで、アドバンスドフォーマットハードディスクドライブのセクタサイズを変更できるかどうか調べることができます:
# hdparm -I /dev/sdX | grep 'Sector size:'
Sector Configuration Log に複数の論理セクタサイズが表示されるアドバンスドフォーマットドライブ では、それらのリストが表示されます:
Logical Sector size: 512 bytes [ Supported: 512 4096 ] Physical Sector size: 4096 bytes
複数の変更可能な論理セクタサイズをサポートしていないハードディスクドライブでは、現在のセクタサイズだけが報告されます。例えば、アドバンスドフォーマット 512e ドライブの場合:
Logical Sector size: 512 bytes Physical Sector size: 4096 bytes
これらの種類のドライブで最適なパフォーマンスを得るには、#dm-crypt セクタサイズまたは#ファイルシステムのブロックサイズが少なくとも 4096 バイトであり、かつ 4096 バイト境界にアライメントされている必要があります。
アドバンスドフォーマット 4Kn ドライブの場合:
Logical Sector size: 4096 bytes Physical Sector size: 4096 bytes
4Kn ドライブでは、何も設定せずとも最適な設定になっており、パーティショニングやフォーマットの際に特別な考慮は必要ありません。そのまま使用することができます。
SATA HDD が複数の論理セクタサイズとオプションの ATA コマンド SET SECTOR CONFIGURATION EXT
をサポートしている場合 (例えば、Seagate ドライブは FastFormat サポートを広告しています)、hdparm を使ってサポートされているセクタサイズから選択することができます。論理セクタサイズを 4096 バイト (つまり、4Kn) に設定するには、以下を実行してください:
# hdparm --set-sector-size 4096 --please-destroy-my-drive /dev/sdX
その後、hdparm は論理セクタサイズが 4096 バイトであると報告するはずです:
# hdparm -I /dev/sdX | grep 'Sector size:'
Logical Sector size: 4096 bytes [ Supported: 512 4096 ] Physical Sector size: 4096 bytes
NVMe ソリッドステートドライブ
ほとんどのソリッドステートドライブ (SSD) は、論理ブロックアドレスサイズが 512 バイトであると報告します。たとえ、それより大きなサイズ (典型的には 4 KiB、8 KiB、またはそれ以上) を物理的に使用していたとしてもです。
NVMe ドライブのフォーマットされた論理ブロックアドレスサイズ (FLBAS) を確認するには、nvme-cli ユーティリティで Identify Namespace コマンドを使ってください:
# nvme id-ns -H /dev/nvme0n1 | grep "Relative Performance"
LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes - Relative Performance: 0x2 Good (in use) LBA Format 1 : Metadata Size: 0 bytes - Data Size: 4096 bytes - Relative Performance: 0x1 Better
Metadata Size
は、論理ブロックアドレス (LBA) 毎の追加メタデータのバイト数です。これは Linux ではあまり良くサポートされていないため、この値が 0 であるフォーマットを選ぶのが最適です。Relative Performance
はそのフォーマットのパフォーマンスを示します: degraded、good、better、best のどれかです。
smartctl も、サポートされている論理ブロックアドレスサイズを表示できますが、ユーザフレンドリーな説明は提供しません。例:
# smartctl -c /dev/nvme0n1
... Supported LBA Sizes (NSID 0x1) Id Fmt Data Metadt Rel_Perf 0 + 512 0 2 1 - 4096 0 1
論理ブロックアドレスサイズを変更するには、nvme format
を使い、--lbaf
パラメータで好ましい値を指定してください:
# nvme format --lbaf=1 /dev/nvme0n1
You are about to format nvme0n1, namespace 0x1. WARNING: Format may irrevocably delete this device's data. You have 10 seconds to press Ctrl-C to cancel this operation. Use the force [--force] option to suppress this warning. Sending format operation ... Success formatting namespace:1
この処理には数秒しかかからないはずです。
2020年より前のドライブは、POST の最後に "security freeze" を発行する非標準的なシステムで使用する場合、Format NVM
コマンドをブロックする可能性があります。[3][4] nvme format
が失敗する場合、システムをサスペンドしてみて (S0ix ではなく S3 スリープを使用してください)、復帰後に nvme format
をもう一度実行してみてください。[5][6]
メーカー固有のプログラムを使う
上記の汎用ユーティリティでセクタサイズを変更できない場合、ドライブのメーカーのユーティリティを使用すれば変更できる場合があります。
Intel
Intel の場合、-set PhysicalSectorSize=4096
オプションと共に Intel Memory and Storage (MAS) Tool (intel-mas-cli-toolAUR) を使ってください。
Seagate
Seagate の場合、openseachestAUR を使ってください。
すべてのドライブをスキャンし、適切なものを探してください。そして、見つけたドライブの情報を表示してください:
# openSeaChest_Basics --scan # openSeaChest_Basics -d /dev/sdX -i
ドライブの情報が出力されるはずです。シリアル番号を確認してください。
そのドライブによってサポートされている論理ブロックサイズを確認してください:
# openSeaChest_Format -d /dev/sdX --showSupportedFormats
4096 が一覧に載っている場合、論理セクタサイズを 4096 バイトに変更できます:
# openSeaChest_Format -d /dev/sdX --setSectorSize=4096 --confirm this-will-erase-data
このコマンドは完了するまで2分かかります。その後、ドライブは 4 KiB ネイティブセクタサイズを使用するようになります。
パーティションのアライメント
パーティションを正しくアライメントすることで、読み込み・変更・書き込みの過剰なサイクルを回避できます。家庭用のコンピュータでは、各パーティションの開始位置とサイズを 1 MiB (1 048 576 バイト) 境界にアライメントするのが一般的です。これは、一般的に使用されているすべてのサイズ (1 MiB、512 KiB、128 KiB、4 KiB、512 B) で割り切ることができるので、一般的なページサイズとブロックサイズのシナリオすべてをカバーします。
- fdisk、cfdisk、sfdisk はアライメントを自動的に管理します。
- gdisk と cgdisk はアライメントを自動的に管理します。
- sgdisk はデフォルトで、パーティションの開始位置のみをアライメントします。パーティションのサイズや終了位置のアライメントも有効化するには、
-I
/--align-end
オプションを使ってください。
- sgdisk はデフォルトで、パーティションの開始位置のみをアライメントします。パーティションのサイズや終了位置のアライメントも有効化するには、
- Parted はパーティションの開始位置のみをアライメントし、サイズと終了位置はアライメントしません。パーティションを作成するときは、パーティションの終了位置をメビバイトかより大きな IEC 2進接頭辞で指定するようにしてください。
checkpartitionsalignment.sh は、Parted と awk を使ってアライメントをチェックする bash スクリプトです。
dm-crypt
Cryptsetup 2.4.0 では、luksFormat
は自動的に LUKS2 フォーマットに最適な暗号化セクタサイズを検出します [8]。
しかし、これが機能するには、デバイスが正しいデフォルトセクタサイズを報告する必要があります。#セクタサイズを変更する を見てください。
cryptsetup luksFormat
を使用したあとに、LUKS2 ボリュームによって使用されているセクタサイズを確認できます:
# cryptsetup luksDump device | grep sector
デフォルトのセクタサイズが正しくない場合、4 KiB のセクタサイズをそれ以外のデフォルトのオプションで LUKS2 コンテナを強制的に作成することができます:
# cryptsetup luksFormat --sector-size=4096 device
このコマンドは、要求されたサイズがデバイスと一致しない場合、エラーでアボートします:
# cryptsetup luksFormat --sector-size 4096 device (...) Verify passphrase: Device size is not aligned to requested sector size.
デバイスを間違ったセクタサイズで暗号化してしまった場合、以下のコマンドでそのデバイスを再暗号化できます:
# cryptsetup reencrypt --sector-size=4096 device
ファイルシステム
4Kn ディスク (物理セクタサイズが 4096 バイト、論理セクタサイズが 4096 バイト) では、全ての mkfs ユーティリティは 4096 バイトのブロックサイズを使用します。512e ディスク (物理セクタサイズが 4096、論理セクタサイズが 512 バイト) と 512n ディスク (物理セクタサイズが 512 バイト、論理セクタサイズが 512 バイト) では、mkfs ユーティリティはそれぞれ異なる動作をします。
mkfs ユーティリティ | 512e ディスク | 512n ディスク |
---|---|---|
mkfs.bcachefs | 4096 | 512 |
mkfs.btrfs(8) | 4096 | 4096 |
mkfs.exfat(8) | 512 | 512 |
mkfs.ext4(8) | 40961 | 40961 |
mkfs.fat(8) | 512 | 512 |
mkfs.f2fs(8) | 512 | 512 |
mkfs.jfs(8) | 4096 | 4096 |
mkfs.nilfs2(8) | 4096 | 4096 |
mkfs.ntfs(8) | 512 | 512 |
mkfs.reiserfs(8) | 4096 | 4096 |
mkfs.udf(8) | 512 | 512 |
mkfs.xfs(8) | 4096 | 512 |
mkswap(8) | 4096 | 4096 |
zpool-create(8) | 512 | 512 |
- mkfs.ext4(8) はデフォルトで、512 MiB 未満のファイルシステムに対しては 1024 バイトセクタを、512 MiB 以上のファイルシステムに対しては 4096 バイトのセクタを使用します。
ストレージデバイスが正しいセクタサイズを報告しない場合は、物理セクタサイズに応じてパーティションを明示的にフォーマットできます。
特に、ファームウェアによって管理されている シングル磁気記録方式 (Singled Magnetic Recording: SMR) ドライブは、物理セクタサイズが 4096 バイトの場合に 512 バイトの論理セクタサイズを使用すると、深刻な悪影響を受けます。これらのドライブは、パフォーマンスの異なる書き込み領域が存在し、アイドル時にはリマッピングの再割当てが発生しますが、高負荷なアクティブ書き込み (例: RAID resilvering、バックアップ、小さなファイルを大量に書き込む、rsync など) 時には、ファイルシステムのセクタサイズが異なる場合に書き込み速度が1桁の MB/s まで落ちる可能性があります。これは、高パフォーマンスな書き込み領域が枯渇し、単一の領域上でセクタの変換レイヤに高負荷がかかるからです。
以下は、4096 バイトのセクタを明示的に設定する例です:
- Bcachefs:
# bcachefs format --block_size=4096 /dev/device0 /dev/deviceN --replicas=n
- exFAT:
# mkfs.exfat -s 4096 /dev/device
- ext4:
# mkfs.ext4 -b 4096 /dev/device
- FAT:
# mkfs.fat -S 4096 /dev/device
- NTFS-3G:
# mkfs.ntfs -Q -s 4096 /dev/device
- UDF:
# mkfs.udf -b 4096 /dev/device
- XFS:
# mkfs.xfs -s size=4096 /dev/device
- ZFS:
# zpool create -o ashift=12 poolname raidz device0 … deviceN
参照
- Western Digital’s Advanced Format: The 4K Sector Transition Begins
- White paper entitled "Advanced Format Technology."
- HDD のアライメントを間違えると、読み込み/書き込みのパフォーマンスが劣化します。具体的な例は [9] を見てください。