web-dev-qa-db-ja.com

ext3をext4に変換してe4defragをサポートする方法は?

非常に古い2つのext3ファイルシステムがあり、長い間99%使用されていたため、断片化が発生していました。また、ダイナミックディスクイメージやその他の断片化を引き起こすワークロードでVMを実行するために使用されています。

最近、 here の指示を使用して、具体的には次を実行して、ファイルシステムをext4に変換しました。

# tune2fs -O extents,uninit_bg,dir_index /dev/DEV
# e2fsck -fDC0 /dev/DEV

ただし、ファイルシステムはまだe4defragをサポートしていません:

Failed to defrag with EXT4_IOC_MOVE_EXT ioctl:Operation not supported   [ NG ]

tune2fsコマンドにはいくつかのオプションがないと推測していますが、グーグルはそれが何であるかを理解する助けにはなりませんでした。

4
otus

同じ問題がありました。私は答えがあったこれを見つけました:

https://wiki.archlinux.org/index.php/Ext4#Migrating_files_to_extents

エクステントへのファイルの移行

警告:ローカルでクローンされたMercurialリポジトリでは、リポジトリが破損するため、次の方法を使用しないでください。また、ファイルシステム内の他のハードリンクが破損する可能性があります。

ファイルシステムは現在ext4に変換されていますが、変換前に書き込まれたすべてのファイルは、ext4の新しいエクステントをまだ活用していないため、大規模ファイルのパフォーマンスが向上し、断片化とファイルシステムのチェック時間が短縮されます。 ext4を完全に活用するには、すべてのファイルをディスク上で書き換える必要があります。 e4defragというユーティリティが開発されており、このタスクを処理します。ただし、まだ生産の準備ができていません。

幸いなことに、chattrプログラムを使用することができます。これにより、カーネルはエクステントを使用してファイルを書き換えます。 1つのパーティションのすべてのファイルとディレクトリでこのコマンドを実行できます(たとえば、/homeが専用パーティションにある場合):(rootとして実行する必要があります)

find /home -xdev -type f -print0 | xargs -0 chattr +e
find /home -xdev -type d -print0 | xargs -0 chattr +e

最初に少数のファイルでこのコマンドをテストし、すべてが順調に進んでいるかどうかを確認することをお勧めします。変換後にファイルシステムをチェックすることも有用です。

lsattrコマンドを使用すると、ファイルがエクステントを使用していることを確認できます。リストされたファイルの属性リストに文字「e」が表示されます。

-

注:e4defragは、エクステントを使用するようにファイルを変換できると想定していました。失敗したioctlはそのようなことをしているので、なぜ機能しないのか少し混乱していますが、chattr +eは私のために機能しました。 chattr +eファイルを作成したら、e4defragを使用できます。念のためバックアップなどがあることを確認してください(これは安全だと思っていたでしょうが、あなたは決して知りません-ハードリンクに関する警告はここにありますが、ハードリンクに関する既知の問題への他の参照は見つかりません)。

4
Jools