Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
Flashcacheのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Flashcache
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ファイルシステム]] [[en:Flashcache]] {{Tip|[[EnhanceIO]] はFlashcache よりも簡単に設定することができます。}} ==イントロダクション== Flashcache は元々は Facebook (Mohan Srinivasan, Paul Saab, Vadim Tkachenko) によって開発され2010年4月にリリースされたモジュールです。ドライブのライトスルーキャッシュを他のドライブに保存することができるカーネルモジュールとなっています。性能を上げるために、回転ドライブをソリッドステートドライブにキャッシュするのによく使われています。ファイルをキャッシュすることで SSD 並みの速度と標準的な回転ドライブの容量の両方を教授できます。Facebook の開発目的はデータベースの I/O を高速化させることですが、どんな I/O でも簡単に対応可能です。 Flashcache の代替としては [[Bcache]] が存在します。 {{Warning|Installation of flashcache at this point is *not* a simple task and should only be attempted by people comfortable with such things. Please read the instructions thoroughly before attempting to install this driver. It is very easy to get a non-booting machine if you are not careful.}} このドライバーは遅いドライブを速いドライブで高速化することを意図しているのをよく覚えてください。速いドライブは別にソリッドステートドライブである必要はありません。高速だが小容量な SCSI ドライブと大容量の SATA ドライブがある場合や、とても低速な "green" ドライブと超高速な 10k rpm ドライブがある場合など、様々な速度のドライブが複数存在するような状況で広く使うことができます。 {{Warning|I have read that this module does not compile properly on a 32-bit machine, but I have not tested this.}} ==インストール== {{Tip|以下、遅いドライブは {{ic|/dev/sda}}、速いドライブは {{ic|/dev/sdb}} とし、2つのパーティション sda3 と sda4 を sdb1 と sdb2 にそれぞれキャッシュします。コマンドの例は適宜置き換えて下さい。}} ===カーネルモジュールの取得=== {{Warning|デバイスマッパーが有効になっている、またはモジュールとして構築されている完全なカーネルソースが必要です。}} 現段階で Arch パッケージや AUR にはカーネルモジュールが含まれていないので、GitHub の https://github.com/facebook/flashcache から直接ファイルをダウンロードしてください。ダウンロードしたらイメージを展開してモジュール/ユーティリティをコンパイルします: $ tar -xzvf facebook-flashcache-1.0-64-g085b7ba.tar.gz $ cd facebook-flashcache-085b7ba $ make KERNEL_TREE=<root of kernel source tree> (most likely in /usr/src) コンパイルが完了したらモジュールをインストールしてください (インストールには root 権限が必要です): # make KERNEL_TREE=<root of kernel source tree> install そしてユーティリティを使いやすいように {{ic|/usr/sbin}} にコピーします: # cp src/utils/{flashcache_create,flashcache_load,flashcache_destroy} /usr/sbin ===速いドライブの準備=== 必要なキャッシュを行うための高速なドライブの準備をします。キャッシュのサイズに合わせてパーティションを作成してください。 ===flashcache の作成=== # flashcache_create cached_part1 /dev/sdb1 /dev/sda3 # flashcache_create cached_part2 /dev/sdb2 /dev/sda4 ===ブート時にドライブを起動=== flashcache をどう使うかによって設定は変わります。root ファイルシステムをキャッシュする場合、ブートの初期段階でドライブを起動し、{{ic|/home}} ドライブパーティションなどをキャッシュする場合は、ブートの後期でドライブを起動するようにします。ブートの後期でドライブを起動するほうが簡単です。 ====systemd を使ってブートの後期で起動==== {{Tip|In this section I am ignoring the root filesystem flashcache, as this method is not appropriate for it}} この方法では、systemd スクリプトを作成・有効化して flashcache モジュールをロードしてから flashcache ドライブをマウントします。 まず、{{ic|/etc/fstab}} を開いて {{ic|/home}} が UUID でマウントされるようになっていることを確認してください。そうなっていない場合は、{{ic|/dev/disk/by-uuid}} から UUID を取得して設定してください。Flashcache は flashcache ドライブにキャッシュ元と同一の UUID を設定するため、{{ic|/etc/fstab}} で UUID を使うことで flashcache ドライブがロードできなかった場合も起動することが可能になります。以下のようになっていれば問題ありません: {{bc|1= ... UUID=5ebee55d-8871-44ea-b159-58c103970f54 /home ext4 rw,relatime ... }} 次に、実際に flashcache を利用する init スクリプトを作成します。 {{hc|/lib/initcpio/hooks/flashcache|<nowiki> #!/bin/bash # Check if /home is mounted HOMEMOUNT=$(mount | grep home | sed 's/ .*//' | sed 's#.*/##' ) # Load module if not already loaded if [[ ! "$(eval lsmod | grep "^flashcache")" ]]; then modprobe flashcache fi # Mount flashcache /home if not already mounted if [[ ! "$HOMEMOUNT" == "cached_part2" ]]; then umount /home if [ ! -e /dev/mapper/cached_part2 ]; then flashcache_load /dev/sdb2 fi mount /home fi </nowiki>}} そして init スクリプトを使うための systemd スクリプトを作成してください。 {{hc|/lib/systemd/system/flashcache.service|2= [Unit] Description=FlashCache [Service] Type=oneshot RemainAfterExit=no ExecStart=/usr/local/bin/flashcache [Install] WantedBy=multi-user.target }} 最後に、以下のコマンドでサービスを有効化してください: # systemctl enable flashcache これで設定は完了です。 ====initcpio を使ってブートの初期に起動==== この方法ではカーネルの初期 RAM ディスクを編集して flashcache をブートの初期段階でロードする必要があります。 =====RAM ディスクの設定===== root パーティションを使用するようにキャッシュを設定する場合や、実行時にパーティションをアンマウントしたくない場合、RAM ディスクを変更して flashcache に対応して busybox で作業を行うのが一番です。キャッシュするファイルシステムがアンマウントされている場合、[[#他のファイルの変更]]までスキップしてください。 ここでは RAM ディスクを変更するベースとして LVM を使っていますが、別の方法もあります。まず、以下のファイルを作成 (ファイルの中身は適宜置き換えて下さい): {{hc|/lib/initcpio/hooks/flashcache|<nowiki> # vim:set ft=sh: run_hook () { /sbin/modprobe -q dm-mod >/dev/null 2>&1 if [ -e "/sys/class/misc/device-mapper" ]; then if [ ! -e "/dev/mapper/control" ]; then /bin/mknod "/dev/mapper/control" c $(cat /sys/class/misc/device-mapper/dev | sed 's|:| |') fi [ "${quiet}" = "y" ] && LVMQUIET=">/dev/null" msg "Activating cache volumes..." eval /usr/sbin/flashcache_load cached_part1 /dev/sdb1 /dev/sda3 $LMQUIET eval /usr/sbin/flashcache_load cached_part2 /dev/sdb2 /dev/sda4 $LMQUIET fi } </nowiki>}} {{hc|/lib/initcpio/install|2= # vim: set ft=sh: install () { MODULES="dm-mod" BINARIES="" FILES="" SCRIPT="flashcache" add_dir "/dev/mapper" add_binary "/sbin/dmsetup" add_binary "/usr/sbin/flashcache_create" add_binary "/usr/sbin/flashcache_load" add_binary "/usr/sbin/flashcache_destroy" add_file "/lib/udev/rules.d/10-dm.rules" add_file "/lib/udev/rules.d/13-dm-disk.rules" add_file "/lib/udev/rules.d/95-dm-notify.rules" add_file "/lib/udev/rules.d/11-dm-lvm.rules" } help () { cat<<HELPEOF This hook loads the necessary modules for a flash drive as a cache device for your root device. HELPEOF } }} {{Note|I left in the files {{ic|dm-disk.rules}}, {{ic|dm-notify.rules}} and {{ic|dm-lvm.rules}}, but I do not believe these are required.}} {{ic|/etc/mkinitcpio.conf}} を更新: モジュールに flashcache を追加: MODULES="flashcache" フックに flashcache を追加 (ファイルシステムの前に追加するようにしてください): HOOKS="... flashcache ..." {{Tip|You might need to add usbinput to your hooks as well if you are using a usb keyboard.}} そして ramdisk イメージを再生成: # mkinitcpio -g /boot/<your ramdisk filename>.img 通常のイメージとは別の ramdisk イメージを作成して、grub の設定ファイルに新しいエントリを追加して作成した ramdisk を使うようにすることも可能です。 =====他のファイルの変更===== 新しいパーティションが {{ic|/dev/mapper}} に出現するので元の {{ic|/dev/sd*}} パーティションの代わりに新しいパーティションをマウントしてください。GRUB と fstab を編集して新しいパーティションをマウントする必要があります。以下の例では、root パーティションは {{ic|/dev/mapper/cached_part1}} でホームディレクトリは {{ic|/dev/mapper/cached_part2}} となっています。 {{ic|/boot/grub/menu.lst}} {{bc|1= # (0) Arch Linux title Arch Linux(flashcache) root (hd0,0) kernel /vmlinuz26 root=/dev/mapper/cached_part1 ro 5 initrd /kernel-2.6.38.4.img }} {{ic|/etc/fstab}} {{bc| ... /dev/mapper/cached_part1 / ext3 defaults 0 1 /dev/mapper/cached_part2 /home ext3 defaults,user_xattr 0 1 ... }} root パーティションをキャッシュする場合、再起動して grub で e を押してカーネルコマンドラインのオプションを編集してください。カーネルオプションの行を選択したら再度 e を押します。'break=y' をクォートで囲まずに末尾に追加してエンターを押してください。b を押すと起動します。これでモジュールがロードされた後に RAM ディスクが停止してシェルが起動するので作業をすることができます。 (flashcache ramdisk を使用していることを確認したら) 再起動してマウントされたパーティションが新しく作成したパーティションであることを確認してください。 ==設定== キャッシュを制御するための多くのオプションが存在します。flashcache のドキュメントにあるシステム管理者ガイドを確認してください。例えば {{ic|/etc/sysctl.d/90-flashcache.conf}} に以下の設定を追加します: {{bc|1= ##################### # flashcache settings ##################### # disable writing dirty cache data at shutdown dev.flashcache.fast_remove = 1 # change the reclaim policy to LRU from FIFO dev.flashcache.reclaim_policy = 1 # do not write "stale" data to disk until evicted due to lack of space dev.flashcache.fallow_delay = 0 }} ==トラブルシューティング== * キャッシュを作成しようとすると {{ic|device-mapper: reload ioctl failed: Invalid argument}} というエラーが表示される場合、マウントしたファイルシステムのキャッシュを作成してみてください。 * 起動が失敗する場合、GRUB のカーネルコマンドラインに {{ic|1=break=y}} を追加して RAM ディスクのシェルを使うことで簡単にキャッシュの確認ができます。 * キャッシュが上手く使われないときは {{ic|/proc/flashcache_stats}} に役に立つ情報が含まれているはずです。 == 参照 == * オリジナルのアナウンス - http://www.facebook.com/note.php?note_id=388112370932 * Github ソース - https://github.com/facebook/flashcache
Flashcache
に戻る。
検索
検索
Flashcacheのソースを表示
話題を追加