EnhanceIO
EnhanceIO は SSD を他のブロックデバイスストレージ (HDD, ネットワークストレージなど) のキャッシュデバイスとして使用することを可能にします。設定はほとんど必要ありません。Flashcache が元になっていますが、設定は簡単です。Bcache と違ってファイルシステムの変換は必要ありません。
インストール
AUR から enhanceio-dkms-gitAUR をインストールしてください。
モジュールとドライブの設定
EnhanceIO コマンドラインインターフェース (eio_cli) を使用してセットアップを管理します。高速な SSD に低速な HDD のキャッシュを設定するには:
# eio_cli create -d /dev/sda -s /dev/sdb -c my_first_enhanceio
上記のコマンドは安全なデフォルトオプションを使用します。さらに速度を向上させたい場合、-m wb
を追加することで WriteThrough モードのかわりに WriteBack モードが有効になります。データが破損する危険性があるので注意してください。
キャッシュドライブは再起動しても使用されます。無効化したい場合はまずキャッシュを読み取り専用モードに設定してください (まだ書き込まれていないブロックを消失させないため):
# eio_cli edit -c my_first_enhanceio -m ro
以下のコマンドで0が返ってくるようになるまで待機してください:
$ grep nr_dirty /proc/enhanceio/enchanceio_test/stats
HDD に全てのブロックが書き込まれたらキャッシュデバイスを削除しても安全です:
# eio_cli delete -c my_first_enhanceio
キャッシュの情報を取得
キャッシュの基本情報を取得するには:
# eio_cli info
詳細情報を取得するには:
$ cat /proc/enhanceio/my_first_enhanceio/stats
initcpio で EnhanceIO を有効化
EnhanceIO が動作するのを確認できたら、システムの起動時間を短縮させるのにも EnhanceIO を使うことができます。ルートファイルシステムがマウントされる前よりもできるだけ早く EnhanceIO を起動する必要があります。それには initcpio で EnhanceIO を有効にする必要があります。
まず、AUR から pyinstallerAUR パッケージをインストールしてください。initcpio イメージに EnhanceIO を含めるために EnhanceIO の Python スクリプト eio_cli
を実行可能ファイルにコンパイルします。
起動時にキャッシュの初期化を実行する EnhanceIO のフックとなる /etc/initcpio/hooks/enhanceio
ファイルを作成してください:
#!/usr/bin/bash run_hook () { local mod for mod in enhanceio enhanceio_lru enhanceio_fifo; do modprobe "$mod" done msg -n ":: Activating EnhanceIO..." udevadm trigger }
eio_cli
を実行可能ファイルとしてコンパイルして initcpio から EnhanceIO をロードするのに必要なモジュールが含まれた /etc/initcpio/install/enhanceio
ファイルを作成してください:
#!/bin/bash build () { local mod for mod in enhanceio enhanceio_lru enhanceio_rand enhanceio_fifo; do add_module "$mod" done add_binary "/usr/lib/libutil.so.1" add_file "/etc/udev/rules.d/94-enhanceio-my_first_enhanceio.rules" sudo -u ${SUDO_USER} pyinstaller --distpath=/tmp/eio_cli/dist --workpath=/tmp/eio_cli --specpath=/tmp/eio_cli --clean --onefile --noconfirm --strip --console /usr/bin/eio_cli add_binary "/tmp/eio_cli/dist/eio_cli" "/usr/bin/eio_cli" add_runscript } help () { echo "This hook loads the necessary modules for EnhanceIO when caching your root device." }
/etc/mkinitcpio.conf
を編集して HOOKS 変数の udev, block, modconf の後に enhanceio
フックを追加してください:
HOOKS="base udev block modconf enhanceio ..."
eio_cli のパーミッションを変更:
# chmod uga+xr /usr/bin/eio_cli
最後に、initcpio を再生成:
# mkinitcpio -p linux
再起動するとシステムが飛ぶように速く起動します。