- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
pvcreate代码分析
LVM代码分析
探索pvcreate函数大致的执行过程
pvcreate
/*
* 代码1
*/
int pvcreate(struct cmd_context *cmd, int argc, char **argv)
{
int i;
int ret = ECMD_PROCESSED;
struct pvcreate_params pp;
struct physical_volume *pv;
/* 给pp设置默认值 */
pvcreate_params_set_defaults(pp);
/* 检查pvcreate需要保存到磁盘的参数,如restorefile、uuid,并传给pp结构体 */
if (!pvcreate_restore_params_validate(cmd, argc, argv, pp)) {
return EINVALID_CMD_LINE;
}
/* 检查pvcreate不需要保存到磁盘的参数(见man pvcreate),并传给pp结构体 */
if (!pvcreate_params_validate(cmd, argc, argv, pp)) {
return EINVALID_CMD_LINE;
}
/* 将用户输入的所有device转换成PV */
for (i = 0; i argc; i++) {
if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) {
log_error(Cant get lock for orphan PVs);
return ECMD_FAILED;
}
dm_unescape_colons_and_at_signs(argv[i], NULL, NULL);
/* 单独转换一个device,详见代码2 */
if (!(pv = pvcreate_single(cmd, argv[i], pp, 1))) {
stack;
ret = ECMD_FAILED;
}
unlock_vg(cmd, VG_ORPHANS);
if (sigint_caught())
return ret;
}
return ret;
}
pvcreate_single
/*
* 代码2
* pvcreate_single() - initialize a device with PV label and metadata area
*
* Parameters:
* - pv_name: device path to initialize
* - pp: parameters to pass to pv_create; if NULL, use default values
*
* Returns:
* NULL: error
* struct physical_volume * (non-NULL): handle to physical volume created
*/
struct physical_volume * pvcreate_single(struct cmd_context *cmd,
const char *pv_name,
struct pvcreate_params *pp,
int write_now)
{
struct physical_volume *pv = NULL;
struct device *dev;
struct dm_list mdas;
struct pvcreate_params default_pp;
char buffer[64] __attribute__((aligned(8)));
/* 给pp设置默认值,pp保存的是pvcreate命令创建PV时的参数。可以由用户指定,否则使用默认值 */
pvcreate_params_set_defaults(default_pp);
if (!pp) // 如果pp未定义,则使用默认的pp值
pp = default_pp;
if (pp-idp) {// 如果UUID存在(比如用户指定一个UUID)
if ((dev = lvmcache_device_from_pvid(cmd, pp-idp, NULL, NULL)) // 查看此UUID是否在lvm缓存中已经存在对应的设备
(dev != dev_cache_get(pv_name, cmd-filter))) { // 在缓存中查看用户输入的pv_name对应的设备
if
您可能关注的文档
最近下载
- 电子数据取证技术PPT课件(共12章)第3章取证技术基础.pptx VIP
- 电子数据取证技术PPT课件(共12章)第2章电子数据取证规范.pptx VIP
- 北师大版三年级数学上册 (长方形周长)周长课件教学.pptx
- 23G518-1门式刚架轻型房屋钢结构(无吊车).docx
- 电子数据取证技术PPT课件(共12章)第5章UNIXLinux操作系统取证技术.pptx VIP
- 砥砺身心成就未来主题班会.pptx VIP
- 2024年《公文写作与处理》考试题库大全(含答案).pdf VIP
- 电子数据取证技术PPT课件(共12章)第9章网络取证技术.pptx VIP
- 建设银行笔试试题.docx
- 电子数据取证技术PPT课件(共12章)第4章Windows操作系统取证技术.pptx VIP
文档评论(0)