HEV

ArchLinux部署SSD缓存

· hev

在 Linux 系统上使用带宽更高、延迟更小的 SSD 作为 HDD 的缓存来打造软件实现的“混合硬盘”是一种容量和性能折中的方案。在 Linux 系统中使用高速外存作低速外存的缓存有两个成熟的方案:

  1. lvmcache
  2. bcache。

本文记录的是基于 lvmcache 在 Arch Linux 系统上的部署方法。

硬件情况

  1. 一块120GB容量的固态硬盘 (/dev/sda)。
  2. 一块1TB容量的机械硬盘 (/dev/sdb)。

分区规划

/dev/sda1     20GB     lvm
/dev/sda2     100GB    lvm
/dev/sdb      1TB      lvm

LVM 规划

VG (system) -> { PV (/dev/sda1) }
VG (data) -> { PV (/dev/sdb), PV (/dev/sda2) }

LV (system/arch) 19.9GB
LV (data/home) 917GB
LV (data/home_cache) 91GB

操作系统完全安装在 SSD 中, home 存放于 HDD 中,但使用 SSD 的剩余空间作为 cache。为什么不把所有数据存放于 HDD 中,仅用 SSD 作为 cache 呢?测试结果是当 cache 加入后就影响了系统的启动,所有只能应用于数据区。

详细步骤

  1. 使用 ArchLinux iso 启动盘启动系统。
  2. fdisk /dev/sda 先创建一个类型为 lvm 容量为 20GB 的标准主分区,再创建一个类型为 lvm 容量为 100GB 的标准主分区。
  3. pvcreate /dev/sda1
  4. pvcreate /dev/sda2
  5. pvcreate /dev/sdb
  6. vgcreate system /dev/sda1
  7. vgcreate data /dev/sdb
  8. lvcreate -L 19.9G system -n arch
  9. mkfs.ext4 -E discard /dev/mapper/system-arch
  10. mount /dev/mapper/system-arch /mnt
  11. pacstrap /mnt 按照需要安装系统
  12. arch-chroot /mnt
  13. lvcreate –type cache –cachemode wirteback -L 91G -n home_cache data/home /dev/sda2
  14. 另开一个 tty, mount -o bind /run /mnt/run
  15. 回到原 tty, vim /etc/mkinitcpio.conf,找到 HOOkS,在 block 和 filesystem 之间增加个 lvm2
  16. mkinitcpio -p linux
  17. vim /etc/default/grub,找到 GRUB_PRELOAD_MODULES,增加 lvm。
  18. grub-mkconfig -o /boot/grub/grub.cfg
  19. grub-install /dev/sda
  20. 退出,重启。

查看 cache 状态

sudo lvs -o cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses data/home