代码拉取完成,页面将自动刷新
Author | 李峰 |
---|---|
Date | 2020-08-28 |
lifeng68@huawei.com |
Driver模块计划支持overlay2和devicemapper两种驱动,实现如下功能:
初始化驱动、返回驱动状态、返回驱动的metadata信息、Cleanup驱动、创建只读层、创建读写层、删除层、获取层rootfs路径、释放层。
对于overlay2驱动还需要实现quota功能。
int graphdriver_init(const char *name, const char *isulad_root, char **storage_opts,
size_t storage_opts_len);
int graphdriver_create_rw(const char *id, const char *parent, struct driver_create_opts *create_opts);
int graphdriver_create_ro(const char *id, const char *parent, const struct driver_create_opts *create_opts);
int graphdriver_rm_layer(const char *id)
char *graphdriver_mount_layer(const char *id, const struct driver_mount_opts *mount_opts)
int graphdriver_umount_layer(const char *id)
bool graphdriver_layer_exists(const char *id)
int graphdriver_apply_diff(const char *id, const struct io_read_wrapper *content, int64_t *layer_size)
int graphdriver_get_layer_metadata(const char *id, json_map_string_string *map_info)
struct graphdriver_status *graphdriver_get_status(void)
int graphdriver_cleanup(void)
Driver 初始化初始化流程:
Overlay 模块初始化流程:
Devicemapper模块初始化流程:
struct driver_create_opts {
char *mount_label;
json_map_string_string *storage_opt;
};
struct driver_create_opts {
char *mount_label;
json_map_string_string *storage_opt;
};
根据传入的ID调用实际的驱动rm_layer接口,实现删除对应layer
struct driver_mount_opts {
char *mount_label;
char **options;
size_t options_len;
};
根据传入的ID调用实际的驱动umount_layer接口,实现卸载对应layer
根据传入的ID调用实际的驱动exists接口,实现查询对应的层是否存在
struct io_read_wrapper {
void *context;
io_read_func_t read;
io_close_func_t close;
};
根据传入的ID调用实际的驱动apply_diff接口,实现解压数据
overlay驱动 解压数据时,需要对overlay .whout 文件进行特殊处理
如果是.wh.开头的文件,标识为该文件被删除,需要转换为char字符串数据,后续解压需要跳过该文件,比如删除home目录后,对应层数据解压到本地,home对应的需要创建同名的字符设备
drwxr-xr-x 4 root root 55 Mar 16 15:52 .
drwxrwxrwt. 26 root root 4096 Mar 26 12:02 ..
drwxr-xr-x 2 root root 38 Mar 16 12:49 etc
c--------- 1 root root 0, 0 Mar 16 15:52 home
-rw-r--r-- 1 root root 140543 Mar 13 12:12 index.html
dr-xr-x--- 2 root root 26 Mar 13 12:13 root
解压数据应当chroot到对应目录下,防止软链接攻击
根据传入的ID调用实际的驱动get_layer_metadata接口,实现查询对应的层的元数据
overlay支持查询的元数据如下
key | value |
---|---|
WorkDir | overlay层的work路径 |
MergedDir | overlay层的work路径 |
UpperDir | overlay层的diff路径 |
LowerDir | overlay层底层路径,包含所有的底层路径,以:分割 |
struct graphdriver_status {
char *driver_name;
char *backing_fs;
char *status;
};
查询驱动的状态
支持查询的驱动状态如下
key | value |
---|---|
driver_name | 驱动名称 |
backing_fs | storage 所在的文件系统名称 |
status | 对应底层驱动的状态字符串 overlay 支持的状态返回信息有: Backing Filesystem Supports d_type: true |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。