どのLinuxファイルシステムがSSDに最適か


119

ウィキから:

重要なTRIM機能は、2.6.33カーネル(2010年初頭で利用可能)以降のLinux OSでサポートされています。ただし、さまざまなファイルシステム間でのサポートはまだ一貫していないか存在しません。適切なパーティションアライメントもインストールソフトウェアによって実行されません。

それでは、どのファイルシステムがSSDに最適に機能し、インストール中にTRIM +パーティションアライメントをサポートし、Ubuntuで利用可能ですか?

回答:


89

ファイルシステムEXT4 + TRIM:

  • TRIMを備えたEXT4は、SSDドライブへの不要な書き込みサイクルを削減することでパフォーマンスを向上させます。これは、書き込み/書き換えサイクルが制限されるためです。
  • Ubuntuおよび他の一部のLinuxフレーバーは、そのままでTRIMを使用してEXT 4をサポートします。

SWAPパーティション:

  • 書き込みサイクルを減らすために、SSDにSWAPスペースがないことを確認してください。
  • メカニカルドライブを使用している場合は、メカニカルドライブにSWAPスペースを作成し、SSDには配置しないでください。

パーティションの配置:

  • ファイルシステムのブロックサイズがSSDのブロックサイズと一致するように、パーティションはクリーンな1MB境界で開始する必要があります。

そのため、EXT4 + TRIMは、機械式ハードドライブのSWAPを使用するか、SSDのSWAPを使用しないでください。

上記は、Source:How to Maximize SSD Performanceを参照することで実装できます。


GPTは、使用して近代的な方法であるgdiskgrub 2.0.x、(私は誰かが答えに以下のことを述べた推測)とMBRは古いものを使用して、従来の方法であるgrub 0.9.7fdisk..あなたがここで詳細を見つけることができます:wiki.archlinux.org/index.php/Solid_State_Drivesを
aliasgar

7
nodiratimeいつ指定するかを指定する必要はありませんnoatime。同意すると、見た目はクールで仲間のオタクにとっては高度ですが、noatimeinodeでatime が無効になり、ディレクトリもiノードであるため、「手を洗って親指も洗ってください」と言っているようなものです。:)
レッドサンドロ

経験から言えば、デッドラインより速く動作するスケジューラー(「noop」)はないと言えます。
ドラムファイア

5
いいえ、「基礎となるブロックデバイスがTRIMをサポートしている場合、LinuxスワップパーティションはデフォルトでTRIM操作を実行します。TRIM操作をオフにしたり、1回限りまたは連続のTRIM操作を選択できます。」そのため、スワップパーティションをSSDに配置して高速アクセス時間を活用する必要があります。これにより、ページスワップが発生するたびに多くの時間が
かかり

2
@aliasgar ext4に対してF2FSは良い選択ですか?
SebMa

67

簡潔な答え

  • ext4を選択し、TRIMサポートのdiscardオプションでマウントする、FITRIMを使用します(以下を参照)。noatime「SSD摩耗」を恐れる場合にもこのオプションを使用してください。

  • マルチアプリケーションサーバーのデフォルトのI / Oスケジューラ(CFQ)を変更しないでください。プロセス間の公平性を提供し、自動SSDをサポートします。ただし、デスクトップで Deadline 使用すると、負荷がかかった場合の応答性が向上します。

  • 適切なデータアライメントを簡単に保証するには、各パーティションの開始セクターを2048の倍数(= 1 MiB)にする必要があります。を使用fdisk -cu /dev/sdXして作成できます。最近のディストリビューションでは、これが自動的に処理されます。

  • SSDでスワップを使用する前によく考えてください。おそらく、HDDでのスワップに比べてはるかに高速になりますが、ディスクの摩耗も速くなります(関連性がない可能性があります。以下を参照)。

長い答え

  • ファイルシステム:

