首页 > 其他分享 >ceph_mount

ceph_mount

时间:2024-11-21 14:39:57浏览次数:1  
标签:KERN fsc res mount ceph out

ceph_mount流程

mount -t ceph $(hostname):6789:/ /mnt/ceph/ -o name=admin,secret=$(ceph auth get-key client.admin)

执行这条ceph挂载命令时会发生什么?

/var/log/messages中只看到这两条相关日志,但远远不够,准备看看内核代码打开内核日志调试继续

Nov xx 11:03:56 node1 kernel: libceph: mon0 192.xxx.xxx.xxx:6789 session established
Nov xx 11:03:56 node1 kernel: libceph: client50981349 fsid ed69ef4c-63ed-436f-a733-c53c0037105d

日志级别可以通过/proc/sys/kernel/printk文件来修改

先来看看这个文件初始是什么样子

[root@node1 ~]# cat /proc/sys/kernel/printk
4	4	1	7

这四个值的定义可以在kernel/printk.c中找到

int console_printk[4] = {
	DEFAULT_CONSOLE_LOGLEVEL,	/* console_loglevel */
	DEFAULT_MESSAGE_LOGLEVEL,	/* default_message_loglevel */
	MINIMUM_CONSOLE_LOGLEVEL,	/* minimum_console_loglevel */
	DEFAULT_CONSOLE_LOGLEVEL,	/* default_console_loglevel */
};

而内核日志级别有以下七种

#define KERN_EMERG	KERN_SOH "0"	/* system is unusable */
#define KERN_ALERT	KERN_SOH "1"	/* action must be taken immediately */
#define KERN_CRIT	KERN_SOH "2"	/* critical conditions */
#define KERN_ERR	KERN_SOH "3"	/* error conditions */
#define KERN_WARNING	KERN_SOH "4"	/* warning conditions */
#define KERN_NOTICE	KERN_SOH "5"	/* normal but significant condition */
#define KERN_INFO	KERN_SOH "6"	/* informational */
#define KERN_DEBUG	KERN_SOH "7"	/* debug-level messages */

#define KERN_DEFAULT	KERN_SOH "d"	/* the default kernel loglevel */

只需要调整对应数字就可以,比如

echo 7 7 1 7 > /proc/sys/kernel/printk
修改完成后,通过 sysctl -p 应用配置

方法二:
确保/etc/rsyslog.conf文件中 #kern.* 注释被取消!
systemctl restart rsyslog
这样内核产生的所有日志信息都会被记录到 后面文件中,包括 dout 产生的调试信息。

补充:
dmesg 的信息在环缓冲区中,只包含最新的内核日志;
/var/log/messages 是磁盘上的文件,保留较长时间的日志记录。

接下来看代码!!!

ceph mount过程,主要在fs/ceph/super.c文件中,从init_ceph开始

static int __init init_ceph(void)
{
	int ret = init_caches();
	if (ret)
		goto out;

	ceph_flock_init();
	ceph_xattr_init();
	ret = register_filesystem(&ceph_fs_type);
	if (ret)
		goto out_xattr;
	ret = ceph_register_sysctl();
	if (ret < 0)
		goto out_fs;
	pr_info("loaded (mds proto %d)\n", CEPH_MDSC_PROTOCOL);

	return 0;
out_fs:
	unregister_filesystem(&ceph_fs_type);
out_xattr:
	ceph_xattr_exit();
	destroy_caches();
out:
	return ret;
}

进入到register_filesystem(&ceph_fs_type),注册ceph文件系统

static struct file_system_type ceph_fs_type = {
	.owner		= THIS_MODULE,
	.name		= "ceph",
	.mount		= ceph_mount,
	.kill_sb	= ceph_kill_sb,
	.fs_flags	= FS_RENAME_DOES_D_MOVE,
};

ceph_mount进行初始化挂载,会解析挂载选项,创建文件客户端,初始化mds客户端,然后进入到ceph_real_mount

static struct dentry *ceph_mount(struct file_system_type *fs_type,
		       int flags, const char *dev_name, void *data)
{
	struct super_block *sb;
	struct ceph_fs_client *fsc;
	struct dentry *res;
	int err;
	int (*compare_super)(struct super_block *, void *) = ceph_compare_super;
	struct ceph_mount_options *fsopt = NULL;
	struct ceph_options *opt = NULL;

	dout("ceph_mount\n");

#ifdef CONFIG_CEPH_FS_POSIX_ACL
	flags |= MS_POSIXACL;
#endif
	err = parse_mount_options(&fsopt, &opt, flags, data, dev_name);
	if (err < 0) {
		res = ERR_PTR(err);
		goto out_final;
	}

	/* create client (which we may/may not use) */
	fsc = create_fs_client(fsopt, opt);
	if (IS_ERR(fsc)) {
		res = ERR_CAST(fsc);
		destroy_mount_options(fsopt);
		ceph_destroy_options(opt);
		goto out_final;
	}

	err = ceph_mdsc_init(fsc);
	if (err < 0) {
		res = ERR_PTR(err);
		goto out;
	}

	if (ceph_test_opt(fsc->client, NOSHARE))
		compare_super = NULL;
	sb = sget(fs_type, compare_super, ceph_set_super, flags, fsc);
	if (IS_ERR(sb)) {
		res = ERR_CAST(sb);
		goto out;
	}

	if (ceph_sb_to_client(sb) != fsc) {
		ceph_mdsc_destroy(fsc);
		destroy_fs_client(fsc);
		fsc = ceph_sb_to_client(sb);
		dout("get_sb got existing client %p\n", fsc);
	} else {
		dout("get_sb using new client %p\n", fsc);
		err = ceph_register_bdi(sb, fsc);
		if (err < 0) {
			res = ERR_PTR(err);
			goto out_splat;
		}
	}

	res = ceph_real_mount(fsc);
	if (IS_ERR(res))
		goto out_splat;
	dout("root %p inode %p ino %llx.%llx\n", res,
	     res->d_inode, ceph_vinop(res->d_inode));
	return res;

out_splat:
	ceph_mdsc_close_sessions(fsc->mdsc);
	deactivate_locked_super(sb);
	goto out_final;

out:
	ceph_mdsc_destroy(fsc);
	destroy_fs_client(fsc);
out_final:
	dout("ceph_mount fail %ld\n", PTR_ERR(res));
	return res;
}

