「Ext4」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「Tips and tricks」を「ヒントとテクニック」に置換)
 
(4人の利用者による、間の28版が非表示)
14行目: 14行目:
 
{{Related articles end}}
 
{{Related articles end}}
   
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました (ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies])
+
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました (ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies])
   
 
== 新しく ext4 ファイルシステムを作成 ==
 
== 新しく ext4 ファイルシステムを作成 ==
  +
  +
{{Pkg|e2fsprogs}} を [[インストール]] します。
   
 
パーティションをフォーマットするには次を実行:
 
パーティションをフォーマットするには次を実行:
22行目: 24行目:
 
# mkfs.ext4 /dev/''partition''
 
# mkfs.ext4 /dev/''partition''
   
  +
{{Tip|
{{Tip|オプションについては {{man|8|mke2fs}} の [[man ページ]]を見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}
 
  +
*オプションについては {{man|8|mke2fs}} の [[man ページ]]を見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。
  +
*サポートされている場合は、[[Ext4#メタデータチェックサムを有効化する|メタデータチェックサム]] を有効にすることをお勧めします。
  +
}}
   
=== Bytes-per-inode レシオ ===
+
=== Bytes-per-inode 比率 ===
   
'''mke2fs''' はひとつの inode に対してディスク上に ''bytes-per-inode'' バイト分の領域を作成します。''bytes-per-inode'' レシオを大きくすることで、作成される inode は少なくなります。詳しくは {{man|8|mke2fs}} を参照。
+
'''mke2fs''' はひとつの inode に対してディスク上に ''bytes-per-inode'' バイト分の領域を作成します。''bytes-per-inode'' 比率を大きくすることで、作成される inode は少なくなります。詳しくは {{man|8|mke2fs}} を参照。
   
 
新しいファイルやディレクトリ、シンボリックリンクなどを作成するとき [[Wikipedia:Inode|inode]] が最低でもひとつは必要です。inode の数が少なすぎると、たとえディスクに空き容量があったとしてもファイルシステムにファイルを作成できなくなります。
 
新しいファイルやディレクトリ、シンボリックリンクなどを作成するとき [[Wikipedia:Inode|inode]] が最低でもひとつは必要です。inode の数が少なすぎると、たとえディスクに空き容量があったとしてもファイルシステムにファイルを作成できなくなります。
   
ファイルシステムを作成した後に bytes-per-inode レシオや inode の数を変更することはできないため、ファイルが作成できなくなってしまわないように {{ic|mkfs.ext4}} はデフォルトではレシオを低くして inode に対して16384バイト (16Kb) を割り当てます。
+
ファイルシステムを作成した後に bytes-per-inode 比率や inode の数を変更することはできないため、ファイルが作成できなくなってしまわないように {{ic|mkfs.ext4}} はデフォルトでは比率を低くして inode に対して16384バイト (16Kb) を割り当てます。
   
 
しかしながら、1GB 以上のファイルが多数存在してファイルの平均容量がメガバイト級になるような使い方をしているパーティションの場合、inode の数が多すぎてファイルの作成では inode の限界に絶対に達しないということになります。
 
しかしながら、1GB 以上のファイルが多数存在してファイルの平均容量がメガバイト級になるような使い方をしているパーティションの場合、inode の数が多すぎてファイルの作成では inode の限界に絶対に達しないということになります。
   
未使用の inode にも256バイト取られるのでディスク領域の無駄使いです (256バイトという数字は {{ic|/etc/mke2fs.conf}} で設定されていますが変更してはいけません)256バイトでも数百万の inode に換算するとギガバイト単位で容量を無駄にしていることになります。
+
未使用の inode にも256バイト取られるのでディスク領域の無駄使いです (256バイトという数字は {{ic|/etc/mke2fs.conf}} で設定されていますが変更してはいけません) 256バイトでも数百万の inode に換算するとギガバイト単位で容量を無駄にしていることになります。
   
 
{{ic|df}} と {{ic|df -i}} を実行したときの {{ic|{I}Use%}} の値を比較することでどれくらい無駄になっているのか確認できます:
 
{{ic|df}} と {{ic|df -i}} を実行したときの {{ic|{I}Use%}} の値を比較することでどれくらい無駄になっているのか確認できます:
45行目: 50行目:
 
/dev/mapper/lvm-home 1.8M 1.1K 1.8M '''1%''' /home}}
 
/dev/mapper/lvm-home 1.8M 1.1K 1.8M '''1%''' /home}}
   
bytes-per-inode レシオを変更するには、{{ic|-T ''usage-type''}} オプションを使用します。{{ic|/etc/mke2fs.conf}} で定義されたタイプを使用してファイルシステムの利用方法を指定できます。{{ic|largefile}} や {{ic|largefile4}} タイプは inode に対してそれぞれ 1 MiB と 4 MiB という大きな容量を割り当てます。以下のように使うことができます:
+
bytes-per-inode 比率を変更するには、{{ic|-T ''usage-type''}} オプションを使用します。{{ic|/etc/mke2fs.conf}} で定義されたタイプを使用してファイルシステムの利用方法を指定できます。{{ic|largefile}} や {{ic|largefile4}} タイプは inode に対してそれぞれ 1 MiB と 4 MiB という大きな容量を割り当てます。以下のように使うことができます:
   
 
# mkfs.ext4 -T largefile /dev/''device''
 
# mkfs.ext4 -T largefile /dev/''device''
   
