如何安装和使用flashcache / bcache将HDD缓存到SSD?


52

我想知道是否有人尝试安装和运行使用flashcachebcache构建的内核以进行SSD缓存?

您是如何做到的?


好问题。我在我的一些回答(中一直建议flashcache 12)。似乎 dm-cache旁边的作业工具。这也与所有正在寻找适用于Ubuntu / Linux的Intel Smart Response替代产品的人有关。
gertvdijk

我,tooo正在将其视为Intel SRT的替代产品。这里的主要 Wiki 用几句话说,这不是为了胆小的人。问题是我打算在我的唯一PC上同时使用它来工作和娱乐:),因此,我非常担心并且希望这里有个方法。您是否认为有可能在VM上运行ubuntu,并在磁盘上有一个驱动器(基于文件),在SSD上有一个驱动器(再次基于文件)进行测试。然后愿意尝试一下:)
kapad

很好的问题,但是使用虚拟机作为测试平台的答案是否完整?许多人没有必要的硬件来真正回答这个问题。
RobotHumans 2013年

4
已经为Flashcache尝试过这个吗?gerrit-tamboer.net/…–
茉莉花

4
dm-cache现在已合并到稳定的3.9 Linux内核发行版中。我想这个26票的问题现在应该得到答案。:)
gertvdijk

Answers:


10

好吧,我们得到了bcache答案,但是没有flashcache答案。我选择了flashcache,因为我已经安装了现有的安装,因此bcache成为不可能。在我看来,设置起来也比较容易。我选择了DKMS方法,这样就不会在每次升级内核时都被困重建模块/工具。

这些步骤在Github上的README-DKMS中概述。

构建模块

  1. 您要做的第一件事是安装构建先决条件:

    sudo apt-get install dkms build-essential linux-headers-$(uname -r) git
    
  2. 然后获取源代码:

    git clone git://github.com/facebook/flashcache; cd flashcache
    
  3. 构建并安装模块:

    make -f Makefile.dkms
    

创建闪存设备

(在此示例中,我使用写回缓存(默认设置),但flashcache也可以执行写回和透写操作)

缓存非root(未安装在/)设备

sudo flashcache_create -p back fcache /dev/sdbX /dev/sdaX 其中fcache是​​创建的设备(/ dev / mapper / fcache),/ dev / sdaX是SSD分区(或整个磁盘),/ dev / sdbX是HDD分区。

缓存您的根设备

如果要缓存根设备,还有更多步骤。本节将需要一个Ubuntu LiveCD / USB。

  1. cd /path/to/flashcache/source

  2. make -f Makefile.dkms boot_conf

  3. 编辑/boot/grub/grub.cnf和/ etc / fstab以从/ dev / mapper / fcache引导(我不认为此步骤确实是必需的,但确实如此)。确保记下原始根设备的UUID。

  4. 使用LiveCD / LiveUSB重新启动。

  5. 挂载根设备:mount /dev/sda4 /mnt(/ dev / sda4是我的Linux根分区)

  6. cd /mnt/path/to/flashcache/source

  7. sudo apt-get install dkms build-essential linux-headers-$(uname -r)

  8. make; sudo make install 无需在实时环境中进行整个DKMS设置

  9. 卸载根设备 sudo umount /mnt

  10. sudo flashcache_create -p back fcache /dev/sdbX /dev/disk/by-uuid/[UUID] 其中fcache是​​已创建的设备(与您在/ etc / fstab和/boot/grub/grub.cnf中放置的设备相同,在我的情况下为fcache),/ dev / sdbX是SSD分区(或整个磁盘) ),[UUID]是您的根分区的UUID。

  11. 重启!

使用根设备时的警告

当将flashcache用于根设备时,一个小麻烦是grub-probe无法检测到根设备,并且会弄乱您的启动菜单,从而使您拥有两个Ubuntu整体。但是,实际上使用哪个都没关系,因为make -f Makefile.dkms boot_conf上面的步骤在initrd中安装了一些脚本,这些脚本将检测和使用flashcache设备。


2
我至少看到在raring中有用于flashcache-dkms和flashcache-utils的软件包。安装将如何更改?
ivant

真的吗?我没注意到。我也正在运行Raring,但已从Git存储库安装了它。我必须查看该软件包,但是我可以想象您将能够跳过前几节,并且仍然可以完成引导根设备的整个过程。
Chuck R

1
ubuntu 13.10的flashcache-dkms软件包不包含initramfs的flashcache模块和二进制文件,因此,如果您对根目录进行flashcache,则将无法启动它。我创建了一个错误:bugs.launchpad.net/ubuntu/+source/flashcache/+bug/1290148如上所述,我已经从源代码构建了Flashcache,并且能够启动以下链:sda7-> flashcache-> dm- crypt-> lvm-> ext4。只需将flashcache开发添加到/ etc / crypttab和update-initramfs -u
Martin Vysny 2014年