Ext4は、最も一般的なLinuxファイルシステムです(十分に管理されています)。SSDで良好なパフォーマンスを提供し、TRIM(およびFITRIM)機能をサポートして、長期間にわたって良好なSSDパフォーマンスを維持します(これにより、未使用のメモリブロックが消去され、後の書き込みアクセスが速くなります)。NILFSは特にフラッシュメモリドライブ用に設計されていますが、ベンチマークではext4よりも実際にはパフォーマンスが良くありませ Btrfsはまだ実験的であると見なされています(実際にはどちらも優れたパフォーマンスを発揮しません)。

  • SSDパフォーマンスとTRIM:

TRIMの機能は、ファイルシステムによってもはや使用されていないSSDのブロックを消去します。これにより、長期の書き込みパフォーマンスが最適化され、SSDでは設計上推奨されます。これは、ファイルシステムがこれらのブロックについてドライブに通知できる必要があることを意味します。ext4discardマウントオプションは、ファイルシステムブロックが解放されると、そのようなTRIMコマンドを発行します。これはオンライン破棄です。

ただし、この動作はパフォーマンスのオーバーヘッドがわずかであることを意味します。Linux 2.6.37以降では、使用discardを避けることができ、代わりにFITRIMを使用してバッチ破棄を行うことができます(たとえば、crontabから)。fstrimユーティリティは、この(オンライン)し、同様-E discardのオプションfsck.ext4。ただし、これらのツールの「最新」バージョンが必要になります。

  • SSDの摩耗:

この点に関してSSDの寿命は限られているため、ドライブへの書き込みを制限することをお勧めします。ただし、今日の最悪の128 GB SSDは 1日あたり少なくとも 20 GBの書き込みデータを5年以上(セルあたり1000書き込みサイクル)サポートできます。より良いもの(そしてより大きなもの)はもっと長く続くことができます:あなたはそれまでにそれを交換したでしょう。

SSDでスワップを使用する場合、カーネルは非回転ディスクに気付き、スワップの使用ランダム化します(カーネルレベルのウェアレベリング):SSスワップが有効になっている場合、カーネルメッセージに(固体状態)が表示されます。

/ dev / sda1に2097148kスワップを追加します。優先度:-1エクステント:1全体:2097148k SS

  • I / Oスケジューラー:

また、私はaliasgarの回答の大部分に同意します(そのほとんどがこのWebサイトから-違法にコピーされた場合でも)- スケジューラの部分については部分的に同意しなければなりません。デフォルトでは、デッドラインスケジューラエレベータアルゴリズムを実装するため、回転ディスク用に最適化されています。それでは、この部分を明確にしましょう。

スケジューラに関する長い答え

カーネル2.6.29以降では、SSDディスクが自動的に検出されます。これは次の方法で確認できます。

cat /sys/block/sda/queue/rotational

1ハードディスクと0SSD を入手する必要があります。

これで、CFQスケジューラは、この情報に基づいて動作を調整できます。Linux 3.1以降、カーネルのドキュメントcfq-iosched.txtファイルに次のように記載されています。

CFQはSSDに対していくつかの最適化を行い、より高いキュー深度(一度に飛行中の複数の要求)をサポートできる非回転メディアを検出した場合、[...]。

また、Deadlineスケジューラーは、セクター番号に基づいて、回転ディスク上の順不同のヘッドの動きを制限しようとします。カーネルドキュメントdeadline-iosched.txtfifo_batch オプションの説明を引用:

要求は特定のデータ方向(読み取りまたは書き込み)の「バッチ」にグループ化され、セクターの順序で処理されます。

ただし、SSDを使用するときにこのパラメーターを1にチューニングすると興味深い場合があります。

このパラメータは、リクエストごとのレイテンシと集約スループットのバランスを調整します。低レイテンシが主な関心事である場合は、小さい方が優れています(1の値は先着順の動作をもたらします)。fifo_batchを増やすと、一般にスループットが向上しますが、レイテンシーの変動が犠牲になります。