{{ic|-i}} オプションを使って bytes-per-inode レシオを直接設定することもできます。例えば {{ic|-i 2097152}} なら 2 MiB、{{ic|-i 6291456}} なら 6 MiB になります。
+
{{ic|-i}} オプションを使って bytes-per-inode 比率を直接設定することもできます。例えば {{ic|-i 2097152}} なら 2 MiB、{{ic|-i 6291456}} なら 6 MiB になります。
   
 
{{Tip|逆に、メールやニュースグループのアイテムなどで小さなファイルを何百万も保存するような使い方をする場合、{{ic|news}} (ひとつの inode に4096バイトを割り当て) や {{ic|small}} (inode 自体のサイズやブロックサイズも小さくする) などのタイプを使うこともできます。}}
 
{{Tip|逆に、メールやニュースグループのアイテムなどで小さなファイルを何百万も保存するような使い方をする場合、{{ic|news}} (ひとつの inode に4096バイトを割り当て) や {{ic|small}} (inode 自体のサイズやブロックサイズも小さくする) などのタイプを使うこともできます。}}
   
{{Warning|シンボリックリンクを大量に使用する場合、bytes-per-inode レシオを低くするときも inode の数は大きくしてください。シンボリックリンクを作成しても容量は取られませんが inode はひとつ消費されるので、ファイルシステムの inode をあっという間に使い切ってしまう可能性があります。}}
+
{{Warning|シンボリックリンクを大量に使用する場合、bytes-per-inode 比率を低くして inode の数は大きくしてください。シンボリックリンクを作成しても容量は取られませんが inode はひとつ消費されるので、ファイルシステムの inode をあっという間に使い切ってしまう可能性があります。}}
   
 
=== 予約ブロック ===
 
=== 予約ブロック ===
59行目: 64行目:
 
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザー用に予約されます。非特権のプロセスがファイルシステムに書き込めなくなってからも root が使用しているデーモンは正しく動作し続けることができます (詳しくは {{man|8|mke2fs}} を参照)。
 
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザー用に予約されます。非特権のプロセスがファイルシステムに書き込めなくなってからも root が使用しているデーモンは正しく動作し続けることができます (詳しくは {{man|8|mke2fs}} を参照)。
   
最近の大容量ディスクでは、パーティションを長期保存用のアーカイブとして使場合、5%は必要以上に大きい値とます。ext4 開発者である Ted Ts'o による予約ブロックについて議論は [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] をてください。
+
最近の大容量ディスクでは、パーティションを長期アーカイブとして使用したり、システム運用に重要でない場合({{ic|/home}}など)必要以上に大きな値を設定します。予約ブロックに関する ext4 開発者 Ted Ts'o の意見は [https://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を、このトピックに関する一般的な背景は [https://superuser.com/questions/1256074/how-much-space-to-leave-free-on-hdd-or-ssd/1257550#1257550 このスーパーユーザの回答] を参照してください。
   
パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:
+
パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:
   
*パーティションがとても大きい (例えば 50GB 以上)
+
*パーティションがとても大きい (例えば 50GB 以上)
 
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない。
 
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない。
   
72行目: 77行目:
 
# mkfs.ext4 -m 0 /dev/''device''
 
# mkfs.ext4 -m 0 /dev/''device''
   
パーティションの予約ブロックの割合を 1.0% に設定するには:
+
パーティションの予約ブロックの割合を 1% に設定するには:
   
 
# tune2fs -m 1 /dev/''device''
 
# tune2fs -m 1 /dev/''device''
   
  +
予約ブロック数をギガバイト単位の絶対サイズに設定する場合は、{{ic|-r}} を使用します。
{{man|8|findmnt}} を使うことでデバイスの名前を確認できます:
 
   
  +
# tune2fs -r $((''ngigs'' * 1024**3 / ''blocksize'')) /dev/''device''
$ findmnt ''/the/mount/point''
 
  +
  +
{{ic|''blocksize''}} はファイルシステムのブロックサイズをバイト単位で指定します。これはほとんどの場合 4096 ですが、念のため確認することができます。
  +
  +
{{hc|# tune2fs -l /dev/''device'' {{!}} egrep '^Block size:'|
  +
Block size: 4096
  +
}}
  +
  +
{{ic|$(())}} 構文は、数式展開のための構文です。この構文は {{Pkg|bash}} と {{Pkg|zsh}} では動作しますが、{{Pkg|fish}} では動作しません。''fish'' では、このような構文になります。
  +
  +
# tune2fs -r (math 'ngigs * 1024^3 / blocksize') /dev/''device''
  +
  +
これらのコマンドは、現在マウントされているファイルシステムに適用することができ、変更は即座に反映されます。デバイス名は {{man|8|findmnt}} で調べることができます。
  +
  +
# tune2fs -m 1 "$(findmnt -no SOURCE ''/the/mount/point'')"
  +
  +
現在の予約ブロック数を問い合わせる場合。
  +
  +
{{hc|# tune2fs -l /dev/mapper/proxima-root {{!}} egrep '^Reserved block count:'|
  +
Reserved block count: 2975334
  +
}}
  +
  +
これはブロック数なので、これにファイルシステムのブロックサイズを掛けて、バイト数やギガバイト数を得る必要があります。{{ic|1=2975334 * 4096 / 1024**3 = 11.34 GiB}} です。
   
 
==ext2/ext3 から ext4 に移行==
 
==ext2/ext3 から ext4 に移行==
89行目: 116行目:
   
 
'''利点:'''
 
