dumpe2fsとtune2fsを使用してLinuxの拡張(ext)ファイルシステムを調整する方法
ext2、ext3、およびext4ファイルシステムは、特にLinux用に設計された最も知られている使用されるファイルシステムの一部です。最初のもの、ext2(第2拡張ファイルシステム)は、その名前が示すように、3つの中で最も古いものです。ジャーナル機能を持たず、これがその後継であるext3に対する最大の利点です。2008年にリリースされたext4は、より新しいものであり、現在多くのLinuxディストリビューションでデフォルトのファイルシステムとなっています。
これらのファイルシステムで動作する一般的なユーティリティのセットは、e2fsprogsパッケージの一部です。このチュートリアルでは、情報を取得し、そのパラメータを調整するために、dumpe2fsとtune2fsの2つのユーティリティの使用方法を説明します。
このチュートリアルではあなたが学ぶことになる:
- dumpe2fsを使用してextファイルシステム情報を取得する方法
- ファイルシステムラベルの変更方法
- ファイルシステムの予約ブロックの量を変更する方法
- ファイルシステムUUIDを変更する方法
- ファイルシステム機能を有効または無効にする方法
- ファイルシステムのデフォルトマウントオプションを設定する方法
使用されるソフトウェア要件と規約
dumpe2fsを使ってextファイルシステムの情報を取得する
dumpe2fsユーティリティを使用すると、ext2/3/4ファイルシステムに関する情報を取得できます。行う必要があるのは、ユーティリティを呼び出し、ファイルシステムを含むデバイスのパスを引数として指定することだけです。これをどのように行うかの例を見て、コマンドが返す出力を分析してみましょう:
sudo dumpe2fs -h /dev/sda1
ご覧のように、-hオプションを使ってプログラムを呼び出しましたが、これは何のためですか?これが使用されると、dumpe2fsの動作は変更され、出力にはスーパーブロック情報のみが含まれるようになります:
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:
Last mounted on: /home
Filesystem UUID: e69e2748-b575-4f3d-90a0-ab162ef18319
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 983040
Block count: 3932160
Reserved block count: 196608
Free blocks: 3732039
Free inodes: 976679
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Sep 9 15:49:37 2021
Last mount time: Fri Sep 17 10:11:10 2021
Last write time: Fri Sep 17 10:11:10 2021
Mount count: 3
Maximum mount count: -1
Last checked: Thu Sep 9 15:49:37 2021
Check interval: 0 ()
Lifetime writes: 12 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
First orphan inode: 528161
Default directory hash: half_md4
Directory Hash Seed: 7cdeb137-67ce-41df-b1ba-b12f188a15c8
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x6ff4ea99
Journal features: journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size: 64M
Journal length: 16384
Journal sequence: 0x00026ef3
Journal start: 2857
Journal checksum type: crc32c
Journal checksum: 0x7864c03d
ファイルシステムに関する非常に重要な情報が表示されていることがわかります。たとえば、UUID、機能、およびデフォルトマウントオプションなどです。また、予約されたブロック数やその割合(デフォルトで5%)も観察できます。これらのブロックはスーパーユーザーのために予約されており、断片化を回避し、特権プロセスが引き続き機能することを保証するために役立ちます。非特権プロセスはそれらを使用することが禁止されています。
上記のほとんどすべての情報を含む出力は、tune2fsユーティリティを-lオプションで呼び出すことによって得ることができます。しかし、後者の主な用途はファイルシステムのパラメータを調整することです。次のセクションでは、その使用例をいくつか見ていきます。
tune2fsを使用して外部ファイルシステムのパラメータを調整する
extファイルシステムの機能を調整するために、tune2fsユーティリティを使用する必要があります。ファイルシステムの動作を変更するために調整できるいくつかのパラメーターがあります。ユーティリティの使い方のいくつかの例を見てみましょう。
ファイルシステムラベルの変更
拡張ファイルシステムのラベルを変更するには、tune2fsを-Lオプションで呼び出し、使用したい名前を引数として指定する必要があります。ラベルを設定することで、ファイルシステムを人間に優しい方法で参照できるようになります(ただし、一意性には依存できません)。以前取得した情報からもわかるように、/dev/sda1のファイルシステムには現在ラベルがありません。ラベルを設定するために(例えば「home」を使用する場合)、次のコマンドを実行する必要があります:
sudo tune2fs -L home /dev/sda1変更が適用されたことを確認するために、代わりに次のコマンドを使用できます:
sudo tune2fs -l /dev/sda1 | grep "volume name"
Filesystem volume name: home
ラベルが適用されると、新しいシンボリックリンクが /dev/disk/by-label ディレクトリ内にデバイスとして表示されるはずです。
予約ブロックの割合を変更する
前にも述べたように、すべてのextファイルシステムには、デフラグメンテーションを減らし、特権を持つユーザーのプロセスが書き込むために予約されたスペースを確保するために、ルートユーザーのために予約されたブロックデバイスの割合があります。予約されたブロックのデフォルトの割合は5%です。非常に大きなファイルシステムなどのいくつかのケースでは、この割合を減らして、あまり多くのスペースを割り当てないようにすることが望ましい場合があります。そのようなアクションを実行するために、tune2fsを-mオプションと共に実行し、使用する割合を引数として提供できます。次の例では、これを3%に減らします。
sudo tune2fs -m 3 /dev/sda1
[sudo] password for egdoc:
tune2fs 1.45.6 (20-Mar-2020)
Setting reserved blocks percentage to 3% (117964 blocks)
コマンドの出力は、変更が正しく適用されたことを確認し、予約されたブロックの数が現在117964(以前は196608でした)であり、これは合計の3%に相当します。代替手段として、-rオプションの引数として予約されたブロックの数を直接指定することもできます。
sudo tune2fs -r 117964 /dev/sda1
tune2fs 1.45.6 (20-Mar-2020)
Setting reserved blocks count to 117964
ファイルシステムのUUIDを変更する
UUIDは普遍的に一意な識別子です:それはハイフンで区切られた一連の16進数で構成され、ファイルシステムを参照する最も信頼できる方法を示します。現在の/dev/sda1ファイルシステムのUUIDはe69e2748-b575-4f3d-90a0-ab162ef18319です;これを変更するには、-Uオプションを使用してtune2fsを呼び出さなければなりません。このオプションを使用すると、私たちは:
- 手動で新しいUUIDを提供してください
clearを引数として使用して現在のUUIDをクリアしますrandomを引数として使用して、新しく生成されたUUIDを生成しますtimeを引数として使用して、時間ベースのUUIDを生成します。
ファイルシステムのUUIDを変更するには、それについてチェックを実施する必要があります。それを行うためには、まずファイルシステムをアンマウントしなければなりません。この場合、次のように実行します:
sudo umount /dev/sda1ファイルシステムのステータスを実際に確認するには、e2fsckユーティリティを使用できます:
sudo e2fsck /dev/sda1UUIDを手動で提供することは、特定の状況で役に立ちます。例えば、デバイスの再フォーマットを行う際に新しいファイルシステムを作成したいが、古いUUIDへのすべての参照を変更する必要を避けるために、そのUUIDを維持したいと想像してください。ファイルシステムのUUIDを手動で設定するには、次のコマンドを実行します:
sudo tune2fs -U e69e2748-b575-4f3d-90a0-ab162ef18319 /dev/sda1-U オプション引数として clear を使用すると、現在のファイルシステム UUID がクリアされます:
sudo tune2fs -U clear /dev/sda1代わりに、randomをオプション引数として使用すると、新しいランダムなUUIDが生成されます:
sudo tune2fs -U random /dev/sda1最後に、オプションに引数としてtimeを使用すると、現在の時刻に基づいた新しいUUIDが生成されます。
sudo tune2fs -U time /dev/sda1ファイルシステム機能の有効化または無効化
dumpe2fs または tune2fs -l の出力から、有効なファイルシステム機能のリストを取得できます。この場合は次のとおりです:
- ジャーナルを持っています
- 拡張属性
- inodeをリサイズする
- ディレクトリインデックス
- ファイルタイプ
- 回復が必要です
- 程度
- 64ビット
- フレックスBG
- スパーススーパーニューロン
- 大きなファイル
- 巨大なファイル
- ディレクトリのリンク数
- エクストラアイサイズ
- メタデータ総和
tune2fsユーティリティを使用することで、それらの機能のステータスを変更できます。どうすればいいのでしょうか?私たちがする必要があるのは、-Oオプションを付けてユーティリティを呼び出すことだけです。機能を無効にするには、それを^(キャレット)でプレフィックスする必要があります。例を見てみましょう。
ご存知のように、ext3 および ext4 ファイルシステムは ジャーナル 機能を持っています。ジャーナルの動作は、マウントオプションとして設定された data モードによって異なります。利用可能なモードは次の通りです:
- データ=順序付けられた
- データ=ジャーナル
- データ=書き戻し
data=ordered モードはデフォルトです。このモードでは、ファイルシステムのドキュメントに従って:
ext4は公式にジャーナルメタデータのみを記録しますが、データ変更に関連するメタデータ情報をデータブロックと論理的にグループ化し、トランザクションと呼ばれる1つの単位にまとめます。新しいメタデータをディスクに書き込む時が来ると、関連するデータブロックが最初に書き込まれます。一般的に、このモードはウィライトバックよりもわずかに遅く、しかしジャーナルモードよりは大幅に速く動作します。
data=writeback モードのときは、代わりに:
ext4はデータを全くジャーナルしません。このモードは、デフォルトモードにおけるXFS、JFS、ReiserFSと同様のジャーナリングレベルを提供します - メタデータジャーナリングです。クラッシュ+回復により、クラッシュの直前に書き込まれたファイルに不正確なデータが表示される可能性があります。このモードは通常、最も優れたext4のパフォーマンスを提供します。
最後に、data=journal モードがあります。これはデータとメタデータのジャーナリングの両方を提供するため、最も安全ですが、ファイルシステムを大幅に遅くします。
完全なデータとメタデータのジャーナリングを提供します。すべての新しいデータはまずジャーナルに書き込まれ、その後最終的な場所に書き込まれます。クラッシュが発生した場合、ジャーナルを再生することでデータとメタデータの整合性を保つことができます。このモードは最も遅いですが、データを同時にディスクから読み書きする必要がある場合には、他のすべてのモードを凌駕します。このモードを有効にすると、遅延割り当てとO_DIRECTサポートが無効になります。
特定の状況、例えばUSBペンドライブ上のext4ファイルシステムを使用する場合、ジャーナル機能を完全に無効にしたいことがあります。これを行うには、tune2fsを-Oオプションとともに呼び出し、has_journal機能の前にキャレットシンボルを付けます:
sudo tune2fs -O ^has_journal /dev/sda1このhas_journal機能は、ファイルシステムがアンマウントされているか、読み取り専用モードでマウントされている場合にのみ無効にできることに注意してください。この機能を再度有効にするには、次のように実行します:
sudo tune2fs -O has_journal /dev/sda1ファイルシステムのデフォルトマウントオプションを設定する
ファイルシステムのマウントオプションは/etc/fstabで指定できます:この方法で指定されたオプションはデフォルトのものを上書きしますが、デフォルトの設定方法はどのようになっていますか? extファイルシステムのデフォルトオプションを設定するには、tune2fsユーティリティを-o(小文字)オプションとともに呼び出さなければなりません。ファイルシステムの機能のケースで見たように、マウントオプションはその名前を引数として指定することで設定でき、キャレットでプレフィックスすることでクリアできます。前のセクションでは、ext4ファイルシステムのジャーナリングモードについて簡単に説明しました。デフォルトのモードはdata=orderedであることがわかりました。この設定を変更し、data=journalモードに設定したいとします。ここに実行するコマンドがあります:
sudo tune2fs -o journal_data /dev/sda1コマンドがエラーなく実行されると、ファイルシステムの情報に変更が反映されているのが確認できます。
sudo tune2fs -l /dev/sda1 | grep "Default mount options"
Default mount options: journal_data user_xattr acl
結論
この記事では、e2fsprogsパッケージに含まれる2つのユーティリティ、dumpe2fsとtune2fsの使い方を見ました。前者はファイルシステムのスーパーブロックとブロックグループに関する情報を取得するために使用され、後者は予約ブロックの量、デフォルトのマウントオプション、ファイルシステムUUIDなどのextファイルシステムのパラメータを調整するために使用されます。これらの操作をどのように実行するか、そして一般的に使用されるオプションについて見ました。これらのユーティリティについての完全なリストやより深い知識については、それらのマニュアルを参照してください!