您可以添加注释,其中包含必须对grub文件进行的更改。
kapad

我不再修改grub.cfg,似乎没有必要。但是,您进行了如下更改:linux /boot/vmlinuz-3.19.0-51-lowlatency root=UUID=0a540b91-5990-4df0-bc99-5d6e2cd3fed6 ro recovery nomodesetlinux /boot/vmlinuz-3.19.0-51-lowlatency root=/dev/mapper/fcache ro recovery nomodeset(即更改root =参数)
Chuck R

12

有一个转换工具可以在现有设备上启用bcache(公开:我写了它)。这也是进行全新安装的方法,因为当前的发行版安装程序不知道如何创建bcache设备(在这种情况下:从安装到HDD开始)。

请参阅自述文件中的将根文件系统转换为bcacheblocks说明。

bcache需要使用Linux 3.10或更高版本,该版本已很安全,可以从http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=M;O=D手动安装 (查找最新的带标记的版本) ,当前v3.11.5-saucy,并安装与您的体系结构匹配的debs)。

bcache-tools并且blocks可以从安装我的存储PPA


1
对于当前(15.04)版本的Ubuntu,此工具已损坏。参见github.com/g2p/maintboot/issues/1github.com/g2p/blocks/issues/13
Jean Jordaan

实际上,该工具本身目前尚未损坏(昨天在350GB硬盘驱动器上进行了测试)。然而目前的版本不能用于转换系统磁盘(//home/usr/在系统运行时,...)(如maintboot被打破)。或者,您可以使用活动的USB记忆棒,然后blocks在此处安装并用于转换磁盘。但是请注意,此工具仅适用于主MBR和GPT分区表,并且在每个分区之前需要1MiB的额外空间。
ntninja

5

事先警告:bcache不能用于您现有的Ubuntu安装。如果您需要操作系统的SSD缓存,则应等待Ubuntu安装程序的将来版本或特殊版本,该版本可以设置SSD缓存。在这里查看Oli的答案:bcache是​​否需要全新安装?

对于希望为非OS数据提供bcache驱动器的其他所有人:

首先要做的是升级您的内核,如果您使用的是13.04或更早版本,则使用内核主线PPA。可以在这里找到使用说明:

https://wiki.ubuntu.com/Kernel/MainlineBuilds

确保在引导时选择3.9或更高版本的内核,否则它将无法正常工作,并且驱动器将消失。

安装bcache-tools,此刻您将不得不从git仓库中安装:

git clone http://evilpiepirate.org/git/bcache-tools.git

如果您设法bcache-tools为debian 打包,请告诉我们,此问题将为您更新。(bcache-tools的构建依赖项是uuid-devlibblkid-dev。必须安装它们才能进行构建bcache-tools。)

使用完所有工具后,就可以尝试按照此处的指南进行操作:

http://atlas.evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt

本指南说明了如何格式化驱动器(SSD 硬盘驱动器),然后将它们连接在一起以使用bcache构成新的设备块。如果您发现说明令人困惑,请发表评论,我将通过简化来更新此答案。


是否可以创建一个运行内核3.9的启动盘,然后创建bcache驱动器并将ubuntu安装在该驱动器之上?
kapad

kapad-应该可以,但是您必须确保ubuntu安装在引导时可用正确的驱动程序,并且可能必须在bcache之外进行引导,以便grub可以找到它。
Martin Owens -doctormo-

2

我以为我会来这里并评论我安装新内核时发生的事情。我仅对/ home /文件夹分区使用了flashcache。我安装了一个新内核,启动后进入内核,并在启动过程中停止运行,并说找不到/ dev / mapper / home_cached,收到此消息时您有3种选择,我选择以root身份登录并尝试修复它。我首先尝试加载flashcache模块,但它说找不到它。所以我认为我必须为刚刚安装的这个新内核编译并安装它。我仍然在/ root /中有/ flashcache /文件夹,所以我将其CD并运行

make -f Makefile.dkms boot_conf

然后我跑了

make install

然后我加载了flashcache模块

modprobe flashcache

然后我只需要加载我现有的闪存缓存设备

flashcache_load /dev/sdb1

然后只需挂载我的家庭分区

mount /home

然后退出以root身份登录,并在命令行上退出,它应该继续正常启动。全部做完!


我很好奇这是否仍然有效,我最终切换并且不再使用闪存缓存,由于内部固件,我只是在64GB SSD上安装了Arch(Linux内核认为它只有32GB)。我认为这对于某些Steam游戏来说是一种缓存驱动器,因此非常有用。
Ubu科技大师
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.