'''利点:'''
* 互換性 (ext2/ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext2/ext3 ドライバー)
+
* 互換性 (ext2/ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext2/ext3 ドライバー)
 
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [http://kernelnewbies.org/Ext4] や [http://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_fujita.pdf] を見てください。
 
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [http://kernelnewbies.org/Ext4] や [http://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_fujita.pdf] を見てください。
   
113行目: 140行目:
 
'''欠点:'''
 
'''欠点:'''
 
* {{ic|/boot}} パーティションなど、静的なファイルしか存在しない場合、新機能を使うメリットはありません。さらに、ジャーナリングによって性能がむしろ落ちる可能性もあります。
 
* {{ic|/boot}} パーティションなど、静的なファイルしか存在しない場合、新機能を使うメリットはありません。さらに、ジャーナリングによって性能がむしろ落ちる可能性もあります。
* 一方通行 (ext4 パーティションを ext2/ext3 に'ダウングレード'することはできません)ただしエクステントなどのオプションを有効にしなければ後方互換性を確保できます。
+
* 一方通行 (ext4 パーティションを ext2/ext3 に'ダウングレード'することはできません) ただしエクステントなどのオプションを有効にしなければ後方互換性を確保できます。
   
 
====方法====
 
====方法====
128行目: 155行目:
 
# パーティションがマウントされていないことを確認してください
 
# パーティションがマウントされていないことを確認してください
 
# ext2 パーティションを変換する場合、まずは {{ic|tune2fs -j /dev/sdxX}} を root で実行して[[ファイルシステム#ジャーナリング|ジャーナル]]を追加して ext3 パーティションに変換してください。
 
# ext2 パーティションを変換する場合、まずは {{ic|tune2fs -j /dev/sdxX}} を root で実行して[[ファイルシステム#ジャーナリング|ジャーナル]]を追加して ext3 パーティションに変換してください。
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を root で実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})。ext4 に変換されます (不可逆です)
+
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を root で実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})。ext4 に変換されます (不可逆です)
 
# root で {{Ic|fsck -f /dev/sdxX}} を実行。
 
# root で {{Ic|fsck -f /dev/sdxX}} を実行。
#* ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。''fsck'' の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。{{ic|-f}} オプションはファイルシステムに問題がない場合でも強制的にチェックを実行します。{{ic|-p}} オプションを使用して自動修復させることもできます (オプションを使用しない場合、エラーに対して入力を求められます)
+
#* ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。''fsck'' の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。{{ic|-f}} オプションはファイルシステムに問題がない場合でも強制的にチェックを実行します。{{ic|-p}} オプションを使用して自動修復させることもできます (オプションを使用しない場合、エラーに対して入力を求められます)
 
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行。
 
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行。
 
#* ファイルシステムが ext4 に変換されても、変換前に書き込まれたファイルは ext4 のエクステントオプションを利用することができません。エクステントオプションは巨大なファイルの操作を高速化しフラグメンテーションを減らしてファイルシステムのチェック時間を短縮します。ext4 を活用するには、全てのファイルをディスクに再書き込みする必要があります。''e4defrag'' を使うことで問題を解決できます。
 
#* ファイルシステムが ext4 に変換されても、変換前に書き込まれたファイルは ext4 のエクステントオプションを利用することができません。エクステントオプションは巨大なファイルの操作を高速化しフラグメンテーションを減らしてファイルシステムのチェック時間を短縮します。ext4 を活用するには、全てのファイルをディスクに再書き込みする必要があります。''e4defrag'' を使うことで問題を解決できます。
 
# Arch Linux を再起動してください。
 
# Arch Linux を再起動してください。
   
== ファイルベースの暗号化を利用する ==
+
== マンスの向上 ==
   
  +
