linux - 使用 dmsetup Kernel 3.9.6 创建 dm-cache

标签 linux caching kernel virtualbox dm

我正在尝试使用虚拟机创建一个 dm-cache 设备。我在/dev/sdb、sdc、sdd 中有多个分别标记为 Cache_disk、Device_to_Cache 和 meta_data 的磁盘,尝试创建缓存时,我运行命令:

dmsetup create my_cache --table '0 16775168 cache /dev/sdd1 /dev/sdb1 /dev/sdc1 512 1 writeback default 0'

按照 dm-cache 文章文档中的说明 page

我在内核中启用了 dm-cache 但我发现了这个错误:

device-mapper: reload ioctl failed: Invalid or incomplete multibyte or wide character
command failed

查看 dmesg 设备映射器时:缓存元数据未通过 sb_check

root@msali014-VirtualBox:/home/msali014# dmesg
[ 5432.738603] device-mapper: cache-policy-mq: version 1.0.0 loaded
[ 5432.794852] device-mapper: cache metadata: sb_check failed: magic 0: wanted 1623043
[ 5432.794862] device-mapper: block manager: superblock validator check failed for block 0
[ 5432.794867] device-mapper: cache metadata: couldn't read lock superblock
[ 5432.797952] device-mapper: table: 252:0: cache: Error creating metadata object

/var/log/syslog 类似:

Jun 28 11:17:01 msali014-VirtualBox CRON[2935]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.738603] device-mapper: cache-policy-mq: version 1.0.0 loaded
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.794852] device-mapper: cache metadata: sb_check failed: magic 0: wanted 1623043
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.794862] device-mapper: block manager: superblock validator check failed for block 0
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.794867] device-mapper: cache metadata: couldn't read lock superblock
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.797952] device-mapper: table: 252:0: cache: Error creating metadata object
Jun 28 11:33:08 msali014-VirtualBox kernel: [ 5432.797960] device-mapper: ioctl: error adding target to table
Jun 28 11:33:08 msali014-VirtualBox udevd[619]: inotify_add_watch(6, /dev/dm-0, 10) failed: No such file or directory
Jun 28 11:33:08 msali014-VirtualBox udevd[619]: inotify_add_watch(6, /dev/dm-0, 10) failed: No such file or directory

[ 5432.797960] device-mapper: ioctl: error adding target to table

如何改变 sb->magic 的值使 dm-cache 成功加载?任何帮助将不胜感激。

最佳答案

多字节或宽字符错误消息让我很困扰,我没有任何直接的建议来解决这个问题。

我假设/dev/sdd1 和/dev/sdb1 是您的元数据和数据存储 block 设备?它们包含任何数据吗?

您是否尝试过将元数据卷清零 (dd if=/dev/zero of=/dev/sdd1)?前一段时间我在设置 dm-cache 时遇到了问题。

简而言之,我执行以下操作(在 Ubuntu 13.04 + Linux 3.10 版本上):

dmsetup create ssd-metadata --table '0 19370 linear /dev/disk/by-id/scsi-SATA_OCZ-AGILITY2_f2d200034-part6 0'
dmsetup create ssd-blocks --table '0 189008982 linear /dev/disk/by-id/scsi-SATA_OCZ-AGILITY2_f2d200034-part6 19370'
dmsetup create home-cached --table '0 1048576000 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-blocks /dev/vg0/spindle 512 1 writeback default 0'

附带说明一下,我在 Ubuntu 12.11 和 13.04 上运行 3.9.6 和一些更早的 3.9 内核没有问题。

如果一切都失败了,我有一个 working solution for my setup on my blog有关更多详细信息,您可能需要查看分步教程。

关于linux - 使用 dmsetup Kernel 3.9.6 创建 dm-cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17369767/

相关文章:

linux - 使用 grep 操作文本文件

linux -/usr/lib/* 文件被删除,如何恢复这些文件

linux - 从 bash 脚本中的行号开始读取行

c# - WebBrowser 控件缓存问题

支持 Memcache 的 MySQL 集群

mysql - 实现 MySQL 哈希表的最佳方式?

linux - Linux下Android Studio的插件文件夹

linux - CPU IO端口如何真正工作?

c - 内核空间中 PCI 内存的地址映射

c - 长模式下键盘中断。 64位操作系统