「Ext4」の版間の差分
(→メタデータチェックサムを有効化する: 翻訳) |
(同期) |
||
14行目: | 14行目: | ||
{{Related articles end}} |
{{Related articles end}} |
||
− | Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。 |
+ | Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました (ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies])。 |
− | |||
− | ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] |
||
== 新しく ext4 ファイルシステムを作成 == |
== 新しく ext4 ファイルシステムを作成 == |
||
24行目: | 22行目: | ||
# mkfs.ext4 /dev/''partition'' |
# mkfs.ext4 /dev/''partition'' |
||
− | {{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}} |
+ | {{Tip|オプションについては mkfs.ext4 の [[man ページ]]を見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}} |
+ | === Bytes-per-inode レシオ === |
||
− | デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。 |
||
+ | '''mke2fs''' はひとつの inode に対してディスク上に ''bytes-per-inode'' バイト分の領域を作成します。''bytes-per-inode'' レシオを大きくすることで、作成される inode は少なくなります。詳しくは {{ic|man mkfs.ext4}} を参照。 |
||
− | ==ext3 から ext4 に移行== |
||
+ | 新しいファイルやディレクトリ、シンボリックリンクなどを作成するとき [[Wikipedia:Inode|inode]] が最低でもひとつは必要です。inode の数が少なすぎると、たとえディスクに空き容量があったとしてもファイルシステムにファイルを作成できなくなります。 |
||
− | ===ext3 パーティションを変換せずに ext4 としてマウント=== |
||
+ | |||
+ | ファイルシステムを作成した後に bytes-per-inode レシオや inode の数を変更することはできないため、ファイルが作成できなくなってしまわないように {{ic|mkfs.ext4}} はデフォルトではレシオを低くして inode に対して16384バイト (16Kb) を割り当てます。 |
||
+ | |||
+ | しかしながら、1GB 以上のファイルが多数存在してファイルの平均容量がメガバイト級になるような使い方をしているパーティションの場合、inode の数が多すぎてファイルの作成では inode の限界に絶対に達しないということになります。 |
||
+ | |||
+ | 未使用の inode にも256バイト取られるのでディスク領域の無駄使いです (256バイトという数字は {{ic|/etc/mke2fs.conf}} で設定されていますが変更してはいけません)。256バイトでも数百万の inode に換算するとギガバイト単位で容量を無駄にしていることになります。 |
||
+ | |||
+ | {{ic|df}} と {{ic|df -i}} を実行したときの {{ic|{I}Use%}} の値を比較することでどれくらい無駄になっているのか確認できます: |
||
+ | |||
+ | {{hc|$ df -h /home| |
||
+ | Filesystem Size Used Avail '''Use%''' Mounted on |
||
+ | /dev/mapper/lvm-home 115G 56G 59G '''49%''' /home}} |
||
+ | {{hc|$ 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 レシオを変更するには、{{ic|-T ''usage-type''}} オプションを使用します。{{ic|/etc/mke2fs.conf}} で定義されたタイプを使用してファイルシステムの利用方法を指定できます。{{ic|largefile}} や {{ic|largefile4}} タイプは inode に対してそれぞれ 1 MiB と 4 MiB という大きな容量を割り当てます。以下のように使うことができます: |
||
+ | |||
+ | # mkfs.ext4 -T largefile /dev/''device'' |
||
+ | |||
+ | {{ic|-i}} オプションを使って bytes-per-inode レシオを直接設定することもできます。例えば {{ic|-i 2097152}} なら 2 MiB、{{ic|-i 6291456}} なら 6 MiB になります。 |
||
+ | |||
+ | {{Tip|逆に、メールやニュースグループのアイテムなどで小さなファイルを何百万も保存するような使い方をする場合、{{ic|news}} (ひとつの inode に4096バイトを割り当て) や {{ic|small}} (inode 自体のサイズやブロックサイズも小さくする) などのタイプを使うこともできます。}} |
||
+ | |||
+ | {{Warning|シンボリックリンクを大量に使用する場合、bytes-per-inode レシオを低くするときも inode の数は大きくしてください。シンボリックリンクを作成しても容量は取られませんが inode はひとつ消費されるので、ファイルシステムの inode をあっという間に使い切ってしまう可能性があります。}} |
||
+ | |||
+ | === 予約ブロック === |
||
+ | |||
+ | デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザー用に予約されます。非特権のプロセスがファイルシステムに書き込めなくなってからも root が使用しているデーモンは正しく動作し続けることができます (詳しくは {{ic|man mkfs.ext4}} を参照)。 |
||
+ | |||
+ | 最近の大容量ディスクでは、パーティションを長期保存用のアーカイブとして使う場合、5%は必要以上に大きい値となります。ext4 の開発者である Ted Ts'o による予約ブロックについての議論は [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見てください。 |
||
+ | |||
+ | パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません: |
||
+ | |||
+ | *パーティションがとても大きい (例えば 50GB 以上)。 |
||
+ | *長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない。 |
||
+ | |||
+ | ext4 関連のユーティリティを使うときに {{ic|-m}} オプションで予約ブロックの割合を指定できます。 |
||
+ | |||
+ | ファイルシステムの作成時に予約ブロックを全く作成しないようにするには: |
||
+ | |||
+ | # mkfs.ext4 -m 0 /dev/''device'' |
||
+ | |||
+ | パーティションの予約ブロックの割合を 1.0% に設定するには: |
||
+ | |||
+ | # tune2fs -m 1 /dev/''device'' |
||
+ | |||
+ | findmnt(8) を使うことでデバイスの名前を確認できます: |
||
+ | |||
+ | $ findmnt ''/the/mount/point'' |
||
+ | |||
+ | ==ext2/ext3 から ext4 に移行== |
||
+ | |||
+ | ===ext2/ext3 パーティションを変換せずに ext4 としてマウント=== |
||
====理由==== |
====理由==== |
||
− | ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。 |
+ | ext4 を完全に変換する案と ext2/ext3 をそのまま使用する案の折衷案として、既存の ext2/ext3 パーティションを ext4 としてマウントする方法があります。 |
'''利点:''' |
'''利点:''' |
||
− | * 互換性 (ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー) |
+ | * 互換性 (ext2/ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext2/ext3 ドライバー)。 |
− | * パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [http://kernelnewbies.org/Ext4 |
+ | * パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [http://kernelnewbies.org/Ext4] や [http://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_fujita.pdf] を見てください。 |
'''欠点:''' |
'''欠点:''' |
||
47行目: | 99行目: | ||
====方法==== |
====方法==== |
||
− | # {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの 'type' を ext3 から ext4 に変更してください。 |
+ | # {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの 'type' を ext2/ext3 から ext4 に変更してください。 |
# 変更したパーティションを再マウントします。 |
# 変更したパーティションを再マウントします。 |
||
− | ===ext3 パーティションを ext4 に変換=== |
+ | ===ext2/ext3 パーティションを ext4 に変換=== |
====理由==== |
====理由==== |
||
57行目: | 109行目: | ||
'''利点:''' |
'''利点:''' |
||
− | * パフォーマンスの向上と新機能 – 詳しくは [http://kernelnewbies.org/Ext4 |
+ | * パフォーマンスの向上と新機能 – 詳しくは [http://kernelnewbies.org/Ext4] や [http://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_fujita.pdf] を見てください。 |
'''欠点:''' |
'''欠点:''' |
||
+ | * {{ic|/boot}} パーティションなど、静的なファイルしか存在しない場合、新機能を使うメリットはありません。さらに、ジャーナリングによって性能がむしろ落ちる可能性もあります。 |
||
− | * 一方通行 (ext4 パーティションを ext3 に'ダウングレード'することはできません) |
||
+ | * 一方通行 (ext4 パーティションを ext2/ext3 に'ダウングレード'することはできません)。ただしエクステントなどのオプションを有効にしなければ後方互換性を確保できます。 |
||
====方法==== |
====方法==== |
||
− | 以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。 |
+ | 以下の手順は [http://ext4.wiki.kernel.org/index.php/Ext4_Howto カーネルドキュメント] と [https://bbs.archlinux.org/viewtopic.php?id=61602 フォーラムスレッド] から引用しています。 |
+ | |||
− | {{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}} |
||
+ | {{Warning| |
||
+ | * システムのルートパーティションを変換する場合、再起動時にフォールバックの initramfs が使えるようになっていることを確認してください。また、変換する前に {{ic|/etc/mkinitcpio.conf}} の [[Mkinitcpio#MODULES|MODULES]] 行に {{ic|ext4}} を追加して {{Ic|mkinitcpio -p linux}} でデフォルトの initramfs を再作成してください。 |
||
+ | * 分割している {{ic|/boot}} パーティションを変換する場合、[[ブートローダー]]が ext4 からの起動に対応していることを確認してください。}} |
||
# '''[[バックアッププログラム|バックアップ]]'''を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。 |
# '''[[バックアッププログラム|バックアップ]]'''を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。 |
||
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの 'type' を ext3 から ext4 に変換してください。 |
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの 'type' を ext3 から ext4 に変換してください。 |
||
− | # (必要であれば) ライブメディアを起動します。{{ |
+ | # (必要であれば) ライブメディアを起動します。{{Pkg|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。 |
# パーティションがマウントされていないことを確認してください |
# パーティションがマウントされていないことを確認してください |
||
− | # {{ |
+ | # 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|fsck -f /dev/sdxX}} を実行 |
||
− | # |
+ | # root で {{Ic|fsck -f /dev/sdxX}} を実行。 |
+ | #* ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。''fsck'' の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。{{ic|-f}} オプションはファイルシステムに問題がない場合でも強制的にチェックを実行します。{{ic|-p}} オプションを使用して自動修復させることもできます (オプションを使用しない場合、エラーに対して入力を求められます)。 |
||
− | # Arch Linux を再起動してください |
||
+ | # 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行。 |
||
− | |||
+ | #* ファイルシステムが ext4 に変換されても、変換前に書き込まれたファイルは ext4 のエクステントオプションを利用することができません。エクステントオプションは巨大なファイルの操作を高速化しフラグメンテーションを減らしてファイルシステムのチェック時間を短縮します。ext4 を活用するには、全てのファイルをディスクに再書き込みする必要があります。''e4defrag'' を使うことで問題を解決できます。 |
||
− | {{Note|The user '''MUST''' fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. '''It WILL find checksum errors in the group descriptors''' -- this is expected. The '-f' parameter asks fsck to force checking even if the file system seems clean. The '-p' parameter asks fsck to 'automatically repair' (otherwise, the user will be asked for input for each error). |
||
+ | # Arch Linux を再起動してください。 |
||
− | You may need to run fsck -f rather than fsck -fp.}} |
||
− | |||
− | {{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}} |
||
− | {{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、'fallback' の initial ramdisk を使用して再起動して、'default' の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}} |
||
== ファイルベースの暗号化を利用する == |
== ファイルベースの暗号化を利用する == |
||
− | Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化 |
+ | Linux 4.1 以降、ext4 はファイルベースの暗号化をサポートしています。暗号化したディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットがすべて暗号化されます。暗号鍵はカーネルキーリングに格納されます。機能の詳細、実装状態の概要、カーネル 4.1 での実践的なテスト結果などが [http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslab のブログ記事] に書かれています。 |
− | {{ic|CONFIG_EXT4_ENCRYPTION}}オプションが有効になっている |
+ | 使用しているカーネルで {{ic|CONFIG_EXT4_ENCRYPTION}} オプションが有効になっていること、{{Pkg|e2fsprogs}} パッケージがバージョン 1.43 以上であることを確認してください。 |
− | 次に、ファイルシステムが |
+ | 次に、ファイルシステムが使用しているブロックサイズが暗号化できるブロックサイズであることを確認します: |
− | {{hc|# tune2fs -l /dev/''device'' {{!}} grep 'Block size'| |
+ | {{hc|# tune2fs -l /dev/''device'' {{!}} grep 'Block size'|Block size: 4096}} |
− | Block size: 4096 |
||
− | }} |
||
− | {{hc|# getconf PAGE_SIZE| |
+ | {{hc|# getconf PAGE_SIZE|4096}} |
− | 4096 |
||
− | }} |
||
− | + | 上記の値が同じでない場合、あなたのファイルシステムは暗号化できません。その場合、'''絶対に以下の操作を行わないでください'''。 |
|
− | + | ファイルシステムの暗号化機能フラグを有効化: |
|
# tune2fs -O encrypt /dev/''device'' |
# tune2fs -O encrypt /dev/''device'' |
||
− | {{Warning|暗号化機能フラグを有効にすると、4.1 |
+ | {{Warning|暗号化機能フラグを有効にすると、4.1 未満のカーネルはファイルシステムをマウントできなくなります。}} |
− | + | 暗号化するディレクトリを作成します: |
|
# mkdir /encrypted |
# mkdir /encrypted |
||
− | 暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリに |
+ | 暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定 (または「暗号化ポリシー」) は、新しいファイルとサブディレクトリに継承されます。既存のファイルの暗号化はまだサポートされていません。 |
− | + | そして新しい鍵を生成してキーリングに追加します。キーリングをフラッシュする (再起動する) たびに、この手順を繰り返す必要があります: |
|
# e4crypt add_key |
# e4crypt add_key |
||
118行目: | 167行目: | ||
Added key with descriptor [f88747555a6115f5] |
Added key with descriptor [f88747555a6115f5] |
||
− | {{Warning|パスフレーズを忘れた場合、ファイルを |
+ | {{Warning|パスフレーズを忘れた場合、ファイルを復号化することができなくなります。パスフレーズを設定した後にパスフレーズを変更することもできません。}} |
− | {{Note|パスフレーズに対する[[Wikipedia: |
+ | {{Note|パスフレーズに対する[[Wikipedia:ja:辞書攻撃|辞書攻撃]]を防ぐために、ランダムな[[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4 ファイルシステムのスーパーブロックに保存されます。パスフレーズとソルトの''両方''を使用して、暗号鍵が生成されます。暗号化を有効にした ext4 ファイルシステムを複数マウントしている場合、{{ic|e4crypt add_key}} はファイルシステムごとにひとつずつ複数の鍵を追加します。鍵とファイルシステムは交換可能ですが、特定のファイルシステムに対しては、そのファイルシステムのソルトを使用する鍵だけを使うのが賢明でしょう。別の鍵を使用した場合、ファイルシステム B がアンマウントされている状態でファイルシステム A のファイルを復号化することができなくなる危険があります。また、{{ic|e4crypt add_key}} の {{ic|-S}} オプションを使用してソルトを指定することもできます。}} |
− | + | あなたの鍵の記述子が分かったら鍵がセッションキーリングに含まれていることを確認してください: |
|
# keyctl show |
# keyctl show |
||
129行目: | 178行目: | ||
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5 |
176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5 |
||
− | + | 最後にディレクトリに暗号化ポリシーを設定します (上記の鍵の記述子を使ってください): |
|
# e4crypt set_policy f88747555a6115f5 /encrypted |
# e4crypt set_policy f88747555a6115f5 /encrypted |
||
− | 以上です。キーリングに |
+ | 以上です。キーリングに鍵を追加せずにディレクトリにアクセスしても、ファイル名とその内容は暗号化された状態で表示されます。 |
==Tips and tricks== |
==Tips and tricks== |
||
− | ===予約ブロックの削除=== |
||
− | |||
− | デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません: |
||
− | |||
− | *パーティションがとても大きい (例えば 50GB 以上) |
||
− | *長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない |
||
− | |||
− | 予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します: |
||
− | |||
− | # tune2fs -m 1.0 /dev/sdXY |
||
− | |||
− | findmnt(8) を使うことでデバイスの名前を確認できます: |
||
− | |||
− | $ findmnt ''/the/mount/point'' |
||
=== E4rat === |
=== E4rat === |
||
173行目: | 208行目: | ||
== メタデータチェックサムを有効化する == |
== メタデータチェックサムを有効化する == |
||
− | + | ファイルシステムが新しい場合でも既存の場合でも、メタデータチェックサムを有効にするにはカーネルモジュールをロードする必要があります。 |
|
− | CPUがSSE 4.2をサポートしている場合は、ハードウェアアクセラレーション |
+ | あなたの使用している CPU が SSE 4.2 をサポートしている場合は、{{Ic|crc32c_intel}} カーネルモジュールをロードしてください。ハードウェアアクセラレーションによる CRC32C アルゴリズムが有効になります。サポートしていない場合は {{Ic|crc32c_generic}} モジュールをロードしてください。 |
− | + | 対象がルートファイルシステムの場合は {{Ic|/etc/mkinitcpio.conf}} に {{Ic|crc32c_}} モジュールを追加しなくてはなりません: |
|
− | + | MODULES="... crc32c_intel crc32c_generic" |
|
− | + | 追加したら initramfs を再生成してください。詳しくは [[Mkinitcpio#イメージ作成とアクティベーション]]を参照。 |
|
− | + | メタデータチェックサムを有効にする方法は以下の2つのセクションで説明しています。いずれの場合もファイルシステムはマウントされていない状態でなければなりません。 |
|
− | メタデータチェックサム |
+ | メタデータチェックサムに関する詳細は [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki] を読んでください。 |
− | [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki]. |
||
=== 新しいファイルシステム === |
=== 新しいファイルシステム === |
||
− | 新しいファイルシステム |
+ | 新しいファイルシステムで ext4 のメタデータチェックサムを有効化する場合 {{Ic|e2fsprogs}} が 1.43 以上であることを確認してください。 |
− | そ |
+ | そして以下のようにファイルシステムを作成します: |
# mkfs.ext4 ''/dev/path/to/disk'' |
# mkfs.ext4 ''/dev/path/to/disk'' |
||
− | {{Ic|metadata_csum}}と{{Ic|64bit}}オプションはデフォルトで有効になります。 |
+ | {{Ic |metadata_csum}} と {{Ic|64bit}} オプションはデフォルトで有効になります。 |
− | ファイルシステムは通常 |
+ | その後ファイルシステムは通常通りにマウントできます。 |
=== 既存のファイルシステム === |
=== 既存のファイルシステム === |
||
− | 既存のext4ファイルシステムでサ |
+ | 既存の ext4 ファイルシステムでメタデータチェックサムを有効化するには以下を実行してください。 |
− | + | 有効化するにはパーティションがアンマウントされている状態でなければならないため、ルートパーティションで有効化したい場合、USB ライブディストリを起動する必要があります。 |
|
− | まず |
+ | まずは以下のコマンドを実行してパーティションのファイルシステムチェックと最適化を行ってください: |
# e2fsck -Df ''/dev/path/to/disk'' |
# e2fsck -Df ''/dev/path/to/disk'' |
||
− | そ |
+ | そしてファイルシステムを64ビットに変換します: |
# resize2fs -b ''/dev/path/to/disk'' |
# resize2fs -b ''/dev/path/to/disk'' |
||
− | 最後にチェックサムを追加 |
+ | 最後にチェックサムを追加してください: |
# tune2fs -O metadata_csum ''/dev/path/to/disk'' |
# tune2fs -O metadata_csum ''/dev/path/to/disk'' |
||
− | ファイルシステムは通常 |
+ | その後ファイルシステムは通常通りにマウントできます。 |
− | + | 機能が有効になっているかどうかは以下のコマンドで確認できます: |
|
# dumpe2fs ''/dev/path/to/disk'' |
# dumpe2fs ''/dev/path/to/disk'' |
||
226行目: | 260行目: | ||
=== パフォーマンスへの影響 === |
=== パフォーマンスへの影響 === |
||
− | + | [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums#Benchmarking こちらのベンチマーク] によれば intel モジュールは generic モジュールよりも平均で10倍、最大で20倍高速です。 |
|
== 参照 == |
== 参照 == |
||
− | * [https://ext4.wiki.kernel.org/ |
+ | * [https://ext4.wiki.kernel.org/ 公式 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 ディスクレイアウト] |
− | * [http://lwn.net/Articles/639427/ Ext4 |
+ | * LWN の [http://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] |
− | * [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs |
+ | * [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs 変更履歴] |
− | * [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 |
+ | * [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 メタデータチェックサム] |
2016年11月23日 (水) 19:18時点における版
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました (ソース: Ext4 - Linux Kernel Newbies)。
目次
新しく ext4 ファイルシステムを作成
パーティションをフォーマットするには次を実行:
# mkfs.ext4 /dev/partition
Bytes-per-inode レシオ
mke2fs はひとつの inode に対してディスク上に bytes-per-inode バイト分の領域を作成します。bytes-per-inode レシオを大きくすることで、作成される inode は少なくなります。詳しくは man mkfs.ext4
を参照。
新しいファイルやディレクトリ、シンボリックリンクなどを作成するとき inode が最低でもひとつは必要です。inode の数が少なすぎると、たとえディスクに空き容量があったとしてもファイルシステムにファイルを作成できなくなります。
ファイルシステムを作成した後に bytes-per-inode レシオや inode の数を変更することはできないため、ファイルが作成できなくなってしまわないように mkfs.ext4
はデフォルトではレシオを低くして inode に対して16384バイト (16Kb) を割り当てます。
しかしながら、1GB 以上のファイルが多数存在してファイルの平均容量がメガバイト級になるような使い方をしているパーティションの場合、inode の数が多すぎてファイルの作成では inode の限界に絶対に達しないということになります。
未使用の inode にも256バイト取られるのでディスク領域の無駄使いです (256バイトという数字は /etc/mke2fs.conf
で設定されていますが変更してはいけません)。256バイトでも数百万の inode に換算するとギガバイト単位で容量を無駄にしていることになります。
df
と df -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
で定義されたタイプを使用してファイルシステムの利用方法を指定できます。largefile
や largefile4
タイプは inode に対してそれぞれ 1 MiB と 4 MiB という大きな容量を割り当てます。以下のように使うことができます:
# mkfs.ext4 -T largefile /dev/device
-i
オプションを使って bytes-per-inode レシオを直接設定することもできます。例えば -i 2097152
なら 2 MiB、-i 6291456
なら 6 MiB になります。
予約ブロック
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザー用に予約されます。非特権のプロセスがファイルシステムに書き込めなくなってからも root が使用しているデーモンは正しく動作し続けることができます (詳しくは man mkfs.ext4
を参照)。
最近の大容量ディスクでは、パーティションを長期保存用のアーカイブとして使う場合、5%は必要以上に大きい値となります。ext4 の開発者である Ted Ts'o による予約ブロックについての議論は このメール を見てください。
パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:
- パーティションがとても大きい (例えば 50GB 以上)。
- 長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない。
ext4 関連のユーティリティを使うときに -m
オプションで予約ブロックの割合を指定できます。
ファイルシステムの作成時に予約ブロックを全く作成しないようにするには:
# mkfs.ext4 -m 0 /dev/device
パーティションの予約ブロックの割合を 1.0% に設定するには:
# tune2fs -m 1 /dev/device
findmnt(8) を使うことでデバイスの名前を確認できます:
$ findmnt /the/mount/point
ext2/ext3 から ext4 に移行
ext2/ext3 パーティションを変換せずに ext4 としてマウント
理由
ext4 を完全に変換する案と ext2/ext3 をそのまま使用する案の折衷案として、既存の ext2/ext3 パーティションを ext4 としてマウントする方法があります。
利点:
- 互換性 (ext2/ext3 としてファイルシステムをマウントできます) – ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext2/ext3 ドライバー)。
- パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) – 詳しくは [1] や [2] を見てください。
欠点:
- ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)
方法
/etc/fstab
を編集して ext4 としてマウントしたいパーティションの 'type' を ext2/ext3 から ext4 に変更してください。- 変更したパーティションを再マウントします。
ext2/ext3 パーティションを ext4 に変換
理由
ext4 の能力を活かすには、非可逆の変換をする必要があります。
利点:
欠点:
/boot
パーティションなど、静的なファイルしか存在しない場合、新機能を使うメリットはありません。さらに、ジャーナリングによって性能がむしろ落ちる可能性もあります。- 一方通行 (ext4 パーティションを ext2/ext3 に'ダウングレード'することはできません)。ただしエクステントなどのオプションを有効にしなければ後方互換性を確保できます。
方法
以下の手順は カーネルドキュメント と フォーラムスレッド から引用しています。
- バックアップを行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、Clonezilla が役に立ちます。
/etc/fstab
を編集して ext4 に変換するパーティションの 'type' を ext3 から ext4 に変換してください。- (必要であれば) ライブメディアを起動します。e2fsprogs で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。
- パーティションがマウントされていないことを確認してください
- ext2 パーティションを変換する場合、まずは
tune2fs -j /dev/sdxX
を root で実行してジャーナルを追加して ext3 パーティションに変換してください。 tune2fs -O extent,uninit_bg,dir_index /dev/sdxX
を root で実行 (/dev/sdxX
は変換するパーティションのパスに置き換えて下さい、例:/dev/sda1
)。ext4 に変換されます (不可逆です)。- root で
fsck -f /dev/sdxX
を実行。- ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。fsck の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。
-f
オプションはファイルシステムに問題がない場合でも強制的にチェックを実行します。-p
オプションを使用して自動修復させることもできます (オプションを使用しない場合、エラーに対して入力を求められます)。
- ファイルシステムのチェックを実行しないとファイルシステムを読み込めなくなります。fsck の実行は必須です。グループ記述子のチェックサムエラーが発見されます。これは仕様通りの動作です。
- 推奨: パーティションをマウントして
e4defrag -c -v /dev/sdxX
を実行。- ファイルシステムが ext4 に変換されても、変換前に書き込まれたファイルは ext4 のエクステントオプションを利用することができません。エクステントオプションは巨大なファイルの操作を高速化しフラグメンテーションを減らしてファイルシステムのチェック時間を短縮します。ext4 を活用するには、全てのファイルをディスクに再書き込みする必要があります。e4defrag を使うことで問題を解決できます。
- Arch Linux を再起動してください。
ファイルベースの暗号化を利用する
Linux 4.1 以降、ext4 はファイルベースの暗号化をサポートしています。暗号化したディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットがすべて暗号化されます。暗号鍵はカーネルキーリングに格納されます。機能の詳細、実装状態の概要、カーネル 4.1 での実践的なテスト結果などが Quarkslab のブログ記事 に書かれています。
使用しているカーネルで CONFIG_EXT4_ENCRYPTION
オプションが有効になっていること、e2fsprogs パッケージがバージョン 1.43 以上であることを確認してください。
次に、ファイルシステムが使用しているブロックサイズが暗号化できるブロックサイズであることを確認します:
# tune2fs -l /dev/device | grep 'Block size'
Block size: 4096
# getconf PAGE_SIZE
4096
上記の値が同じでない場合、あなたのファイルシステムは暗号化できません。その場合、絶対に以下の操作を行わないでください。
ファイルシステムの暗号化機能フラグを有効化:
# tune2fs -O encrypt /dev/device
暗号化するディレクトリを作成します:
# mkdir /encrypted
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定 (または「暗号化ポリシー」) は、新しいファイルとサブディレクトリに継承されます。既存のファイルの暗号化はまだサポートされていません。
そして新しい鍵を生成してキーリングに追加します。キーリングをフラッシュする (再起動する) たびに、この手順を繰り返す必要があります:
# e4crypt add_key Enter passphrase (echo disabled): Added key with descriptor [f88747555a6115f5]
あなたの鍵の記述子が分かったら鍵がセッションキーリングに含まれていることを確認してください:
# keyctl show Session Keyring 1021618178 --alswrv 1000 1000 keyring: _ses 176349519 --alsw-v 1000 1000 \_ logon: ext4:f88747555a6115f5
最後にディレクトリに暗号化ポリシーを設定します (上記の鍵の記述子を使ってください):
# e4crypt set_policy f88747555a6115f5 /encrypted
以上です。キーリングに鍵を追加せずにディレクトリにアクセスしても、ファイル名とその内容は暗号化された状態で表示されます。
Tips and tricks
E4rat
E4rat は ext4 ファイルシステム用に作られたプリロードアプリケーションです。E4rat は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。E4rat は SSD を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。
バリアとパフォーマンス
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [5]。
多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。
書き込みバリアの送信は、マウントオプションに barrier=0
(ext3, ext4, reiserfs の場合) や nobarrier
(XFS) を設定することで無効化できます [6]。
バリアをオフにしたいときは /etc/fstab
の変更したいファイルシステムに barrier=0
オプションを追加してください。例:
/etc/fstab
/dev/sda5 / ext4 noatime,barrier=0 0 1
メタデータチェックサムを有効化する
ファイルシステムが新しい場合でも既存の場合でも、メタデータチェックサムを有効にするにはカーネルモジュールをロードする必要があります。
あなたの使用している CPU が SSE 4.2 をサポートしている場合は、crc32c_intel
カーネルモジュールをロードしてください。ハードウェアアクセラレーションによる CRC32C アルゴリズムが有効になります。サポートしていない場合は crc32c_generic
モジュールをロードしてください。
対象がルートファイルシステムの場合は /etc/mkinitcpio.conf
に crc32c_
モジュールを追加しなくてはなりません:
MODULES="... crc32c_intel crc32c_generic"
追加したら initramfs を再生成してください。詳しくは Mkinitcpio#イメージ作成とアクティベーションを参照。
メタデータチェックサムを有効にする方法は以下の2つのセクションで説明しています。いずれの場合もファイルシステムはマウントされていない状態でなければなりません。
メタデータチェックサムに関する詳細は ext4 wiki を読んでください。
新しいファイルシステム
新しいファイルシステムで ext4 のメタデータチェックサムを有効化する場合 e2fsprogs
が 1.43 以上であることを確認してください。
そして以下のようにファイルシステムを作成します:
# mkfs.ext4 /dev/path/to/disk
metadata_csum
と 64bit
オプションはデフォルトで有効になります。
その後ファイルシステムは通常通りにマウントできます。
既存のファイルシステム
既存の ext4 ファイルシステムでメタデータチェックサムを有効化するには以下を実行してください。
有効化するにはパーティションがアンマウントされている状態でなければならないため、ルートパーティションで有効化したい場合、USB ライブディストリを起動する必要があります。
まずは以下のコマンドを実行してパーティションのファイルシステムチェックと最適化を行ってください:
# e2fsck -Df /dev/path/to/disk
そしてファイルシステムを64ビットに変換します:
# resize2fs -b /dev/path/to/disk
最後にチェックサムを追加してください:
# tune2fs -O metadata_csum /dev/path/to/disk
その後ファイルシステムは通常通りにマウントできます。
機能が有効になっているかどうかは以下のコマンドで確認できます:
# dumpe2fs /dev/path/to/disk
パフォーマンスへの影響
こちらのベンチマーク によれば intel モジュールは generic モジュールよりも平均で10倍、最大で20倍高速です。
参照
- 公式 Ext4 wiki
- Ext4 wiki の Ext4 ディスクレイアウト
- LWN の Ext4 暗号化 記事
- ext4 暗号化のカーネルコミット [7] [8]
- e2fsprogs 変更履歴
- Ext4 メタデータチェックサム