=== E4rat ===
{{Note|1=[[カーネル]] 4.13 以上では Ext4 でルートディレクトリ ({{ic|/}}) を暗号化することは禁止されており、エラーが発生します [https://patchwork.kernel.org/patch/9787619/] [https://www.phoronix.com/scan.php?page=news_item&px=EXT4-Linux-4.13-Work]。}}
 
   
  +
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。
Linux 4.1 以降、ext4 はファイルベースの暗号化をサポートしています。暗号化したディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットがすべて暗号化されます。暗号鍵はカーネルキーリングに格納されます。機能の詳細、実装状態の概要、カーネル 4.1 での実践的なテスト結果などが [http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslab のブログ記事] に書かれています。
 
   
  +
=== アクセス時間の更新を無効にする ===
使用しているカーネルで {{ic|CONFIG_EXT4_ENCRYPTION}} オプションが有効になっていること、{{Pkg|e2fsprogs}} パッケージがバージョン 1.43 以上であることを確認してください。
 
   
  +
'' ext4 ''ファイルシステムは、ファイルが最後にアクセスされた日時に関する情報を記録し、その記録にはコストがかかります。 {{ic|noatime}} オプションを使用すると、ファイルシステムのアクセスタイムスタンプは更新されません。
次に、ファイルシステムが使用しているブロックサイズが暗号化できるブロックサイズであることを確認します:
 
   
  +
{{hc|/etc/fstab|
{{hc|# tune2fs -l /dev/''device'' {{!}} grep 'Block size'|Block size: 4096}}
 
  +
/dev/sda5 / ext4 defaults,'''noatime''' 0 1
  +
}}
   
  +
これを行うと、アクセス時間に依存するアプリケーションが破損します。考えられる解決策については、[https://wiki.archlinux.jp/index.php/Fstab#atime_.E3.82.AA.E3.83.97.E3.82.B7.E3.83.A7.E3.83.B3 atimeoptions] を参照してください。
{{hc|# getconf PAGE_SIZE|4096}}
 
   
  +
=== コミット間隔の増加 ===
上記の値が同じでない場合、あなたのファイルシステムは暗号化できません。その場合、'''絶対に以下の操作を行わないでください'''。
 
   
  +
{{ic|commit}} オプションで長い時間遅延を提供することにより、データとメタデータの同期間隔を増やすことができます。
ファイルシステムの暗号化機能フラグを有効化:
 
   
  +
デフォルトの5秒は、電源が失われた場合、最新の5秒の作業が失われることを意味します。
# tune2fs -O encrypt /dev/''device''
 
  +
5秒ごとにすべてのデータ/ジャーナルを物理メディアに完全に同期します。 ただし、ジャーナリングのおかげで、ファイルシステムが損傷することはありません。
  +
次の [[fstab]] は、 {{ic|commit}} の使用法を示しています。
   
  +
{{hc|/etc/fstab|2=
{{Warning|暗号化機能フラグを有効にすると、4.1 未満のカーネルはファイルシステムをマウントできなくなります。}}
 
  +
/dev/sda5 / ext4 defaults,noatime,'''commit=60''' 0 1
  +
}}
   
  +
=== バリアとパフォーマンス ===
暗号化するディレクトリを作成します:
 
   
  +
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}
# mkdir /encrypted
 
   
  +
''Ext4'' はデフォルトで書き込みバリアを有効にします。これにより、書き込みキャッシュの電源が失われた場合でも、ファイルシステムのメタデータがディスク上に正しく書き込まれ、順序付けされることが保証されます。これには、特に ''fsync'' を頻繁に使用するアプリケーションや、小さなファイルを多数作成および削除するアプリケーションの場合、パフォーマンスにコストが伴います。何らかの方法でバッテリーバックアップが行われている書き込みキャッシュを持つディスクの場合、バリアを無効にするとパフォーマンスが安全に向上する可能性があります。
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定 (または「暗号化ポリシー」) は、新しいファイルとサブディレクトリに継承されます。既存のファイルの暗号化はまだサポートされていません。
 
   
  +
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:
そして新しい鍵を生成してキーリングに追加します。キーリングをフラッシュする (再起動する) たびに、この手順を繰り返す必要があります:
 
   
  +
{{hc|/etc/fstab|2=
# e4crypt add_key
 
  +
/dev/sda5 / ext4 defaults,'''barrier=0''' 0 1
Enter passphrase (echo disabled):
 
  +
}}
Added key with descriptor [f88747555a6115f5]
 
   
  +
=== ジャーナリングの無効化 ===
{{Warning|パスフレーズを忘れた場合、ファイルを復号化することができなくなります。パスフレーズを設定した後にパスフレーズを変更することもできません。}}
 
   
  +
{{Warning|ジャーナリングなしでファイルシステムを使用すると、停電やカーネルのロックアップなどの突然のマウント解除の場合にデータが失われる可能性があります。}}
{{Note|パスフレーズに対する[[Wikipedia:ja:辞書攻撃|辞書攻撃]]を防ぐために、ランダムな[[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4 ファイルシステムのスーパーブロックに保存されます。パスフレーズとソルトの''両方''を使用して、暗号鍵が生成されます。暗号化を有効にした ext4 ファイルシステムを複数マウントしている場合、{{ic|e4crypt add_key}} はファイルシステムごとにひとつずつ複数の鍵を追加します。鍵とファイルシステムは交換可能ですが、特定のファイルシステムに対しては、そのファイルシステムのソルトを使用する鍵だけを使うのが賢明でしょう。別の鍵を使用した場合、ファイルシステム B がアンマウントされている状態でファイルシステム A のファイルを復号化することができなくなる危険があります。また、{{ic|e4crypt add_key}} の {{ic|-S}} オプションを使用してソルトを指定することもできます。}}
 
   
  +
''ext4'' を使用してジャーナルを無効にするには、マウントされていないディスクで次のコマンドを使用します。
あなたの鍵の記述子が分かったら鍵がセッションキーリングに含まれていることを確認してください:
 
   
  +
# tune2fs -O "^has_journal" /dev/sdXN
# keyctl show
 
Session Keyring
 
1021618178 --alswrv 1000 1000 keyring: _ses
 
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5
 
   
  +
=== 外部ジャーナルを使用してパフォーマンスを最適化する ===
最後にディレクトリに暗号化ポリシーを設定します (上記の鍵の記述子を使ってください):
 
   
  +
{{ic|journal_async_commit}} マウントオプションを使用すると、ジャーナリングを大幅に高速化できます。
# e4crypt set_policy f88747555a6115f5 /encrypted
 
   
  +
{{Note|{{ic|journal_async_commit}} マウントオプションは、デフォルトのマウントオプションである {{ic|1=data=ordered}} と一緒に使うと[https://patchwork.ozlabs.org/patch/414750/ 動作しません]。なので、明示的に {{ic|''ext4_device''}} を別のモードでマウントしてください。{{man|5|ext4|3=data=}} を見てください。}}
以上です。キーリングに鍵を追加せずにディレクトリにアクセスしても、ファイル名とその内容は暗号化された状態で表示されます。
 
   
  +
次のコマンドを使用して、ジャーナルで使用する専用デバイスをフォーマットできます:
==ヒントとテクニック==
 
   
  +
# mke2fs -O journal_dev /dev/''journal_device''
=== E4rat ===
 
   
  +
{{ic|''journal_device''}} を {{ic|''ext4_device''}} のジャーナルとして割り当てるには、次を使用します。
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。
 
   
  +
# tune2fs -J device=/dev/''journal_device'' /dev/''ext4_device''
=== バリアとパフォーマンス ===
 
   
  +
同時に {{ic|''ext4_device''}} に新しいファイルシステムを作成したい場合は、{{ic|tune2fs}} を {{ic|mkfs.ext4}} に置き換えることができます。
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&item=ext4_then_now&num=1]。
 
   
  +
== ヒントとテクニック ==
''多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。''
 
   
  +
=== ファイルベースの暗号化を使用する ===
''書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます'' [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。
 
   
  +
Linux 4.1 以降、ext4 はファイル暗号化をネイティブにサポートしています。 [[fscrypt]] の記事を参照してください。 暗号化はディレクトリレベルで適用され、ディレクトリごとに異なる暗号化キーを使用できます。 これは、ブロックデバイスレベルの暗号化である [[dm-crypt]] と、スタック暗号化ファイルシステムである [[eCryptfs]] の両方とは異なります。
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}
 
   
  +
=== メタデータチェックサムを有効化する ===
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:
 
   
  +
ファイルシステムが {{Pkg|e2fsprogs}} で作成されている場合。1.43 (2016) 以降では、メタデータチェックサムがデフォルトで有効になっています。既存のファイルシステムを変換して、メタデータチェックサムのサポートを有効にすることができます。
{{hc|/etc/fstab|2=
 
/dev/sda5 / ext4 noatime,barrier=0 0 1
 
}}
 
   
  +
CPU が SSE 4.2 をサポートしている場合、{{ic|crc32c_intel}} が有効であることを確認してください。ハードウェアアクセラレーションによる CRC32C アルゴリズム [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums#Benchmarking] を有効にするために [[カーネルモジュール]] がロードされています。もしそうでなければ、代わりに {{ic|crc32c_generic}} モジュールをロードしてください。
== メタデータチェックサムを有効化する ==
 
   
  +
メタデータチェックサムの詳細については、[https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki] を参照してください。
ファイルシステムが新しい場合でも既存の場合でも、メタデータチェックサムを有効にするにはカーネルモジュールをロードする必要があります。
 
   
  +
{{Tip|{{ic|dumpe2fs}} を使用して、ファイルシステムで有効になっている機能を確認します。
あなたの使用している CPU が SSE 4.2 をサポートしている場合は、{{Ic|crc32c_intel}} カーネルモジュールをロードしてください。ハードウェアアクセラレーションによる CRC32C アルゴリズムが有効になります。サポートしていない場合は {{Ic|crc32c_generic}} モジュールをロードしてください。
 
  +
# dumpe2fs -h ''/dev/path/to/disk''
  +
}}
   
対象がルートファイルシステムの場合は {{Ic|/etc/mkinitcpio.conf}} に {{Ic|crypto-crc32c}} モジュール追加しなくてはなりません:
+
{{Note|ファイルシステムをマウントしないでださい。}}
   
  +
まず、{{ic|e2fsck}} を使用してパーティションをチェックし、最適化する必要があります。
MODULES="... crypto-crc32c"
 
   
  +
# e2fsck -Df ''/dev/path/to/disk''
追加したら initramfs を再生成してください。詳しくは [[Mkinitcpio#イメージ作成とアクティベーション]]を参照。
 
   
  +
ファイルシステムを64ビットに変換します。
メタデータチェックサムを有効にする方法は以下の2つのセクションで説明しています。いずれの場合もファイルシステムはマウントされていない状態でなければなりません。
 
   
  +
# resize2fs -b ''/dev/path/to/disk''
メタデータチェックサムに関する詳細は [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki] を読んでください。
 
   
  +
最後に、チェックサムサポートを有効にします。
=== 新しいファイルシステム ===
 
   
  +
# tune2fs -O metadata_csum ''/dev/path/to/disk''
新しいファイルシステムで ext4 のメタデータチェックサムを有効化する場合 {{Ic|e2fsprogs}} が 1.43 以上であることを確認してください。
 
   
  +
検証します:
そして以下のようにファイルシステムを作成します:
 
   
# mkfs.ext4 -O metadata_csum ''/dev/path/to/disk''
+
{{hc|# dumpe2fs -h ''/dev/path/to/disk'' {{!}} grep features:|2=
  +
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent '''64bit''' flex_bg sparse_super large_file huge_file dir_nlink extra_isize '''metadata_csum'''
  +
}}
   
{{Ic|64bit}} オプションはデで有効になりま
+
=== 既存のァイシステム fast_commit を有効にする ===
   
  +
5.10 カーネル以降、ext4 では {{ic|fast_commit}} オプションを有効にすることで、パフォーマンスが向上する可能性があります。
その後ファイルシステムは通常通りにマウントできます。
 
   
  +
# tune2fs -O fast_commit /dev/''drivepartition''
=== 既存のファイルシステム ===
 
   
  +
現在の構成または変更を確認するには:
既存の ext4 ファイルシステムでメタデータチェックサムを有効化するには以下を実行してください。
 
   
  +
# tune2fs -l /dev/''drivepartition'' | grep features
有効化するにはパーティションがアンマウントされている状態でなければならないため、ルートパーティションで有効化したい場合、USB ライブディストリを起動する必要があります。
 
   
  +
=== 大文字と小文字を区別しないモードを有効にする ===
まずは以下のコマンドを実行してパーティションのファイルシステムチェックと最適化を行ってください:
 
   
  +
Ext4 は大文字と小文字を区別しないモードで使用でき、[[Wine]] で実行されるアプリケーションやゲームのパフォーマンスを向上させることができます。この機能はファイルシステム全体には影響しません。大文字と小文字を区別しない属性が有効になっているディレクトリにのみ影響します。
# e2fsck -Df ''/dev/path/to/disk''
 
   
そしてファイルシステムを64ビット変換します:
+
まず、ファイルシステムでこの機能有効にします:
   
# resize2fs -b ''/dev/path/to/disk''
+
# tune2fs -O casefold ''/dev/path/to/disk''
 
最後にチェックサムを追加してください:
 
 
# tune2fs -O metadata_csum ''/dev/path/to/disk''
 
 
その後ファイルシステムは通常通りにマウントできます。
 
 
機能が有効になっているかどうかは以下のコマンドで確認できます:
 
 
# dumpe2fs -h ''/dev/path/to/disk''
 
   
  +
これで、任意のディレクトリで大文字と小文字を区別しない[[ファイルのパーミッションと属性#ファイルの属性|属性]]を有効にできるようになります:
=== パフォーマンスへの影響 ===
 
   
  +
$ chattr +F ''/mnt/partition/case-insensitive-directory''
[https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums#Benchmarking こちらのベンチマーク] によれば intel モジュールは generic モジュールよりも平均で10倍、最大で20倍高速です。
 
   
 
== 参照 ==
 
== 参照 ==
268行目: 290行目:
 
* [https://ext4.wiki.kernel.org/ 公式 Ext4 wiki]
 
* [https://ext4.wiki.kernel.org/ 公式 Ext4 wiki]
 
* Ext4 wiki の [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 ディスクレイアウト]
 
* Ext4 wiki の [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 ディスクレイアウト]
* LWN の [http://lwn.net/Articles/639427/ Ext4 暗号化] 記事
+
* LWN の [https://lwn.net/Articles/639427/ Ext4 暗号化] 記事
 
* ext4 暗号化のカーネルコミット [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]
 
* ext4 暗号化のカーネルコミット [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]
 
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs 変更履歴]
 
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs 変更履歴]

2024年1月22日 (月) 06:51時点における最新版

関連記事

Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました (ソース: Ext4 - Linux Kernel Newbies)

新しく ext4 ファイルシステムを作成

e2fsprogsインストール します。

パーティションをフォーマットするには次を実行:

# mkfs.ext4 /dev/partition
ヒント:
  • オプションについては mke2fs(8)man ページを見て下さい。/etc/mke2fs.conf を編集すればデフォルトのオプションを見たり設定できます。
  • サポートされている場合は、メタデータチェックサム を有効にすることをお勧めします。

Bytes-per-inode 比率

mke2fs はひとつの inode に対してディスク上に bytes-per-inode バイト分の領域を作成します。bytes-per-inode 比率を大きくすることで、作成される inode は少なくなります。詳しくは mke2fs(8) を参照。

新しいファイルやディレクトリ、シンボリックリンクなどを作成するとき inode が最低でもひとつは必要です。inode の数が少なすぎると、たとえディスクに空き容量があったとしてもファイルシステムにファイルを作成できなくなります。

ファイルシステムを作成した後に bytes-per-inode 比率や inode の数を変更することはできないため、ファイルが作成できなくなってしまわないように mkfs.ext4 はデフォルトでは比率を低くして inode に対して16384バイト (16Kb) を割り当てます。

しかしながら、1GB 以上のファイルが多数存在してファイルの平均容量がメガバイト級になるような使い方をしているパーティションの場合、inode の数が多すぎてファイルの作成では inode の限界に絶対に達しないということになります。

未使用の inode にも256バイト取られるのでディスク領域の無駄使いです (256バイトという数字は /etc/mke2fs.conf で設定されていますが変更してはいけません) 256バイトでも数百万の inode に換算するとギガバイト単位で容量を無駄にしていることになります。

dfdf -i を実行したときの {I}Use% の値を比較することでどれくらい無駄になっているのか確認できます:

$ df -h /home
Filesystem              Size    Used   Avail  Use%   Mounted on
/dev/mapper/lvm-home    115G    56G    59G    49%    /home
$ df -hi /home
Filesystem              Inodes  IUsed  IFree  IUse%  Mounted on
/dev/mapper/lvm-home    1.8M    1.1K   1.8M   1%     /home

bytes-per-inode 比率を変更するには、-T usage-type オプションを使用します。/etc/mke2fs.conf で定義されたタイプを使用してファイルシステムの利用方法を指定できます。largefilelargefile4 タイプは inode に対してそれぞれ 1 MiB と 4 MiB という大きな容量を割り当てます。以下のように使うことができます:

# mkfs.ext4 -T largefile /dev/device

-i オプションを使って bytes-per-inode 比率を直接設定することもできます。例えば -i 2097152 なら 2 MiB、-i 6291456 なら 6 MiB になります。

ヒント: 逆に、メールやニュースグループのアイテムなどで小さなファイルを何百万も保存するような使い方をする場合、news (ひとつの inode に4096バイトを割り当て) や small (inode 自体のサイズやブロックサイズも小さくする) などのタイプを使うこともできます。
警告: シンボリックリンクを大量に使用する場合は、bytes-per-inode 比率を低くして inode の数量は大きくしてください。シンボリックリンクを作成しても容量は取られませんが inode はひとつ消費されるので、ファイルシステムの inode をあっという間に使い切ってしまう可能性があります。

予約ブロック

デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザー用に予約されます。非特権のプロセスがファイルシステムに書き込めなくなってからも root が使用しているデーモンは正しく動作し続けることができます (詳しくは mke2fs(8) を参照)。

最近の大容量ディスクでは、パーティションを長期アーカイブとして使用したり、システム運用に重要でない場合(/homeなど)必要以上に大きな値を設定します。予約ブロックに関する ext4 開発者の Ted Ts'o の意見は このメール を、このトピックに関する一般的な背景は このスーパーユーザの回答 を参照してください。

パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:

  • パーティションがとても大きい (例えば 50GB 以上)
  • 長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない。

ext4 関連のユーティリティを使うときに -m オプションで予約ブロックの割合を指定できます。

ファイルシステムの作成時に予約ブロックを全く作成しないようにするには:

# mkfs.ext4 -m 0 /dev/device

パーティションの予約ブロックの割合を 1% に設定するには:

# tune2fs -m 1 /dev/device

予約ブロック数をギガバイト単位の絶対サイズに設定する場合は、-r を使用します。

# tune2fs -r $((ngigs * 1024**3 / blocksize)) /dev/device

blocksize はファイルシステムのブロックサイズをバイト単位で指定します。これはほとんどの場合 4096 ですが、念のため確認することができます。

# tune2fs -l /dev/device | egrep '^Block size:'
Block size:               4096

$(()) 構文は、数式展開のための構文です。この構文は bashzsh では動作しますが、fish では動作しません。fish では、このような構文になります。

# tune2fs -r (math 'ngigs * 1024^3 / blocksize') /dev/device

これらのコマンドは、現在マウントされているファイルシステムに適用することができ、変更は即座に反映されます。デバイス名は findmnt(8) で調べることができます。

# tune2fs -m 1 "$(findmnt -no SOURCE /the/mount/point)"

現在の予約ブロック数を問い合わせる場合。

# tune2fs -l /dev/mapper/proxima-root | egrep '^Reserved block count:'
Reserved block count:     2975334

これはブロック数なので、これにファイルシステムのブロックサイズを掛けて、バイト数やギガバイト数を得る必要があります。2975334 * 4096 / 1024**3 = 11.34 GiB です。

ext2/ext3 から ext4 に移行

ext2/ext3 パーティションを変換せずに ext4 としてマウント

理由

ext4 を完全に変換する案と ext2/ext3 をそのまま使用する案の折衷案として、既存の ext2/ext3 パーティションを ext4 としてマウントする方法があります。

利点:

  • 互換性 (ext2/ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext2/ext3 ドライバー)
  • パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [1][2] を見てください。

欠点:

  • ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)
ノート: ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。

方法

  1. /etc/fstab を編集して ext4 としてマウントしたいパーティションの 'type' を ext2/ext3 から ext4 に変更してください。
  2. 変更したパーティションを再マウントします。

ext2/ext3 パーティションを ext4 に変換

理由

ext4 の能力を活かすには、非可逆の変換をする必要があります。

利点:

  • パフォーマンスの向上と新機能 – 詳しくは [3][4] を見てください。

欠点:

  • /boot パーティションなど、静的なファイルしか存在しない場合、新機能を使うメリットはありません。さらに、ジャーナリングによって性能がむしろ落ちる可能性もあります。
  • 一方通行 (ext4 パーティションを ext2/ext3 に'ダウングレード'することはできません) ただしエクステントなどのオプションを有効にしなければ後方互換性を確保できます。

方法

以下の手順は カーネルドキュメントフォーラムスレッド から引用しています。

警告:
  • システムのルートパーティションを変換する場合、再起動時にフォールバックの initramfs が使えるようになっていることを確認してください。また、変換する前に /etc/mkinitcpio.confMODULES 行に ext4 を追加して mkinitcpio -p linux でデフォルトの initramfs を再作成してください。
  • 分割している /boot パーティションを変換する場合、ブートローダーが ext4 からの起動に対応していることを確認してください。
  1. バックアップを行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、Clonezilla が役に立ちます。
  2. /etc/fstab を編集して ext4 に変換するパーティションの 'type' を ext3 から ext4 に変換してください。
  3. (必要であれば) ライブメディアを起動します。e2fsprogs で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。
  4. パーティションがマウントされていないことを確認してください
  5. ext2 パーティションを変換する場合、まずは tune2fs -j /dev/sdxX を root で実行してジャーナルを追加して ext3 パーティションに変換してください。
  6. tune2fs -O extent,uninit_bg,dir_index /dev/sdxX を root で実行 (/dev/sdxX は変換するパーティションのパスに置き換えて下さい、例: /dev/sda1)。ext4 に変換されます (不可逆です)
  7. root で fsck -f /dev/sdxX を実行。
    • ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。fsck の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。-f オプションはファイルシステムに問題がない場合でも強制的にチェックを実行します。-p オプションを使用して自動修復させることもできます (オプションを使用しない場合、エラーに対して入力を求められます)
  8. 推奨: パーティションをマウントして e4defrag -c -v /dev/sdxX を実行。
    • ファイルシステムが ext4 に変換されても、変換前に書き込まれたファイルは ext4 のエクステントオプションを利用することができません。エクステントオプションは巨大なファイルの操作を高速化しフラグメンテーションを減らしてファイルシステムのチェック時間を短縮します。ext4 を活用するには、全てのファイルをディスクに再書き込みする必要があります。e4defrag を使うことで問題を解決できます。
  9. Arch Linux を再起動してください。

パフォーマンスの向上

E4rat

E4rat は ext4 ファイルシステム用に作られたプリロードアプリケーションです。E4rat は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。E4ratSSD を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。

アクセス時間の更新を無効にする

ext4 ファイルシステムは、ファイルが最後にアクセスされた日時に関する情報を記録し、その記録にはコストがかかります。 noatime オプションを使用すると、ファイルシステムのアクセスタイムスタンプは更新されません。

/etc/fstab
/dev/sda5    /    ext4    defaults,noatime    0    1

これを行うと、アクセス時間に依存するアプリケーションが破損します。考えられる解決策については、atimeoptions を参照してください。

コミット間隔の増加

commit オプションで長い時間遅延を提供することにより、データとメタデータの同期間隔を増やすことができます。

デフォルトの5秒は、電源が失われた場合、最新の5秒の作業が失われることを意味します。 5秒ごとにすべてのデータ/ジャーナルを物理メディアに完全に同期します。 ただし、ジャーナリングのおかげで、ファイルシステムが損傷することはありません。 次の fstab は、 commit の使用法を示しています。

/etc/fstab
/dev/sda5    /    ext4    defaults,noatime,commit=60    0    1

バリアとパフォーマンス

警告: バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。

Ext4 はデフォルトで書き込みバリアを有効にします。これにより、書き込みキャッシュの電源が失われた場合でも、ファイルシステムのメタデータがディスク上に正しく書き込まれ、順序付けされることが保証されます。これには、特に fsync を頻繁に使用するアプリケーションや、小さなファイルを多数作成および削除するアプリケーションの場合、パフォーマンスにコストが伴います。何らかの方法でバッテリーバックアップが行われている書き込みキャッシュを持つディスクの場合、バリアを無効にするとパフォーマンスが安全に向上する可能性があります。

バリアをオフにしたいときは /etc/fstab の変更したいファイルシステムに barrier=0 オプションを追加してください。例:

/etc/fstab
/dev/sda5    /    ext4    defaults,barrier=0    0    1

ジャーナリングの無効化

警告: ジャーナリングなしでファイルシステムを使用すると、停電やカーネルのロックアップなどの突然のマウント解除の場合にデータが失われる可能性があります。

ext4 を使用してジャーナルを無効にするには、マウントされていないディスクで次のコマンドを使用します。

# tune2fs -O "^has_journal" /dev/sdXN

外部ジャーナルを使用してパフォーマンスを最適化する

journal_async_commit マウントオプションを使用すると、ジャーナリングを大幅に高速化できます。

ノート: journal_async_commit マウントオプションは、デフォルトのマウントオプションである data=ordered と一緒に使うと動作しません。なので、明示的に ext4_device を別のモードでマウントしてください。ext4(5) § data= を見てください。

次のコマンドを使用して、ジャーナルで使用する専用デバイスをフォーマットできます:

# mke2fs -O journal_dev /dev/journal_device

journal_deviceext4_device のジャーナルとして割り当てるには、次を使用します。

# tune2fs -J device=/dev/journal_device /dev/ext4_device

同時に ext4_device に新しいファイルシステムを作成したい場合は、tune2fsmkfs.ext4 に置き換えることができます。

ヒントとテクニック

ファイルベースの暗号化を使用する

Linux 4.1 以降、ext4 はファイル暗号化をネイティブにサポートしています。 fscrypt の記事を参照してください。 暗号化はディレクトリレベルで適用され、ディレクトリごとに異なる暗号化キーを使用できます。 これは、ブロックデバイスレベルの暗号化である dm-crypt と、スタック暗号化ファイルシステムである eCryptfs の両方とは異なります。

メタデータチェックサムを有効化する

ファイルシステムが e2fsprogs で作成されている場合。1.43 (2016) 以降では、メタデータチェックサムがデフォルトで有効になっています。既存のファイルシステムを変換して、メタデータチェックサムのサポートを有効にすることができます。

CPU が SSE 4.2 をサポートしている場合、crc32c_intel が有効であることを確認してください。ハードウェアアクセラレーションによる CRC32C アルゴリズム [5] を有効にするために カーネルモジュール がロードされています。もしそうでなければ、代わりに crc32c_generic モジュールをロードしてください。

メタデータチェックサムの詳細については、ext4 wiki を参照してください。

ヒント: dumpe2fs を使用して、ファイルシステムで有効になっている機能を確認します。
# dumpe2fs -h /dev/path/to/disk
ノート: ファイルシステムをマウントしないでください。

まず、e2fsck を使用してパーティションをチェックし、最適化する必要があります。

# e2fsck -Df /dev/path/to/disk  

ファイルシステムを64ビットに変換します。

# resize2fs -b /dev/path/to/disk 

最後に、チェックサムサポートを有効にします。

# tune2fs -O metadata_csum /dev/path/to/disk

検証します:

# dumpe2fs -h /dev/path/to/disk | grep features:
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum

既存のファイルシステムで fast_commit を有効にする

5.10 カーネル以降、ext4 では fast_commit オプションを有効にすることで、パフォーマンスが向上する可能性があります。

# tune2fs -O fast_commit /dev/drivepartition

現在の構成または変更を確認するには:

# tune2fs -l /dev/drivepartition | grep features

大文字と小文字を区別しないモードを有効にする

Ext4 は大文字と小文字を区別しないモードで使用でき、Wine で実行されるアプリケーションやゲームのパフォーマンスを向上させることができます。この機能はファイルシステム全体には影響しません。大文字と小文字を区別しない属性が有効になっているディレクトリにのみ影響します。

まず、ファイルシステムでこの機能を有効にします:

# tune2fs -O casefold /dev/path/to/disk

これで、任意のディレクトリで大文字と小文字を区別しない属性を有効にできるようになります:

$ chattr +F /mnt/partition/case-insensitive-directory

参照