首先,我对使用 flashcache 还很陌生,我在这里发布的所有内容都只是关于它的研究。
我有一台华硕 K56CM,i5,配备 500GB 硬盘和 24GB SSD 作为缓存。在默认操作系统 Windows 8 中,使用 Expresscache 在 SSD 中缓存硬盘。
我想在 Xubuntu 中做同样的事情,并且我发现 Flashcache 是实现此目的的更好方法。
我已遵循几本手册,但我却失去了一些东西。
分区表为:
sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 5,9G 0 part [SWAP]
├─sda2 8:2 0 117,2G 0 part /
└─sda3 8:3 0 342,7G 0 part /home
sdb 8:16 0 22,4G 0 disk
├─sdb1 8:17 0 250M 0 part /boot/efi
├─sdb2 8:18 0 5,9G 0 part
└─sdb3 8:19 0 16,3G 0 part
SDA是硬盘,SDB是SSD
在 SDB2 中,我使用 gdisk 实现 Intel Rapid Boot,并且我想在 SDB3 中缓存 /home。
我遵循的演练是(http://nitocris.over-blog.net/article-flash-cache-as-home-or-root-on-ubuntu-109792445.html):
- apt-get install git-core
- mkdir -p ~/Build/ ; cd ~/Build/
- git clone https://github.com/facebook/flashcache.git
- sudo apt-get install git build-essential dkms linux-headers-`uname -r` uuid-dev
- cd flashcache
- sudo make -f Makefile.dkms all boot_conf
- sudo make install
- sudo modprobe flashcache
- sudo echo "flashcache" >> /etc/modules
- dmesg | tail
现在 Flashcache 已经安装好了。但我的问题是在创建 flashcache 链接时。
我采用 SDA3 的 UUID 并在 SDB3 上进行 flashcache_Create:
- umount /home
- flashcache_create -p back home_cached /dev/sdb3 /dev/disk/by-uuid/XXX-XXX (the ID)
然后,我编辑 FSTAB,注释 /home 挂载并添加:
- /dev/mapper/home_cached /home reiserfs defaults 0 2
一切正常,但是现在,当我重新启动系统时,/home 没有被挂载...我不知道为什么......
有什么帮助吗?
谢谢!
PD:抱歉我的英语不好,我是西班牙人:S
编辑:好的,我有解决方案。每次重启时都必须创建 Flashcache,因此我创建了一个在启动时执行的脚本。我在这里描述了它:http://ubuntuforums.org/showthread.php?t=2179297
答案1
我遇到了同样的问题;我想出了这个 upstart conf 文件,它将查找所有 flashcache 驱动器并加载它们,然后为驱动器设置 sysctl 设置,然后挂载它们。如果您添加更多驱动器,您需要做的就是将它们添加到 /etc/fstab 并确保它们在第四个字段中有 nobootwait 选项,例如
/dev/mapper/export /export ext4 nobootwait 0 1
这是应该放入的文件/etc/init/flashcache.conf
:
# flashcache - Set up flashcache devices and mount them
description "Set up flashcache devices and mount them on boot"
start on mounted
task
console output
script
# Load any flashcache devices and get them ready to mount, then set sysctl settings.
PATH=/sbin:/bin:/usr/bin
# Load up any flashcache devices
for P in /dev/disk/by-id/*; do
if flashcache_load $P 2>/dev/null; then
echo "Loaded flashcache device from $P"
fi
done
# Now look through all WRITE_BACK devices and set the sysctl settings
for d in $(dmsetup table | grep 'cache mode(WRITE_BACK)' | perl -pe 's@.*ssd dev \(/dev/disk/by-id/(.*?)\), disk dev \(/dev/disk/.*?/(.*?)\).*@$1+$2@'); do
# disable writing dirty cache data at shutdown
sysctl -w dev.flashcache.$d.fast_remove=1
# change reclaim policy from FIFO to LRU
sysctl -w dev.flashcache.$d.reclaim_policy=1
# do not write "stale" data to disk until evicted due to lack of space
sysctl -w dev.flashcache.$d.fallow_delay=0
done
end script