「アドバンスドフォーマット」の版間の差分
(→ファイルシステム: 追加) |
(同期) |
||
(2人の利用者による、間の26版が非表示) | |||
3行目: | 3行目: | ||
[[es:Advanced Format]] |
[[es:Advanced Format]] |
||
[[ru:Advanced Format]] |
[[ru:Advanced Format]] |
||
+ | [[tr:Advanced Format]] |
||
− | すべてのストレージデバイスには、使うことのできる最小の記憶単位が存在します。この利用可能な最小単位は一般に[[Wikipedia:ja:ディスクセクタ|セクタ]]と呼ばれており、従来のストレージデバイスの回転部品を最小に分割したものでした (ソリッドステートドライブはメモリセルを使用し、最小単位はページです)。[https://www.oo-software.com/en/docs/whitepaper/whitepaper_ssd.pdf] を参照してください。 |
||
+ | [[zh-hans:先进格式化]] |
||
+ | ハードディスクドライブ (HDD) における最小の物理記憶単位は[[Wikipedia:ja:ディスクセクタ|セクタ]]です。ソリッドステートドライブ (SSD) ではページがこれと等価です。[https://www.oo-software.com/en/docs/whitepaper/whitepaper_ssd.pdf] ストレージデバイスのファームウェアは物理セクタを、ソフトウェアが操作できる論理セクタに抽象化します。論理セクタのサイズは、ディスク上のアドレッシング可能な最小単位のサイズとなります。 |
||
+ | {{Note|ソフトウェアとドキュメントではストレージの種類に依らずに "セクタ" と "ブロック" を同じ意味で使用していることがあります。}} |
||
− | 異なるストレージデバイスは、異なるセクタサイズを使用します。[[Wikipedia:Advanced Format#History|2011 年以降]]、最近のハードディスクドライブは通常 (512 バイトではなく) 4 KiB セクタを使用します。ソリッドステートドライブは、複数のフォーマットをサポートしていることがあります。 |
||
+ | ; 物理セクタサイズ: これは、物理ストレージデバイスがアトミックに書き込めるとする最小単位です。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 バイトのアドバンスドフォーマット HDD は、古いシステムとアプリケーションとの互換性のために、依然として 512 バイトの論理セクタサイズを使用する場合があります。 |
||
+ | 異なる "レイヤー" (つまり、デバイス、スタックブロックデバイス、ファイルシステム) は、同じセクタサイズを使用するべきです。そうしないと、ファームウェアの変換レイヤーからのマッピングプロセス (通常は透過的ですが) で回避可能なオーバーヘッドが発生します。 |
||
− | ==4k セクタを使用している HDD のモデル== |
||
− | 2011年6月現在、"Advanced Format" または 4k セクタをサポートしている HDD の数は以下のように限られています。 |
||
+ | 現在の物理セクタサイズと論理セクタサイズは [[lsblk]] で見られます: |
||
− | 以下のリストに記載されているドライブは全て物理セクタのサイズが4096バイトです。ただし全てのドライブがセクタサイズを正しく OS に報告するわけではありません。(ATA-8 規格の新しいフィールドで) 報告される実際の値を、表の中では報告される物理セクタサイズとして示しています。パーティショニングツールはこの値を使ってアライメントを行うため、間違ってアライメントされる問題が起こらないようにセクタサイズを 4096 にする必要があります。 |
||
+ | {{Accuracy|以下のどちらのコマンド ({{ic|lsblk}} と {{ic|cat /sys/class...}}) も NVMe ドライブ (もしかすると全 SSD) の物理セクタサイズを正確に提供せず、代わりに論理セクタサイズを報告してしまいます。}} |
||
− | 論理セクタサイズはデータの転送に使われるセクタサイズです。この値はディスクの LBA セクタの数だけ倍加されてディスクの容量になります。そのため、論理セクタが4096バイトのディスクでは、論理セクタが512バイトの同じ容量のドライブと比べて最大 LBA が少なくなります。(2009年以前にリリースされた) 旧式のオペレーティングシステムとの互換性は論理セクタが512バイトのドライブの方が良好ですが、発揮できるパフォーマンスは論理セクタが4096バイトのドライブの方が少しだけ上になります (例: NCQ バッファにより多くの読み書きリクエストを収納できる)。 |
||
+ | {{hc|$ lsblk -td| |
||
− | {|class="wikitable" |
||
+ | NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME |
||
− | !rowspan=2| メーカー !!rowspan=2| モデル !!rowspan=2| 容量 !!colspan=2| 報告されるセクタサイズ (バイト) |
||
+ | 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 |
||
− | |- |
||
+ | }} |
||
− | |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 |
||
− | |} |
||
+ | {{ic|PHY-SEC}} は物理セクタサイズを、{{ic|LOG-SEC}} は論理セクタサイズを指します。 |
||
− | {{Note|これを読んだらぜひ表に HDD を追加してください。}} |
||
+ | あるいは、以下の sysfs エントリから特定のドライブのセクタサイズを読み取ることができます: |
||
− | == HDD が 4k セクタを使用しているかどうか判断する方法 == |
||
+ | $ cat /sys/class/block/''drive''/queue/physical_block_size |
||
− | ハードディスク (例: {{ic|/dev/sd''X''}}) の物理・論理セクタサイズは以下の sysfs エントリで確認することができます: |
||
− | $ cat /sys/class/block/ |
+ | $ cat /sys/class/block/''drive''/queue/logical_block_size |
− | $ cat /sys/class/block/sd''X''/queue/logical_block_size |
||
+ | セクタサイズは、[[fdisk]]、[[smartctl]]、そして [[hdparm]] の出力からも得られます。 |
||
− | 以下のツールは (ドライブが正しい値を報告しているのを前提として) ドライブの物理セクタを報告します: |
||
− | * smartmontools (5.41 から; <tt>smartmontools -a</tt>, 情報セクション) |
||
− | * hdparm (9.12 から; <tt>hdparm -I</tt>, 設定セクション) |
||
+ | == セクタサイズを変更する == |
||
− | USB 接続のディスクでも上記のツールは使えます (USB ブリッジが SAT、別名 SCSI/ATA Translation または ANSI INCITS 431-2007 に対応している場合)。 |
||
+ | {{Warning|ドライブのセクタサイズを変更すると、ドライブ上の全データが不可逆的に削除されます。}} |
||
− | == ソリッドステートドライブ == |
||
+ | 一部の NVMe ドライブと "エンタープライズ" SATA ハードディスクドライブでは、それぞれ標準の NVMe コマンド (NVM Command Set Specification 1.0 及びそれ以降の {{ic|Format NVM}}) か ATA コマンド (ATA Command Set - 4 及びそれ以降の {{ic|SET SECTOR CONFIGURATION EXT}}) を使って、報告されるセクタサイズを変更することができます。ハードディスクドライブの場合、最適なパフォーマンスを得るために物理セクタサイズとマッチするように論理セクタサイズを変更します。一方、NVMe ソリッドステートドライブの場合、論理セクタサイズと物理セクタサイズの両方が変更されます。 |
||
− | Most [[solid state drive]]s (SSDs) report their sector size as 512 bytes, even though they use larger sectors - typically 4 KiB, 8 KiB, or sometimes larger. As a result, file systems cannot automatically optimize for the native sector size. To avoid sub-optimal performance, one can either: |
||
+ | 大抵、SATA ソリッドステートドライブはセクタサイズの変更をサポートしていません。例外は、報告される物理セクタサイズを変更できるが、論理セクタサイズは変更できない特定の Intel SATA SSD です。[https://superuser.com/q/982680] 報告される物理セクタサイズを変更するには [[#Intel]] に従ってください。 |
||
− | * [[#File systems|Manually specify]] the sector size when creating a file system, |
||
− | * [[#Setting native sector size|Change]] the native sector size reported by the device. |
||
+ | ドライブのセクタサイズの変更は、低レベルなフォーマットが必要になる複雑なプロセスです。代替案として、ドライブ上にファイルシステムを作成する際にセクタサイズを手動で指定して最適なパフォーマンスを得ることができます。[[#dm-crypt]] と [[#ファイルシステム]] を見てください。 |
||
− | === NVMe ドライブのサポートされているセクタサイズを調べる === |
||
+ | === アドバンスドフォーマットハードディスクドライブ === |
||
− | Use [[smartmontools]] to check supported sector sizes: |
||
+ | [[hdparm]] ユーティリティを使うことで、アドバンスドフォーマットハードディスクドライブのセクタサイズを変更できるかどうか調べることができます: |
||
− | {{hc|# smartctl -a ''device''| |
||
+ | |||
+ | # hdparm -I /dev/sd''X'' {{!}} grep 'Sector size:' |
||
+ | |||
+ | {{Note|USB で接続されたドライブの場合、USB ブリッジが [[Wikipedia:SCSI / ATA Translation|SAT (SCSI/ATA Translation)]] (ANSI INCITS 431-2007) をサポートしている必要があります。}} |
||
+ | |||
+ | Sector Configuration Log に複数の論理セクタサイズが表示されるアドバンスドフォーマットドライブ では、それらのリストが表示されます: |
||
+ | |||
+ | {{bc| |
||
+ | Logical Sector size: 512 bytes [ Supported: 512 4096 ] |
||
+ | Physical Sector size: 4096 bytes |
||
+ | }} |
||
+ | |||
+ | 複数の変更可能な論理セクタサイズをサポートしていないハードディスクドライブでは、現在のセクタサイズだけが報告されます。例えば、アドバンスドフォーマット 512e ドライブの場合: |
||
+ | |||
+ | {{bc| |
||
+ | Logical Sector size: 512 bytes |
||
+ | Physical Sector size: 4096 bytes |
||
+ | }} |
||
+ | |||
+ | これらの種類のドライブで最適なパフォーマンスを得るには、[[#dm-crypt]] セクタサイズまたは[[#ファイルシステム]]のブロックサイズが少なくとも 4096 バイトであり、かつ 4096 バイト境界にアライメントされている必要があります。 |
||
+ | |||
+ | アドバンスドフォーマット 4Kn ドライブの場合: |
||
+ | |||
+ | {{bc| |
||
+ | Logical Sector size: 4096 bytes |
||
+ | Physical Sector size: 4096 bytes |
||
+ | }} |
||
+ | |||
+ | 4Kn ドライブでは、何も設定せずとも最適な設定になっており、パーティショニングやフォーマットの際に特別な考慮は必要ありません。そのまま使用することができます。 |
||
+ | |||
+ | SATA HDD が複数の論理セクタサイズとオプションの ATA コマンド {{ic|SET SECTOR CONFIGURATION EXT}} をサポートしている場合 (例えば、Seagate ドライブは FastFormat サポートを広告しています)、''hdparm'' を使ってサポートされているセクタサイズから選択することができます。論理セクタサイズを 4096 バイト (つまり、4Kn) に設定するには、以下を実行してください: |
||
+ | |||
+ | # hdparm --set-sector-size 4096 --please-destroy-my-drive /dev/sd''X'' |
||
+ | |||
+ | その後、''hdparm'' は論理セクタサイズが 4096 バイトであると報告するはずです: |
||
+ | |||
+ | {{hc|# hdparm -I /dev/sd''X'' {{!}} 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) を確認するには、{{Pkg|nvme-cli}} ユーティリティで ''Identify Namespace'' コマンドを使ってください: |
||
+ | |||
+ | {{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) |
Supported LBA Sizes (NSID 0x1) |
||
150行目: | 110行目: | ||
0 + 512 0 2 |
0 + 512 0 2 |
||
1 - 4096 0 1 |
1 - 4096 0 1 |
||
− | ... |
||
}} |
}} |
||
+ | 論理ブロックアドレスサイズを変更するには、{{ic|nvme format}} を使い、{{ic|--lbaf}} パラメータで好ましい値を指定してください: |
||
− | === ネイティブのセクタサイズを設定する === |
||
+ | {{hc|1=# nvme format --lbaf=1 /dev/nvme0n1|2= |
||
− | As an alternative to manually overriding the auto-detected sector size, some SSDs can have their sector size changed during formatting, so that they report a number closer to their true sector size. |
||
+ | 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. |
||
− | ==== NVMe ==== |
||
+ | Sending format operation ... |
||
+ | Success formatting namespace:1 |
||
+ | }} |
||
+ | この処理には数秒しかかからないはずです。 |
||
− | To see whether a given [[NVMe]] device supports this, use the ''Identify Namespace'' command. |
||
+ | {{Note|パーティショニングの際は以下の [[#パーティションのアライメント]] に従ってください。さもないと、パフォーマンス上の利点が水の泡になります。}} |
||
− | {{hc|# nvme id-ns /dev/nvme0n1| |
||
− | nlbaf : 0 |
||
− | [...] |
||
− | lbaf 0 : ms:0 lbads:9 rp:0 (in use) |
||
− | }} |
||
+ | {{Accuracy|電源状態や BIOS の設定をいじる前に、ネイティブの {{ic|nvme}} コマンドを使って操作ログを確認したり、{{ic|nvme reset}} ''など''を使ってコントローラをソフトリセットしたりすることをお勧めします。}} |
||
− | {{ic|nlbaf}} is the number of LBA formats minus 1, so here there is only one format supported. The list of formats is at the end of the output. Here {{ic|lbaf 0}} means LBA format #0. It has an {{ic|lbads}} (LBA data size) of 9, which means sectors are 2<sup>9</sup> or 512 bytes. If the device is capable of 4 KiB sectors, there will be another entry here with an {{ic|lbads}} of 12. The {{ic|rp}} (Relative Performance) value indicates which format will provide the best performance, with 0 being the best. {{ic|ms}} is (probably) the number of extra metadata bytes per sector, and this is not well supported under Linux so best to select a format with a value of 0 here. |
||
+ | 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] |
||
− | To change the sector size, use {{ic|nvme format}} and specify the preferred value with the {{ic|--lbaf}} parameter. If {{ic|nvme format}} fails, try putting the machine to sleep (e.g., with {{ic|systemctl suspend}}) and then try running {{ic|nvme format}} again after waking it. If {{ic|nvme format}} still fails, fiddling with your BIOS settings might help. |
||
+ | === メーカー固有のプログラムを使う === |
||
− | ==== SATA ==== |
||
+ | 上記の汎用ユーティリティでセクタサイズを変更できない場合、ドライブのメーカーのユーティリティを使用すれば変更できる場合があります。 |
||
− | For SATA devices, manufacturer specific programs must be used. Not all SATA devices support having the sector size changed. |
||
− | + | ==== 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]] を参照してください。}} |
||
− | For Intel use the [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}}) with the {{ic|1=-set PhysicalSectorSize=4096}} option. |
||
+ | 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 ==== |
|
+ | Seagate の場合、{{AUR|openseachest}} を使ってください。 |
||
− | Scan all drives to find the correct one, and print info from the one you found: |
||
+ | すべてのドライブをスキャンし、適切なものを探してください。そして、見つけたドライブの情報を表示してください: |
||
− | # SeaChest_Basics --scan |
||
− | # SeaChest_Basics -d /dev/sg''X'' -i |
||
+ | # openSeaChest_Basics --scan |
||
− | Should print out information about the drive. Make sure to check the serial number. |
||
+ | # openSeaChest_Basics -d /dev/sd''X'' -i |
||
+ | ドライブの情報が出力されるはずです。シリアル番号を確認してください。 |
||
− | Check the logical block sizes supported by the drive: |
||
+ | そのドライブによってサポートされている論理ブロックサイズを確認してください: |
||
− | # SeaChest_Format -d /dev/sg''X'' --showSupportedFormats |
||
+ | # openSeaChest_Format -d /dev/sd''X'' --showSupportedFormats |
||
− | If 4096 is listed, you can change the logical sector size to it as follows: |
||
+ | 4096 が一覧に載っている場合、論理セクタサイズを 4096 バイトに変更できます: |
||
− | # SeaChest_Format -d /dev/sg''X'' --setSectorSize=4096 --confirm this-will-erase-data |
||
+ | # openSeaChest_Format -d /dev/sd''X'' --setSectorSize=4096 --confirm this-will-erase-data |
||
− | This will take a couple of minutes, after which your drive now uses a 4K native sector size. |
||
+ | |||
+ | このコマンドは完了するまで2分かかります。その後、ドライブは 4 KiB ネイティブセクタサイズを使用するようになります。 |
||
== パーティションのアライメント == |
== パーティションのアライメント == |
||
210行目: | 173行目: | ||
** ''sgdisk'' はデフォルトで、パーティションの開始位置のみをアライメントします。パーティションのサイズや終了位置のアライメントも有効化するには、{{ic|-I}}/{{ic|--align-end}} オプションを使ってください。 |
** ''sgdisk'' はデフォルトで、パーティションの開始位置のみをアライメントします。パーティションのサイズや終了位置のアライメントも有効化するには、{{ic|-I}}/{{ic|--align-end}} オプションを使ってください。 |
||
* [[Parted#アライメント|Parted]] はパーティションの開始位置のみをアライメントし、サイズと終了位置はアライメントしません。パーティションを作成するときは、パーティションの終了位置をメビバイトかより大きな IEC 2進接頭辞で指定するようにしてください。 |
* [[Parted#アライメント|Parted]] はパーティションの開始位置のみをアライメントし、サイズと終了位置はアライメントしません。パーティションを作成するときは、パーティションの終了位置をメビバイトかより大きな IEC 2進接頭辞で指定するようにしてください。 |
||
+ | |||
+ | [https://github.com/crysman/check-partitions-alignment checkpartitionsalignment.sh] は、[[Parted]] と awk を使ってアライメントをチェックする bash スクリプトです。 |
||
== dm-crypt == |
== dm-crypt == |
||
+ | [[Cryptsetup]] 2.4.0 では、{{ic|luksFormat}} は自動的に LUKS2 フォーマットに最適な暗号化セクタサイズを検出します [https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v2.4/v2.4.0-ReleaseNotes]。 |
||
− | {{Expansion|Add example for plain dm-crypt.}} |
||
+ | しかし、これが機能するには、デバイスが正しいデフォルトセクタサイズを報告する必要があります。[[#セクタサイズを変更する]] を見てください。 |
||
− | As of [[Cryptsetup]] 2.4.0, {{ic|luksFormat}} automatically detects the optimal encryption sector size for LUKS2 format [https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v2.4/v2.4.0-ReleaseNotes]. |
||
+ | {{ic|cryptsetup luksFormat}} を使用したあとに、LUKS2 ボリュームによって使用されているセクタサイズを確認できます: |
||
− | However, for this to work, the device needs to report the correct default sector size, see [[#Setting native sector size]]. |
||
− | |||
− | After using {{ic|cryptsetup luksFormat}}, you can check the sector size used by the LUKS2 volume with |
||
# cryptsetup luksDump ''device'' | grep sector |
# cryptsetup luksDump ''device'' | grep sector |
||
+ | デフォルトのセクタサイズが正しくない場合、4 KiB のセクタサイズをそれ以外のデフォルトのオプションで LUKS2 コンテナを強制的に作成することができます: |
||
− | If the default sector size is incorrect, you can force create a LUKS2 container with a 4K sector size and otherwise default options with: |
||
# cryptsetup luksFormat --sector-size=4096 ''device'' |
# cryptsetup luksFormat --sector-size=4096 ''device'' |
||
+ | このコマンドは、要求されたサイズがデバイスと一致しない場合、エラーでアボートします: |
||
− | The command will abort on an error if the requested size does not match your device: |
||
{{bc|# cryptsetup luksFormat --sector-size 4096 ''device'' |
{{bc|# cryptsetup luksFormat --sector-size 4096 ''device'' |
||
235行目: | 198行目: | ||
}} |
}} |
||
− | {{Note| |
+ | {{Note|実際のドライブが 4 KiB 物理セクタを使用しているときにこのコマンドが失敗する可能性がある理由については、[https://gitlab.com/cryptsetup/cryptsetup/-/issues/585 cryptsetup issue 585] を見てください。}} |
+ | デバイスを間違ったセクタサイズで暗号化してしまった場合、以下のコマンドでそのデバイスを再暗号化できます: |
||
− | If you encrypted your device with the wrong sector size, the device can be re-encrypted by running: |
||
+ | {{Warning|含まれているファイルシステムが、4096 バイトおよびその倍数のブロックサイズを持っていなければなりません。さもないと、ファイルシステムが破壊されます。}} |
||
− | {{Warning|The contained file system must have a block size of 4096 bytes or a multiple of it, otherwise it will break.}} |
||
# cryptsetup reencrypt --sector-size=4096 ''device'' |
# cryptsetup reencrypt --sector-size=4096 ''device'' |
||
245行目: | 208行目: | ||
== ファイルシステム == |
== ファイルシステム == |
||
+ | 4Kn ディスク (物理セクタサイズが 4096 バイト、論理セクタサイズが 4096 バイト) では、全ての ''mkfs'' ユーティリティは 4096 バイトのブロックサイズを使用します。512e ディスク (物理セクタサイズが 4096、論理セクタサイズが 512 バイト) と 512n ディスク (物理セクタサイズが 512 バイト、論理セクタサイズが 512 バイト) では、''mkfs'' ユーティリティはそれぞれ異なる動作をします。 |
||
− | {{man|8|mkfs.btrfs}}, {{man|8|mkfs.jfs}}, {{man|8|mkfs.nilfs2}}, {{man|8|mkfs.reiserfs}} and {{man|8|mkswap}} default to a 4096 byte sector size. |
||
+ | {| class="wikitable" |
||
− | {{man|8|mkfs.ext4}} defaults to 1024 byte sectors for file systems smaller than 512 MiB and 4096 byte sectors for 512 MiB and larger. |
||
+ | |+ 非 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 バイトのセクタを使用します。 |
||
− | {{man|8|mkfs.xfs}} defaults to 512 byte sectors, but will use 4096 for 512e and 4Kn disks. |
||
+ | ストレージデバイスが正しいセクタサイズを報告しない場合は、物理セクタサイズに応じてパーティションを明示的にフォーマットできます。 |
||
− | {{man|8|mkfs.f2fs}}, {{man|8|mkfs.fat}}, {{man|8|mkfs.ntfs}} and {{man|8|mkfs.udf}} use the backing device's logical sector size. I.e. they will use 512 byte sectors for 512e disks and 4096 byte sectors for 4Kn disks. |
||
+ | 特に、ファームウェアによって管理されている ''シングル磁気記録方式'' (Singled Magnetic Recording: SMR) ドライブは、物理セクタサイズが 4096 バイトの場合に 512 バイトの論理セクタサイズを使用すると、深刻な悪影響を受けます。これらのドライブは、パフォーマンスの異なる書き込み領域が存在し、アイドル時にはリマッピングの再割当てが発生しますが、高負荷なアクティブ書き込み (例: RAID resilvering、バックアップ、小さなファイルを大量に書き込む、rsync など) 時には、ファイルシステムのセクタサイズが異なる場合に書き込み速度が1桁の MB/s まで落ちる可能性があります。これは、高パフォーマンスな書き込み領域が枯渇し、単一の領域上でセクタの変換レイヤに高負荷がかかるからです。 |
||
− | If the storage device does not report the correct sector size, you can explicitly format the partitions according to the physical sector size. |
||
+ | {{Note|x86_64 システムでは、Linux は 4 KiB より大きいブロックサイズのファイルシステムをマウントすることができません。詳細と現在の進捗状況については [https://kernelnewbies.org/KernelProjects/large-block-size Large block sizes (LBS)] を参照してください。}} |
||
− | In particular ''shingled magnetic recording'' (SMR) drives that are firmware-managed are severely and negatively impacted if using a logical sector size of 512 bytes if their physical sector size is of 4096 bytes. Those drives have different performance writing zones and remapping reallocation occurs while being idle, but during heavy active writes (e.g., RAID resilvering, backups, writing many small files, rsync, etc.), a different file system sector size could drop write speed to single digit megabytes/second, as the higher performance write areas get depleted, and the sector translation layer gets overworked on the shingled areas. |
||
+ | 以下は、4096 バイトのセクタを明示的に設定する例です: |
||
− | Here are some examples to set the 4096-byte sector size explicitly: |
||
+ | * [[Bcachefs]]: {{bc|1=# bcachefs format --block_size=4096 /dev/''device0'' /dev/''deviceN'' --replicas=''n''}} |
||
+ | * exFAT: {{bc|# mkfs.exfat -s 4096 /dev/''device''}} |
||
* [[ext4]]: {{bc|# mkfs.ext4 -b 4096 /dev/''device''}} |
* [[ext4]]: {{bc|# mkfs.ext4 -b 4096 /dev/''device''}} |
||
− | * [[XFS]]: {{bc|1=# mkfs.xfs -s size=4096 /dev/''device''}} |
||
* [[FAT]]: {{bc|# mkfs.fat -S 4096 /dev/''device''}} |
* [[FAT]]: {{bc|# mkfs.fat -S 4096 /dev/''device''}} |
||
* [[NTFS-3G]]: {{bc|# mkfs.ntfs -Q -s 4096 /dev/''device''}} |
* [[NTFS-3G]]: {{bc|# mkfs.ntfs -Q -s 4096 /dev/''device''}} |
||
* UDF: {{bc|# mkfs.udf -b 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''}} |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [https://www.anandtech.com/Show/Index/2888 Western Digital’s Advanced Format: The 4K Sector Transition Begins] |
||
+ | * [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}} |
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] を見てください。