bcache 是否支持使用 LVM 逻辑卷作为缓存设备?

bcache 是否支持使用 LVM 逻辑卷作为缓存设备?

我的系统中有一个 64GB SSD 和一个 3TB 硬盘,运行的是 Ubuntu 14.04。SSD 有一个小的根分区,其余设备分配给 LVM 物理卷。从该 LVM 物理卷中我分配了两个逻辑卷,一个用于 /usr,一个用于 /root。(/home 位于 3TB 硬盘上。)

由于我目前有大约 25GB 的 SSD 未使用,因此我认为尝试将其用作 bcache 缓存设备并以 /home 作为后备设备会很有趣。

我使用 SSD 上 LVM 物理卷的剩余空间创建了一个新的逻辑卷。结果如下:

# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  VG4  lvm2 a--  53.57g    0 
  /dev/sdb2  VG6  lvm2 a--   2.69t    0 
# lvs
  LV      VG   Attr      LSize  Pool Origin Data%  Move Log Copy%  Convert
  VG4-usr VG4  -wi-ao--- 19.31g                                           
  VG4-var VG4  -wi-ao---  9.31g                                           
  bcache  VG4  -wi-ao--- 24.95g                                           
  home    VG6  -wi-ao---  2.69t

然后我做了:

# make-bcache -C /dev/mapper/VG4-bcache

系统立即完全锁定。(因此,以上是重建,我不再有我执行的实际命令。)

我是不是在不知不觉中做了什么蠢事?这是受支持的配置吗?我想知道是否值得将其报告为错误。似乎没有任何东西因崩溃而受到永久损害。

答案1

你绝对认为你应该提交一个错误。我从未想过使用 LV 作为 bcache,只使用 PV。也许(只是也许)你是第一个尝试的人……而且可能没有处理……

您想让我继续进行 SysBck 并亲自尝试一下吗?(今天不行:太累了!)

你有没有系统备份???(您的用户类型为 4)

答案2

是的。我不小心把设置弄反了。我将 lvm 设置为缓存设备,将 ramdrive 设置为备份设备。但是,回答你的问题,它确实有效。

但我应该提到,lvm2 有一个缓存功能,你不妨选择使用它(我就是这么做的),然后如果你想将 lvm 缓存到内存中,则使用 bcache

答案3

就我的情况而言,问题是由于设备已在 bcache 中被积极使用,这一点已得到证实bcache-super-show

$ make-bcache -B /dev/ssd/cache
Can't open dev /dev/ssd/cache: Device or resource busy

$ make-bcache -C /dev/ssd/cache
Can't open dev /dev/ssd/cache: Device or resource busy

$ pvs
  PV                      VG     Fmt  Attr PSize   PFree
  /dev/mapper/md100-crypt hdd    lvm2 a--    3.64t 186.30g
  /dev/mapper/md101-crypt ssd    lvm2 a--  119.17g  32.23g
  /dev/md0                system lvm2 a--   13.81g   4.50g

$ lvs
  LV    VG     Attr      LSize  Pool Origin Data%  Move Log Copy%  Convert
  data  hdd    -wi-ao---  3.46t
  cache ssd    -wi-ao--- 29.75g
  data  ssd    -wi-ao--- 57.20g
  root  system -wi-ao—  9.31g

似乎在以下方面失败了

open("/dev/ssd/cache", O_RDWR|O_EXCL) = -1 EBUSY (Device or resource busy)

在那次失败之前,以下做法似乎取得了成功;

open("/dev/ssd/cache", O_RDONLY) = 4
ioctl(4, BLKSSZGET, 512) = 0
close(4)             = 0

这使我相信是O_EXCL导致这个问题的原因EBUSY,表明也许另一个进程正在锁定该设备,但我可以确认/dev/ssd/cache没有安装、打开或正在使用(如 lsof 或 fuser 中所示),并且重新启动不能解决问题。

尝试从设备映射器中删除它也没有进展;

$ dmsetup remove ssd-cache
device-mapper: remove ioctl on ssd-cache failed: Device or resource busy

运行后lsblk我可以看到以下内容;

sdb                        8:16   0 119.2G  0 disk
└─sdb1                     8:17   0 119.2G  0 part
  └─md101                  9:101  0 119.2G  0 raid1
    └─md101-crypt (dm-3) 252:3    0 119.2G  0 crypt
      ├─ssd-data (dm-4)  252:4    0  57.2G  0 lvm   /mnt/ssd/data
      └─ssd-cache (dm-5) 252:5    0  29.8G  0 lvm
        └─bcache0        251:0    0  29.8G  0 disk

如您所见,bcache0 是所讨论设备的子设备,快速检查可以证实这一点;

$ bcache-super-show /dev/ssd/cache
sb.magic        ok
sb.first_sector     8 [match]
sb.csum         9F5D50331A2A10B9 [match]
sb.version      1 [backing device]
dev.label       (empty)
dev.uuid        8ba675a3-d9e4-4d47-8403-655c226f578f
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.data.first_sector   16
dev.data.cache_mode 0 [writethrough]
dev.data.cache_state    0 [detached]
cset.uuid       c006c316-d396-40cf-bde8-8bd4d0a017e8

因此,就我的情况而言,根本问题是设备本身已经是 bcache 的一部分,但make-bcache无法检测到这一点。

希望这将来对其他人有用。

相关内容