ceph_real_mount


标签:KERN,fsc,res,mount,ceph,out
From: https://www.cnblogs.com/itsfei/p/18560723

相关文章

  • ceph的部署方式
    方式一:ceph-deploy(ceph的原生部署工具):●(1)ceph-deploy是一种部署ceph的方法,它仅依赖于SSH访问服务器、而后借助sudo和一些Python模块就可以实现部署。●(2)它完全在工作站(管理主机)上运行,不需要任何服务、数据库或类似的东西。●(3)它不是一个通用的部署系统,它只是为......
  • Exadata X6-2 Normal冗余的磁盘组,不同存储节点同时损坏两块磁盘,导致ASM磁盘组dismount
    1.故障概述早晨8点左右,驻场同事打来电话,反馈Exadata上的ACFS文件系统全部消失,所有的OGG链路全部中断,业务影响范围非常大,几乎所有的核心业务都受到影响。让同事立即检查存储软件服务状态,发现所有存储节点的存储服务运行正常,但cell07和cell09节点各自损坏了一块硬盘。听到这个反馈......
  • ceph的部署与简单使用
    OSD(ObjectStorageDaemon,守护进程ceph-osd)是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。通常至少需要3个OSD来实现冗余和......
  • 一体机场景ceph高可用介绍
    本文分享自天翼云开发者社区《一体机场景ceph高可用介绍》,作者:b****n一体机场景使用ceph开源架构作为存储系统的主体架构,原生方案支持存储数据高可用性,包括副本数可以灵活控制/支持故障域分隔,数据强一致性/多种故障场景自动进行修复自愈/没有单点故障,自动管理。部署形态存储......
  • P2123 皇后游戏 / [USACO12JAN] Mountain Climbing S / P1248 加工生产调度 题解
    P2123皇后游戏/[USACO12JAN]MountainClimbingS/P1248加工生产调度先来看P2123。我们把这个特别重要的公式打出来:\[c_{i}=\begin{cases}a_{1}+b_{1}&,i=1\\\displaystyle\max\left\{c_{i-1},\sum_{j=1}^{i}a_{j}\right\}+b_{i}&,2\leqi\leqn\end{......
  • 闯关leetcode——3285. Find Indices of Stable Mountains
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/find-indices-of-stable-mountains/description/内容Therearenmountainsinarow,andeachmountainhasaheight.Youaregivenanintegerarrayheightwhereheight[i]represen......
  • Linux常用命令——mount 命令详解
    Linux常用命令——mount命令详解命令介绍:mount命令在Linux系统中用于将文件系统挂载到指定的目录。它是系统管理中非常重要的命令之一,支持多种参数选项。基本语法:mount[选项]设备文件夹常用选项和参数:-t,--types:指定要挂载的文件系统类型,如ext4、vfat、nt......
  • JuiceFS CSI:Mount Pod 的平滑升级及其实现原理
    当集群中需要升级MountPod时,目前推荐的方式是更新配置后重新挂载应用Pod进行滚动升级,但这种升级方式的问题在于需要业务重启。如果对业务的使用模式很清楚时,比如没有数据写入等,也可以选择手动重建MountPod的方式。在更新配置后,手动删除已有的MountPod,并等待其重建,同时......
  • ceph 数据均衡调整
    情况一:cephosdfull-osd磁盘满的处理根据Ceph官方文档中的描述,当一个OSDfull比例达到95%时,集群将不接受任何CephClient端的读写数据的请求。所以导致虚拟机在重启时,无法启动的情况。 解决方法方法一:  根据官方的建议,首选的方案是添加osd磁盘,添加后将触发数据的重新均......
  • <十七>Ceph 块存储理论与实践
    Ceph集群的检查可以简化为MON状态检查、OSD状态检查和PG状态检查。上一章节我们重点介绍了MON的状态和维护方法。本章节将重点介绍OSD状态和块存储常用命令。Tips:如果是故障排查,请在确保MON状态正常的情况下进行OSD和PG状态检查。Tips:下面的简单理解只是......