いくつかのベンチマーク 、異なるスケジューラ間でパフォーマンスにほとんど差がないこと示唆しいます。それでは、なぜ公正さをお勧めしませんか?CFQがベンチでめったに悪くないとき。ただし、デスクトップのセットアップでは、通常、その設計のために、負荷がかかった状態でDeadlineを使用すると応答性が向上します(ただし、スループットコストは低くなります)。

とは言うものの、より良いベンチマークではDeadlineを使用してみfifo_batch=1ます。

デフォルトでSSDでDeadlineを使用するには/etc/udev.d/99-ssd.rules、次のようにファイルを作成できます。

# all non-rotational block devices use 'deadline' scheduler
# mostly useful for SSDs on desktops systems
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"

最近のディストリビューションでパーティションのアライメントが自動的に処理されるということはどういう意味ですか?たとえば、ubuntuのインストール中に手動でパーティションを作成する場合、またはgpartedでパーティションを作成する場合にも適用されますか?
ジャーノ

2
最新のディストリビューション(数年前)の@jarnoは、fdiskからグラフィカルなものまでのパーティション分割ツールで、デバイスの開始から1Mbの倍数でパーティションのアライメントを自動的に作成する傾向があります。これは、本質的に2 ^ nである512バイト、4k、8k、およびその他の5億個のブロック/クラスターサイズとプリエンプティブに連携します。あなたがそうするためにあなたが相当な努力をしない限り、パーティションをミスアラインすることはほとんど不可能になります。
キラーミスト

13

ArchLinuxの記事Solid State Drivesには、ファイルシステムの選択のセクションがあります:

Ext2 / 3/4、Btrfsなどを含むファイルシステムには多くのオプションがあります。

Btrfs
Btrfsサポートは、Linuxカーネルのメインライン2.6.29リリースに含まれています。ext4の後継となる可能性のある早期採用者もいる一方で、実稼働で使用するには十分に成熟していないと感じる人もいます。詳細については、Btrfsの記事を読むことをお勧めします 。

Ext4
Ext4は、SSDをサポートする別のファイルシステムです。2.6.28以降は安定していると見なされ、毎日の使用に十分なほど成熟しています。Btrfsとは異なり、ext4はディスクの性質を自動的に検出しません。ユーザーは、fstabでマウントの破棄オプションを使用して(またはtune2fs -o discard / dev / sdaXを使用して)TRIMコマンドのサポートを明示的に有効にする必要があります。

BtrfsとExt4は両方とも、SSDを効率的に使用するための2つの主要な要件を満たしています。

  • ファイルシステムは、基礎となるSSDにATA_TRIMコマンドを発行できる必要があります
  • ファイルシステムは、ディスクへの不要な書き込みを実行してはいけません

パフォーマンスのために、他に2つの要件があります。

  • パーティションはSSDのブロックサイズに合わせる必要があります
  • TRIMは、Ext4フォーマットのパーティションごとに明示的に有効にする必要があります

最初のものは、現在ほとんどのLinuxインストーラーで自動化されています。fdiskは、「-cu」フラグで開始された場合、1024KBの境界にパーティションを作成します。

2番目はBtrfsでは自動ですが、Ext4の場合、これは「/ etc / fstab」ファイル内の各Ext4パーティションのマウントオプションのリストに「discard」を追加することで手動で行われます。詳細については、このhowtoを参照してください。

私の意見では、Ext4のfstabを少しいじる必要があるだけで、この成熟した優れたファイルシステムを使用しない理由はありません。


-2

BTRFS IMO。Ubuntu 8.04以降には、GPT対応のGRUBのバージョンが含まれています。GPTとGdiskを使用すると、パーティションが調整されます。fdiskでも同様にできると思います。

とにかく、BTRFSファイルシステムにUbuntuをインストールするためのリンクを次に示します。

http://www.linuxbsdos.com/2011/05/05/how-to-install-ubuntu-11-04-on-a-btrfs-file-system/

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.