我想在某些 CentOS 5 服务器上安装 Ceph FS 。由于ceph-fuse
失败并出现以下错误:
# ceph-fuse --no-fuse-big-writes -m 192.168.2.15:6789 /mnt/ceph/
ceph-fuse[7528]: starting ceph client
ceph-fuse[7528]: starting fuse
fuse: unknown option `atomic_o_trunc'
2013-04-04 13:51:21.128506 2b82d6e9e8f0 -1 fuse_lowlevel_new failed
ceph-fuse[7528]: fuse finished with error 33
ceph-fuse[7526]: mount failed: (33) Numerical argument out of domain
Google 指出了这一点,但 CentOS 5.x 随内核 2.6.18 一起提供,我将编译一个支持 Ceph 的更新内核。
是从运行的.config
内核中复制的,带有 2 个附加设置:
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_CEPH_FS=m
但他们都给我以下错误:
在提取内核映像并删除 2 行后,可以通过编辑初始化脚本来消除第一个警告:
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
http://funky-dennis.livejournal.com/3290.html
第二个错误怎么样:
device-mapper: table: 253:0: mirror: Error creating mirror dirty log
RAID set "ddf1_bar" was not activated
- 2.6.18 的初始化脚本: http: //fpaste.org/byZ3/
- 2.6.34.14 的:http ://fpaste.org/8COr/
除了以下模块没有加载到较新的内核之外,它们大部分是相同的:
echo "Loading dm-mem-cache.ko module"
insmod /lib/dm-mem-cache.ko
echo "Loading dm-message.ko module"
insmod /lib/dm-message.ko
echo "Loading dm-raid45.ko module"
insmod /lib/dm-raid45.ko
是这个原因RAID set "ddf1_foo" was not activated
吗?
更新 4 月 4 日星期四 21:40:32 ICT 2013
http://alistairphipps.com/wiki/index.php?title=Notes#LVM
类似于“镜像日志:镜像日志无法识别的同步参数:2”,“表:镜像:创建镜像脏日志时出错”的奇怪错误消息意味着您的内核设备映射器和用户空间工具版本不匹配:可能您的内核太新了你的 lvm 工具版本。从源安装最新的设备映射器和 lvm2,它应该可以工作。
我试图编译最新版本的LVM2:
# /usr/sbin/lvm version
LVM version: 2.02.98(2) (2012-10-15)
Library version: 1.02.67-RHEL5 (2011-10-14)
Driver version: 4.11.6
但没有任何改变。
更新 4 月 6 日星期六 18:51:31 ICT 2013
/lib/modules/2.6.18-274.el5/kernel/drivers/md/
|-- dm-crypt.ko
|-- dm-emc.ko
|-- dm-hp-sw.ko
|-- dm-log.ko
|-- dm-mem-cache.ko
|-- dm-message.ko
|-- dm-mirror.ko
|-- dm-mod.ko
|-- dm-multipath.ko
|-- dm-raid45.ko
|-- dm-rdac.ko
|-- dm-region_hash.ko
|-- dm-round-robin.ko
|-- dm-snapshot.ko
|-- dm-zero.ko
|-- faulty.ko
|-- linear.ko
|-- multipath.ko
|-- raid0.ko
|-- raid1.ko
|-- raid10.ko
|-- raid456.ko
`-- xor.ko
/lib/modules/2.6.34.14/kernel/drivers/md/
|-- dm-crypt.ko
|-- dm-log.ko
|-- dm-mirror.ko
|-- dm-mod.ko
|-- dm-multipath.ko
|-- dm-region-hash.ko
|-- dm-round-robin.ko
|-- dm-snapshot.ko
|-- dm-zero.ko
|-- faulty.ko
|-- linear.ko
|-- multipath.ko
|-- raid0.ko
|-- raid1.ko
|-- raid10.ko
|-- raid456.ko
`-- raid6_pq.ko
更新 4 月 10 日星期三 11:22:54 ICT 2013
在源文件夹中搜索,我找到了这个:
# grep -lr 'Error creating mirror dirty log' /usr/src/linux-2.6.34.14
/usr/src/linux-2.6.34.14/drivers/md/dm-raid1.c
dm-raid1.c
:
static struct dm_dirty_log *create_dirty_log(struct dm_target *ti,
unsigned argc, char **argv,
unsigned *args_used)
{
unsigned param_count;
struct dm_dirty_log *dl;
if (argc < 2) {
ti->error = "Insufficient mirror log arguments";
return NULL;
}
if (sscanf(argv[1], "%u", ¶m_count) != 1) {
ti->error = "Invalid mirror log argument count";
return NULL;
}
*args_used = 2 + param_count;
if (argc < *args_used) {
ti->error = "Insufficient mirror log arguments";
return NULL;
}
dl = dm_dirty_log_create(argv[0], ti, mirror_flush, param_count,
argv + 2);
if (!dl) {
ti->error = "Error creating mirror dirty log";
return NULL;
}
return dl;
}
dm-log.c
:
struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
struct dm_target *ti,
int (*flush_callback_fn)(struct dm_target *ti),
unsigned int argc, char **argv)
{
struct dm_dirty_log_type *type;
struct dm_dirty_log *log;
log = kmalloc(sizeof(*log), GFP_KERNEL);
if (!log)
return NULL;
type = get_type(type_name);
if (!type) {
kfree(log);
return NULL;
}
log->flush_callback_fn = flush_callback_fn;
log->type = type;
if (type->ctr(log, ti, argc, argv)) {
kfree(log);
put_type(type);
return NULL;
}
return log;
}
你为什么首先使用 ddf 格式的 raid 阵列?您似乎正试图用 激活它
dmraid
,它已经好几年没有任何发展,而且或多或少已经贬值了。mdadm
得到更好的支持,最近的版本确实支持 ddf 格式,尽管它的本机格式是首选。确保你已经加载了 dm-log 模块。
感谢所有朋友的帮助,问题解决了。
在第一次尝试时,他注释掉了 中的行
ti->error = "Error creating mirror dirty log";
,dm-raid1.c
并插入了一些调试行dm-log.c
以确定导致上述错误的原因:然后重新编译内核,我们得到:
在第二次尝试中,他想获得 的值
type_name
:使用上述方法继续跟踪到
core_ctr
和:create_log_context
请注意,黑心符号的 ASCII 码是... 3。
不知道作者为什么把 和 混
core_ctr
在一起disk_ctr
。但是参数的数量type_name
是3,所以他通过将以下内容插入到结构中来core
修剪最后一个参数 ( ):block_on_error
dm_dirty_log_create
让我们看看发生了什么:
根据 Ceph 错误4286,FUSE 至少需要 2.6.24 内核才能使用 atomic_o_trunc。我找到了2.6.25 的 RPM。该内核似乎适用于 HPC 集群。
我认为您的上述问题是由于 Red Hat 对其内核版本进行了大量修改。根据您的硬件配置和软件要求,它使尝试更新的内核变得更加困难。