2011年04月17日
e2undo
e2undoコマンドの使い方について説明します(kenrel: 2.6.39-rc1 e2fsprogs: 1.41.12)。
e2fsprogsパッケージに含まれており、ext2/ext3/ext4に対して実行できます。
e2undoコマンドは実行したコマンドをlogからリプレイします。
今回はtune2fsコマンドでのinodeサイズの変更を取り消す方法を例とします。
inodeサイズはmke2fsコマンドでFSを作成する際に指定出来ます。
通常、ext2/ext3では128byteで管理されます。
一方、ext4は256byteがデフォルトとなっています。
ext4ではnano秒単位で時間を保持出来る様になっており、その情報がinode内に格納する
関係で128byteより大きな値になっています。
また32bitで管理するその他エントリの拡張にも利用されます。
それ以外のinodeの余り領域には、ACLや拡張属性(xattr)の情報が格納されます。
128byte時は外部に取得したブロックにこれらの情報が格納されます。
そのため、inode内部に保持した方が、inode外のブロック読み込みが発生しないため
若干のアクセス性能の向上が見込めます。
ただ、体感として違いがわかるには大量のアクセスが必要となります。
ext2/ext3でも128byteより大きなinodeサイズを指定出来ますが、
ACL, xattrを使わない限りメリットはありません。
むしろ、inodeが小さい方がファイルの作成時間が短くてすみますので、
ext2/ext3ではinodeサイズは128byteで運用すべきだと思います。
1.ログの出力先を作成する
まずはログファイルの出力先として、/var/lib/e2fsprogsを作成します。
[root@localhost /]# mkdir -p /var/lib/e2fsprogs
2. ext4の作成
ext4をinodeサイズ128byteで作成します。
e2fsprogs: 1.41.12のtune2fsではflex_bgが有効である場合、
inodeサイズの変更をサポートしていないため、flex_bgをoffにします(将来的にはサポートされるようになるかもしれません)。
[root@localhost /]# mkfs -t ext4 -I 128 -O ^flex_bg /dev/sda8
inodeサイズが128byteで出来ていることが確認できます。
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 128
3. inodeサイズを256byteにする
tune2fsコマンドでinodeサイズを変更します。
e2undo用のログファイルが作成された旨が出力されます。
※出力先のディレクトリがない場合は出力されません
[root@localhost /]# tune2fs -I 256 /dev/sda8
tune2fs 1.41.14 (22-Dec-2010)
To undo the tune2fs operation please run the command
e2undo /var/lib/e2fsprogs/tune2fs-sda8.e2undo /dev/sda8
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 256
4. e2undoでもとに戻す
e2undoコマンドにログを指定し、inodeサイズをもとに戻します。
[root@localhost /]# e2undo /var/lib/e2fsprogs/tune2fs-sda8.e2undo /dev/sda8 | more
Replayed transaction of size 1024 at location 919673
Replayed transaction of size 1024 at location 919563
Replayed transaction of size 1024 at location 919518
Replayed transaction of size 1024 at location 919449
Replayed transaction of size 1024 at location 919339
...
e2undoでリプレイした結果inodeサイズが128byteにもどっています。
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 128
余談ですが、一度大きく拡張したinodeサイズは通常元に戻せません。
e2undoを実行できるログがあるときのみできます。
そのため、inodeサイズを変更する際には万が一のためにログを出力出来るようにしておくべきです。
[root@localhost /]# tune2fs -I 128 /dev/sda8
tune2fs 1.41.14 (22-Dec-2010)
Shrinking the inode size is not supported
e2fsprogsパッケージに含まれており、ext2/ext3/ext4に対して実行できます。
e2undoコマンドは実行したコマンドをlogからリプレイします。
今回はtune2fsコマンドでのinodeサイズの変更を取り消す方法を例とします。
inodeサイズはmke2fsコマンドでFSを作成する際に指定出来ます。
通常、ext2/ext3では128byteで管理されます。
一方、ext4は256byteがデフォルトとなっています。
ext4ではnano秒単位で時間を保持出来る様になっており、その情報がinode内に格納する
関係で128byteより大きな値になっています。
また32bitで管理するその他エントリの拡張にも利用されます。
それ以外のinodeの余り領域には、ACLや拡張属性(xattr)の情報が格納されます。
128byte時は外部に取得したブロックにこれらの情報が格納されます。
そのため、inode内部に保持した方が、inode外のブロック読み込みが発生しないため
若干のアクセス性能の向上が見込めます。
ただ、体感として違いがわかるには大量のアクセスが必要となります。
ext2/ext3でも128byteより大きなinodeサイズを指定出来ますが、
ACL, xattrを使わない限りメリットはありません。
むしろ、inodeが小さい方がファイルの作成時間が短くてすみますので、
ext2/ext3ではinodeサイズは128byteで運用すべきだと思います。
1.ログの出力先を作成する
まずはログファイルの出力先として、/var/lib/e2fsprogsを作成します。
[root@localhost /]# mkdir -p /var/lib/e2fsprogs
2. ext4の作成
ext4をinodeサイズ128byteで作成します。
e2fsprogs: 1.41.12のtune2fsではflex_bgが有効である場合、
inodeサイズの変更をサポートしていないため、flex_bgをoffにします(将来的にはサポートされるようになるかもしれません)。
[root@localhost /]# mkfs -t ext4 -I 128 -O ^flex_bg /dev/sda8
inodeサイズが128byteで出来ていることが確認できます。
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 128
3. inodeサイズを256byteにする
tune2fsコマンドでinodeサイズを変更します。
e2undo用のログファイルが作成された旨が出力されます。
※出力先のディレクトリがない場合は出力されません
[root@localhost /]# tune2fs -I 256 /dev/sda8
tune2fs 1.41.14 (22-Dec-2010)
To undo the tune2fs operation please run the command
e2undo /var/lib/e2fsprogs/tune2fs-sda8.e2undo /dev/sda8
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 256
4. e2undoでもとに戻す
e2undoコマンドにログを指定し、inodeサイズをもとに戻します。
[root@localhost /]# e2undo /var/lib/e2fsprogs/tune2fs-sda8.e2undo /dev/sda8 | more
Replayed transaction of size 1024 at location 919673
Replayed transaction of size 1024 at location 919563
Replayed transaction of size 1024 at location 919518
Replayed transaction of size 1024 at location 919449
Replayed transaction of size 1024 at location 919339
...
e2undoでリプレイした結果inodeサイズが128byteにもどっています。
[root@localhost /]# debugfs -R stats /dev/sda8
debugfs 1.41.14 (22-Dec-2010)
Filesystem volume name:
Inode size: 128
余談ですが、一度大きく拡張したinodeサイズは通常元に戻せません。
e2undoを実行できるログがあるときのみできます。
そのため、inodeサイズを変更する際には万が一のためにログを出力出来るようにしておくべきです。
[root@localhost /]# tune2fs -I 128 /dev/sda8
tune2fs 1.41.14 (22-Dec-2010)
Shrinking the inode size is not supported
【Linuxの最新記事】
この記事へのコメント