CN116257326B - 容器存储空间的管理方法及装置 - Google Patents
容器存储空间的管理方法及装置 Download PDFInfo
- Publication number
- CN116257326B CN116257326B CN202310525455.4A CN202310525455A CN116257326B CN 116257326 B CN116257326 B CN 116257326B CN 202310525455 A CN202310525455 A CN 202310525455A CN 116257326 B CN116257326 B CN 116257326B
- Authority
- CN
- China
- Prior art keywords
- file system
- function
- prjquoa
- data partition
- storage space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种容器存储空间的管理方法及装置,该方法包括:在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能;启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序在容器创建过程中实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。本发明解决了目前一些宿主系统下,如Android宿主系统,容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
Description
技术领域
本发明涉及云计算技术领域,尤其涉及一种容器存储空间的管理方法及装置。
背景技术
随着云游戏、云手机等云应用领域的发展,在Android宿主系统中使用容器化管理实现更高的资源使用效率已经逐渐成为新的技术方向。同一个Android宿主系统中,不同容器之间存在着资源的竞争,因此容器之间资源隔离和分配管理成为了一个很重要的问题。
一般来说容器使用的资源主要包括CPU、GPU、内存、存储、网络等,容器服务(例如docker等)一般提供一部分资源隔离和分配的机制,但对于存储空间资源的限制管理,具有较大的局限性。具体的,针对Android宿主系统,容器服务通常无法直接支持存储空间的限制。这是因为容器服务对存储空间的限制功能是由使用环境限制的,例如Docker服务仅支持对底层文件系统为xfs的存储系统进行存储空间限制的设置,而Android宿主系统通常使用ext4文件系统(较老的Android版本)或f2fs文件系统(较新的Android版本),因此无法直接使用容器服务的存储空间限制功能。而其他存储空间的限制方法,例如“预创建固定大小的文件系统并挂载到指定容器的挂载点,实现对存储空间的限制”,由于其需要预先创建固定大小的文件系统,在容器实际使用该存储空间之前就需要在磁盘空间中占用固定大小的存储空间,而实际容器可能在相当长的时间中都未完全使用该固定大小的存储空间,导致实际存储空间浪费、使用不灵活等问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的容器存储空间的管理方法及装置。
本发明的一个方面,提供了一种容器存储空间的管理方法,所述方法包括:
在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能;
启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。
第二方面,本发明还提供了一种容器存储空间的管理装置,所述装置包括:
系统配置模块,用于在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能;
配额限制模块,用于启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。
本发明实施例提供的容器存储空间的管理方法及装置,通过在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持prjquota功能,然后启动预先设置的运行在宿主系统的目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,解决了宿主系统中容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例提供的容器存储空间的管理方法的流程图;
图2为本发明另一实施例提供的容器存储空间的管理方法的流程图;
图3为本发明再一实施例提供的容器存储空间的管理方法的流程图;
图4为本发明又一实施例提供的容器存储空间的管理方法的流程图;
图5为本发明实施例提供的容器存储空间的管理装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
本发明提出一种容器存储空间的管理方法,以解决目前宿主系统下,容器存储空间无法限制的问题,并且具有节约空间、高效伸缩、快速统计、安全等优点。其中,宿主系统包括Android宿主系统、Linux宿主系统等。本发明为通用方法,并不限制宿主系统和容器系统的类型。因Linux宿主系统本身能够通过容器服务提供的功能实现存储空间限制,本发明侧重解决Android宿主系统下的存储空间限制问题。
具体的,Android宿主系统中,容器相关数据均存储于/data分区,Android系统对于该分区支持ext4文件系统和f2fs文件系统两种文件系统。通常较老版本的Android系统使用ext4文件系统,较新版本的Android系统使用f2fs文件系统。Linux内核中支持文件系统的磁盘配额机制quota,该机制能实时统计文件系统的使用情况以及配置文件系统的限额。借助quota机制,能够帮助实现存储空间限制功能。但Android系统默认并未完全实现ext4文件系统和f2fs文件系统的quota机制,无法满足存储空间限制的功能需求,本发明对相关机制进行了实现优化。quota机制支持用户配额usrquota、群组配额grpquota、单一目录配额prjquota三种quota类型,分别可以按照user维度、group维度和project维度进行存储限制设置,由于Android系统使用uid(User id,用户id)和gid(Group id,组id),对不同的应用进行了分组,无法再对容器使用user维度和group维度进行存储限制设置,只能通过project维度进行存储限制设置。
图1示意性示出了本发明一个实施例的容器存储空间的管理方法的流程图。参照图1,本发明实施例的容器存储空间的管理方法具体包括以下步骤:
S01、在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能。其中,超级块主要存放了物理磁盘中文件系统结构的相关信息,所有有关文件系统元信息的配置都在超级块中。
S02、启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。
本发明实施例提供的容器存储空间的管理方法,通过在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持prjquota功能,然后启动预先设置的运行在宿主系统的目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,解决了宿主系统中容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
图2示意性示出了本发明另一个实施例的容器存储空间的管理方法的流程图。参照图2,本发明实施例的容器存储空间的管理方法具体包括以下步骤:
S11、在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统。
S12、在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能。
本发明实施例中,在文件系统创建过程中对所述文件系统的超级块进行初始化配置的实现方式包括:在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能;或,在文件系统创建过程中以支持prjquota功能的方式创建文件系统。
具体的,对于ext4文件系统,在ext4文件系统创建阶段就以支持prjquota的方式创建,也可以在文件系统创建后使用tune2fs命令对文件系统进行修改使其支持prjquota功能。考虑到升级的便利性,优选地,本发明可以在Android宿主系统构建阶段,采用默认方式(不支持prjquota功能)创建文件系统,在系统启动初始化阶段通过对/data分区的ext4文件系统的挂载参数进行调整使其支持prjquota功能。其中,tune2fs命令用于实现系统管理员在Linux ext2、ext3或ext4文件系统上调整各种可调的文件系统参数。
对于f2fs文件系统,在较新版本的Linux内核中支持f2fs文件系统的prjquota功能,需要在超级块中有相应的初始化。Android宿主系统并未包含有修改f2fs文件系统的工具,仅能在创建文件系统时加入prjquota的功能支持。考虑到升级的便利性,本发明在Android宿主系统构建阶段,采用默认方式(不支持prjquota功能)创建文件系统,在系统启动阶段通过重新创建支持prjquota的f2fs文件系统,使其支持prjquota功能。
S13、启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。
本发明在创建完成支持prjquota功能的文件系统后,实现一套用户空间配置机制,通过启动预先设置的运行在宿主系统的目标程序,能够对容器的存储空间限制进行配额限制,实现容器服务的存储空间限制功能。
本发明实施例提供的容器存储空间的管理方法,通过在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,并在在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建以使文件系统支持prjquota功能,对于支持prjquota功能的文件系统,然后本发明启动预先设置的运行在宿主系统的目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,解决了宿主系统中容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
在本发明实施例中,如图3所示,步骤S12中的在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能,具体包括以下步骤:
S121、当宿主系统所支持文件系统为ext4文件系统时,在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数。进一步地,所述在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数,包括:判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用tune2fs命令修改/data分区的ext4文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致。其中,fstab配置文件是linux下比较重要的配置文件,它包含了系统在启动时挂载文件系统和存储设备的详细信息。
本发明可以在Android宿主系统构建阶段,采用默认方式(不支持prjquota功能)创建文件系统,在系统启动初始化阶段通过tune2fs命令对/data分区的ext4文件系统的挂载参数进行调整使其支持prjquota功能。具体的,Android宿主系统启动过程中会根据fstab配置文件进行文件系统的挂载。对于挂载文件系统的逻辑(包括读取fstab配置文件,文件系统的检查与调整,挂载等),均在/system/core/fs_mgr代码模块中,该模块会被编译成静态库,最终被启动流程init和服务管理vold引用。实际上,userdata最终挂载到/data就是在vold中调用的,在这个过程中,会经过短暂的取消挂载unmount并且调用tune2fs命令对文件系统进行调整(包括配额quota、大小size等)和调用e2fsck工具对文件系统进行检查。对文件系统的配额调整tune_quota的过程仅支持usrquota和grpquota选项,并未支持prjquota。本发明修改配额调整的实现逻辑,判断fstab配置文件中/data挂载选项中是否包含prjquota参数,以及当前/data分区文件系统是否已经启用prjquota功能,当两者一致时,无需做改动,当两者不一致时,调用tune2fs命令修改/data分区的ext4文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致。至此实现了Android宿主系统动态修改prjquota功能的开关,它需要修改fstab配置文件中/data分区挂载选项并重启系统即可生效。其中,vold服务: Volume Daemon,用于管理和控制Android平台外部存储设备的后台进程,这些管理和控制,包括SD卡的插拔事件检测/SD卡挂载/卸载/格式化等。e2fsck命令,用于修复文件系统,如果文件系统出现问题,可以使用 e2fsck 工具检查并修复。
S122、当宿主系统所支持文件系统为f2fs文件系统时,在宿主系统启动过程中调用vold服务的格式化format功能采用支持prjquota功能的方式重新创建f2fs文件系统挂载到/data分区。进一步地,所述在宿主系统启动过程中调用vold服务的格式化format功能采用支持prjquota功能的方式重新创建f2fs文件系统挂载到/data分区,包括:判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用vold服务的format功能以与挂载选项中prjquota参数一致的选项重新创建f2fs文件系统挂载到/data分区。
本发明可以在Android宿主系统构建阶段,采用默认方式(不支持prjquota功能)创建文件系统,在系统启动阶段通过vold服务的format功能(make_f2fs工具)重新创建支持prjquota的f2fs文件系统,使其支持prjquota功能。注意,prjquota功能需要extra_attr机制支持,因此在创建f2fs文件系统时,除了添加prjquota以外,还需要添加扩展属性extra_attr。具体的,Android宿主系统启动过程中会根据fstab配置文件进行文件系统的挂载。在此过程中,判断fstab中/data挂载选项中是否包含prjquota参数,以及当前/data分区文件系统是否已经启用prjquota功能,当两者一致时,无需做改动,当两者不一致时,则调用vold服务的format功能以与挂载选项中prjquota参数一致的选项重新创建f2fs文件系统挂载到/data分区。至此实现了Android宿主系统动态修改prjquota功能的开关,它需要修改fstab配置文件中/data分区挂载选项并重启系统即可生效。
本发明一个实施例中,当接收到超级用户对应的第一目标进程对数据目录对应存储空间的使用请求时,若所述第一目标进程所属命名空间与宿主系统初始命名空间相同,则允许所述第一目标进程的使用请求,否则拒绝所述第一目标进程的使用请求。具体的,当接收到超级用户对应的第一目标进程对数据目录对应存储空间的使用请求时,判断第一目标进程所属命名空间是否与Android宿主系统初始命名空间相同,若相同,则允许所述第一目标进程的使用请求,否则拒绝所述第一目标进程的使用请求。
本发明一个实施例中,当接收到特权用户对应的第二目标进程对数据目录对应存储空间进行限制设置修改的调用请求时,若校验获知所述第二目标进程拥有调用权限,且所述第二目标进程所属命名空间与宿主系统初始命名空间相同,则允许所述第二目标进程的调用请求对应的调用,否则拒绝所述第二目标进程的调用请求。具体的,当接收到第二目标进程对数据目录对应存储空间进行修改限制的调用请求时,校验所述第二目标进程是否拥有调用权限;若所述第二目标进程拥有调用权限,判断第二目标进程所属命名空间是否与Android宿主系统初始命名空间相同;若相同,则允许所述第二目标进程的调用请求对应的调用,否则拒绝所述第二目标进程的调用请求。
实际应用中许多在Android宿主系统上运行的容器,是以超级用户运行的,quota机制对于超级用户是不做限制的,仅对普通用户限制。另外一些容器是被授予特权(privileged)或授予高级别权能(capability)的,在容器内能够通过quotactl系统调用对其存储空间限制做修改,这样使存储空间的限制变的形同虚设,该问题极大的影响了存储空间限制功能的有效性以及存储数据的安全性。其中,quotactl()调用可操纵磁盘配额。
针对内核中对超级用户忽略quota限制的情况,在内核中修改是否忽略quota的实现逻辑,增加判断当前进程所属命名空间是否与Android宿主系统初始命名空间相同,若不相同,说明数据变化来自于容器,即便是超级用户也不忽略quota机制,保证存储空间限制的有效性。
针对特权用户能够在容器内修改存储空间限制设置的问题,本发明实施例在内核中修改quotactl的安全控制逻辑,在校验进程是否拥有相应权能的同时,增加判断当前进程所属命名空间是否与Android宿主系统初始命名空间相同,若相同,说明quotactl调用来自于Android宿主系统,才允许调用,若不相同,则说明quotactl调用来自于容器,拒绝调用,保证存储空间限制的有效性。
本发明一个实施例中,如图4所示,步骤S13中的启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,具体包括如下步骤:
S131、创建容器的数据目录;
S132、启动预先设置的运行在宿主系统的目标程序设置数据目录的存储空间上限阈值和/或存储文件数量上限阈值;
S133、创建容器并绑定所述数据目录。
在发明实施例中,除了实现内核与Android宿主系统支持prjquota功能外,还提供一套机制能够方便灵活的配置每个容器的存储空间限制,获取每个容器当前存储空间使用情况等。
具体的,在Linux系统中,有相应的一些用户空间的配置程序方便的对prjquota进行配置,但在Android宿主系统中没有这种工具。本发明实现了一种运行在Android宿主系统的prjquota配置工具即目标程序,称为QuotaTool。
目标程序QuotaTool主要包含以下功能:
1、设置某个数据目录的存储空间上限阈值。具体的,每次设置数据目录的存储空间上限,会覆盖该目录之前的存储空间上限设置;当为某个目录设置存储空间上限为0时,会取消该目录的存储空间上限设置;当目录中使用存储空间达到设置的存储空间上限时,继续写入数据将会发出系统错误。
其中,设置某个数据目录的存储空间上限的实现具体如下:
对该目录设置project id,Android宿主系统并不支持chattr和lsattr工具,可以通过系统调用ioctl对文件操作实现,也可以借助第三方工具busybox实现。其中,BusyBox是一个开源项目,它提供了大约400个常见 UNIX/Linux命令的精简实现;ioctl是设备驱动程序中设备控制接口函数;chattr与lsattr命令分别用于改变和显示文件属性。具体步骤如下:
①根据该目录路径,计算出其唯一的project id;
②使用chattr -p修改该目录的project id为上述计算值;
③使用chattr +P使该目录中创建的子目录和文件能够继承相同的project id;
④通过lsattr -p检查该目录设置的project id为符合预期值;
⑤通过quotactl系统调用,设置该project id的bhardlimit值为本次预期设置的存储空间上限值。
2、设置某个数据目录的存储文件数量上限阈值。具体的,每次设置存储文件数上限,会覆盖该目录之前的存储文件数上限设置;当为某个目录设置存储文件数上限为0时,会取消该目录的存储文件数上限设置;当目录中使用文件数达到设置的存储文件数上限时,继续创建新文件将会发出系统错误。
其中,设置某个数据目录的存储文件数上限的实现具体如下:
① 根据该目录路径,计算出其唯一的project id;
②使用chattr -p修改该目录的project id为上述计算值;
③使用chattr +P使该目录中创建的子目录和文件能够继承相同的project id;
④通过lsattr -p检查该目录设置的project id为符合预期值;
⑤通过quotactl系统调用,设置该project id的ihardlimit值为本次预期设置的存储文件数上限值。
3、查询某个目录的存储空间使用情况。
4、查询某个目录的存储文件数量使用情况。
具体的,本发明实施例在容器运行过程中还能够查询数据目录的存储空间使用状态和/或存储文件数量使用状态,并根据存储空间使用状态和/或存储文件数量使用状态动态的调整存储空间上限阈值和/或存储文件数量上限阈值。
其中,查询某个数据目录的存储空间使用情况的实现具体如下:
①根据该目录路径,计算出其唯一的project id;
②通过quotactl系统调用,获取该project id的curspace值,即当前的存储空间使用情况。
其中,查询某个数据目录的存储文件数使用情况的实现具体如下:
①根据该目录路径,计算出其唯一的project id;
②通过quotactl系统调用,获取该project id的curinodes值,即当前的存储文件数使用情况。
传统的存储空间管理方法,通过预创建固定大小的文件系统并挂载到指定容器的挂载点,实现对存储空间的限制,由于其需要预先创建固定大小的文件系统,在容器实际使用该存储空间之前就需要在磁盘空间中占用固定大小的存储空间,而实际容器可能在相当长的时间中都未完全使用该固定大小的存储空间,导致实际的存储浪费问题。而且由于其存储空间预先创建并且是固定值,需要在创建前就确定该容器所需的存储空间大小,并且在容器使用该存储空间过程中,无法对存储空间的大小进行动态的伸缩调整,导致使用不灵活的问题。伴随存储空间的限制,通常需要快速获取存储空间的使用情况,包括该容器存储空间限制的大小、该容器当前已使用的大小、该容器当前创建的文件数等,传统的存储空间管理方法统计这些信息,存在速度慢、系统资源消耗大的问题。
针对上述问题本发明通过目标程序QuotaTool,Android宿主系统无需预先分配固定存储空间,能够方便高效的对某个数据目录设置存储空间限制,包括存储空间上限和存储文件数量上限,以对容器的存储空间限制进行动态配置,实现容器存储空间的动态伸缩,提高了存储空间使用效率,并能够获取已配置存储空间限制的容器当前的数据使用情况信息,实现了高效的存储空间统计能力。
在实际生产环境中,Android宿主系统可能并未开启prjquota功能,为了能够后续支持该功能从而达到限制容器存储空间的目的,需要通过系统OTA升级使Android宿主系统支持prjquota功能,即以prjquota功能的方式创建文件系统,从而支持限制容器存储空间功能。在上述内核机制中提到,不论Android宿主系统采用ext4文件系统或是f2fs文件系统,均可以在系统重启时通过识别fstab中的/data分区挂载参数,决定是否使prjquota功能生效,因此在OTA的新版本宿主系统中,需要额外做以下修改:
更新fstab中/data分区的挂载参数,在fstab配置文件中/data分区的挂载参数中添加prjquota。
更新宿主系统启动程序,以在vold服务根据fstab配置文件进行初次挂载过程中,当判断当前/data分区的文件系统未启用prjquota功能且fstab配置文件中/data分区的挂载参数包含prjquota参数时,本次挂载暂时忽略prjquota功能,仍以不支持prjquota功能的方式进行挂载,保证系统正常启动。并在vold服务初次挂载后,对/data分区再次做检查,此时判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能,当两者一致时,无需做改动,当两者不一致时,即若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能时,对于ext4文件系统,则调用tune2fs命令修改/data分区的文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致。对于f2fs文件系统,则调用vold服务的format功能以与挂载选项中prjquota参数一致的选项重新创建f2fs文件系统挂载到/data分区。
更新其他功能,包括QuotaTool等。
通过上述过程,经过OTA升级后,系统在首次重启后能够实现支持对容器存储空间限制的功能。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
此外,本发明实施例还提供了一种容器存储空间的管理装置,所述装置包括用于实现如上实施例所述的容器存储空间的管理方法的功能模块。图5示意性示出了本发明一个实施例的容器存储空间的管理装置的结构示意图。参照图5,本发明实施例的容器存储空间的管理装置具体包括系统配置模块401和配额限制模块402,其中:
系统配置模块401,用于在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持prjquota功能;
配额限制模块402,用于启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制。
进一步地,系统配置模块401,具体用于在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能;或,在文件系统创建过程中以支持prjquota功能的方式创建文件系统。
本发明实施例提供的容器存储空间的管理装置,通过在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,并在在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建以使文件系统支持prjquota功能,对于支持prjquota功能的文件系统,本发明启动预先设置的运行在宿主系统的目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,解决了宿主系统中容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
对于装置实施例而言,其实现过程与本发明实施例提供的容器存储空间的管理方法一致,所能达到的效果也与本申请实施例提供的容器存储空间的管理方法相同,相关之处参见方法实施例的部分说明即可,在此不再赘述。
此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述容器存储空间的管理方法的步骤。
本实施例中,所述容器存储空间的管理方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
此外,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的容器存储空间的管理方法的步骤。例如图1所示的S01~S02。或者,所述处理器执行所述计算机程序时实现上述容器存储空间的管理装置实施例中各模块/单元的功能,例如图5所示的系统配置模块401和配额限制模块402。
本发明实施例提供的容器存储空间的管理方法及装置,通过在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,并在在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建以使文件系统支持prjquota功能,对于支持prjquota功能的文件系统,本发明启动预先设置的运行在宿主系统的目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,解决了宿主系统中容器存储空间无法限制的问题,实现了对容器存储空间的限制管理,有效地提高了容器存储空间的使用效率。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在上面要求保护的实施例的任意之一都可以以任意的组合方式来使用。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (7)
1.一种容器存储空间的管理方法,其特征在于,所述方法包括:
在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能;
启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制;
所述在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持prjquota功能,包括:在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能;或,在文件系统创建过程中以支持prjquota功能的方式创建文件系统;
所述在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能,包括:当宿主系统所支持文件系统为ext4文件系统时,在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数;当宿主系统所支持文件系统为f2fs文件系统时,在宿主系统启动过程中调用vold服务的格式化format功能采用支持prjquota功能的方式重新创建f2fs文件系统挂载到/data分区;
所述在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数,包括: 判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用tune2fs命令修改/data分区的ext4文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致。
2.根据权利要求1所述的方法,其特征在于,所述在宿主系统启动过程中调用vold服务的format功能采用支持prjquota功能的方式重新创建f2fs文件系统挂载到/data分区,包括:
判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;
若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用vold服务的format功能以与挂载选项中prjquota参数一致的选项重新创建f2fs文件系统挂载到/data分区。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到超级用户对应的第一目标进程对数据目录对应存储空间的使用请求时,若所述第一目标进程所属命名空间与宿主系统初始命名空间相同,则允许所述第一目标进程的使用请求,否则拒绝所述第一目标进程的使用请求;或者
当接收到特权用户对应的第二目标进程对数据目录对应存储空间进行限制设置修改的调用请求时,若校验获知所述第二目标进程拥有调用权限,且所述第二目标进程所属命名空间与宿主系统初始命名空间相同,则允许所述第二目标进程的调用请求对应的调用,否则拒绝所述第二目标进程的调用请求。
4.根据权利要求1所述的方法,其特征在于,所述启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制,包括:
创建容器的数据目录;
启动预先设置的运行在宿主系统的目标程序设置数据目录的存储空间上限阈值和/或存储文件数量上限阈值;
创建容器并绑定所述数据目录。
5.根据权利要求4所述的方法,其特征在于,所述启动预先设置的运行在宿主系统的目标程序设置数据目录的存储空间上限阈值和/或存储文件数量上限阈值,包括:
通过目标程序为容器的数据目录设置目录标识project id;
通过调用ioctl函数或第三方工具busybox采用chattr和lsattr工具实现对不同目录标识的数据目录的存储空间上限阈值和/或存储文件数量上限阈值进行设置。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
在fstab配置文件中/data分区的挂载参数中添加prjquota参数;
在vold服务根据fstab配置文件进行初次挂载过程中,若/data分区不支持prjquota并且fstab配置文件中/data分区的挂载参数包含prjquota参数,则以不支持prjquota功能的方式进行挂载;
在vold服务初次挂载后,对/data分区再次做检查,判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;
若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用tune2fs命令修改/data分区的文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致,或调用vold服务的format功能以与挂载选项中prjquota参数一致的选项重新创建f2fs文件系统挂载到/data分区;
更新配置宿主系统的目标程序。
7.一种容器存储空间的管理装置,其特征在于,所述装置包括;
系统配置模块,用于在文件系统创建过程中对所述文件系统的超级块进行初始化配置,以使所述文件系统支持单一目录配额prjquota功能;
配额限制模块,用于启动预先设置的运行在宿主系统的目标程序,以通过所述目标程序实现对容器中数据目录的存储空间和/或存储文件数量的配额限制;
系统配置模块,具体用于在宿主系统构建阶段采用默认的不支持prjquota功能的方式创建文件系统,在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能;或,在文件系统创建过程中以支持prjquota功能的方式创建文件系统;
所述在宿主系统启动过程中对创建的所述文件系统进行挂载参数配置或重新创建,以使所述文件系统支持prjquota功能,包括:当宿主系统所支持文件系统为ext4文件系统时,在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数;当宿主系统所支持文件系统为f2fs文件系统时,在宿主系统启动过程中调用vold服务的格式化format功能采用支持prjquota功能的方式重新创建f2fs文件系统挂载到/data分区;
所述在宿主系统启动过程中调用tune2fs命令修改/data分区的ext4文件系统的挂载参数为挂载选项中的prjquota参数,包括: 判断fstab配置文件中/data分区的挂载选项中是否包含prjquota参数,以及当前/data分区的文件系统是否已经启用prjquota功能;若当前/data分区的文件系统未启用prjquota功能但/data分区的挂载选项中包含prjquota参数,或fstab配置文件中/data分区的挂载选项中未包含prjquota参数但当前/data分区的文件系统启用prjquota功能,则调用tune2fs命令修改/data分区的ext4文件系统的是否启用prjquota功能与挂载选项中的prjquota参数一致。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310525455.4A CN116257326B (zh) | 2023-05-11 | 2023-05-11 | 容器存储空间的管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310525455.4A CN116257326B (zh) | 2023-05-11 | 2023-05-11 | 容器存储空间的管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116257326A CN116257326A (zh) | 2023-06-13 |
CN116257326B true CN116257326B (zh) | 2023-08-29 |
Family
ID=86686472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310525455.4A Active CN116257326B (zh) | 2023-05-11 | 2023-05-11 | 容器存储空间的管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116257326B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7406473B1 (en) * | 2002-01-30 | 2008-07-29 | Red Hat, Inc. | Distributed file system using disk servers, lock servers and file servers |
US7958097B1 (en) * | 2003-09-24 | 2011-06-07 | Parallels Holdings, Ltd. | Method and system for implementation of data storage quota |
CN104391657A (zh) * | 2014-11-24 | 2015-03-04 | 上海盈方微电子有限公司 | 一种安卓系统上挂载多分区存储设备的方法 |
WO2016110004A1 (zh) * | 2015-01-05 | 2016-07-14 | 中兴通讯股份有限公司 | 一种磁盘存储空间管理方法、装置及存储设备 |
CN106095530A (zh) * | 2016-06-08 | 2016-11-09 | 电子科技大学 | 一种多Android系统的容器自动创建及其启动方法 |
CN113190325A (zh) * | 2021-04-09 | 2021-07-30 | 大唐微电子技术有限公司 | 一种容器创建方法及装置 |
CN114756362A (zh) * | 2022-03-09 | 2022-07-15 | 浙江大华技术股份有限公司 | 资源配额管理方法及系统、智能终端、存储介质 |
CN115617511A (zh) * | 2022-09-28 | 2023-01-17 | 中国建设银行股份有限公司 | 资源数据处理的方法、装置、电子设备和存储介质 |
CN115686346A (zh) * | 2021-07-29 | 2023-02-03 | 腾讯科技(深圳)有限公司 | 一种数据存储方法、设备及计算机可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10909165B2 (en) * | 2017-06-20 | 2021-02-02 | Red Hat, Inc. | Sharing filesystems between containers |
US11507622B2 (en) * | 2020-03-25 | 2022-11-22 | The Toronto-Dominion Bank | System and method for automatically managing storage resources of a big data platform |
US20220318208A1 (en) * | 2021-03-31 | 2022-10-06 | Nutanix, Inc. | Virtualized file servers and methods to persistently store file system event data |
-
2023
- 2023-05-11 CN CN202310525455.4A patent/CN116257326B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7406473B1 (en) * | 2002-01-30 | 2008-07-29 | Red Hat, Inc. | Distributed file system using disk servers, lock servers and file servers |
US7958097B1 (en) * | 2003-09-24 | 2011-06-07 | Parallels Holdings, Ltd. | Method and system for implementation of data storage quota |
CN104391657A (zh) * | 2014-11-24 | 2015-03-04 | 上海盈方微电子有限公司 | 一种安卓系统上挂载多分区存储设备的方法 |
WO2016110004A1 (zh) * | 2015-01-05 | 2016-07-14 | 中兴通讯股份有限公司 | 一种磁盘存储空间管理方法、装置及存储设备 |
CN106095530A (zh) * | 2016-06-08 | 2016-11-09 | 电子科技大学 | 一种多Android系统的容器自动创建及其启动方法 |
CN113190325A (zh) * | 2021-04-09 | 2021-07-30 | 大唐微电子技术有限公司 | 一种容器创建方法及装置 |
CN115686346A (zh) * | 2021-07-29 | 2023-02-03 | 腾讯科技(深圳)有限公司 | 一种数据存储方法、设备及计算机可读存储介质 |
CN114756362A (zh) * | 2022-03-09 | 2022-07-15 | 浙江大华技术股份有限公司 | 资源配额管理方法及系统、智能终端、存储介质 |
CN115617511A (zh) * | 2022-09-28 | 2023-01-17 | 中国建设银行股份有限公司 | 资源数据处理的方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116257326A (zh) | 2023-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102799464B (zh) | 虚拟机创建方法及系统、虚拟机重装方法及系统 | |
EP3441876B1 (en) | Patch upgrade-based file processing method and device, terminal, and storage medium | |
US5325532A (en) | Automatic development of operating system boot image | |
EP2765508B1 (en) | Installation method and installation device for application software | |
US6996706B1 (en) | Booting an operating system or running other pre-boot code from a file stored under a different operating system | |
US8433890B2 (en) | Preparing and preserving a system configuration during a hot upgrade | |
US10318275B2 (en) | Software update apparatus and method in virtualized environment | |
US20070169099A1 (en) | Firmware update system for facilitating firmware update in mobile handset | |
US20230393840A1 (en) | File update method and apparatus, device and storage medium | |
CN108073423B (zh) | 一种加速器加载方法、系统和加速器加载装置 | |
US11822515B2 (en) | Identifying and correlating physical devices across disconnected device stacks | |
WO2024198817A1 (zh) | 系统资源的调用方法及装置 | |
CN108062239B (zh) | 一种加速器加载方法、系统和加速器加载装置 | |
US20240281234A1 (en) | Method, apparatus, electronic device and storage medium for installing applications across systems | |
EP2842039A1 (en) | Dynamic memory allocation | |
CN116257326B (zh) | 容器存储空间的管理方法及装置 | |
CN114115920A (zh) | 操作系统部署方法、系统、设备及计算机可读存储介质 | |
CN114675902B (zh) | 基于嵌入式设备的软件版本的管理方法与管理装置 | |
CN109784041B (zh) | 事件处理方法和装置、以及存储介质和电子装置 | |
CN113504997B (zh) | 应用程序安装包文件的处理方法、装置、设备及介质 | |
CN113924548A (zh) | 特征文件批的自动水合 | |
CN114816454B (zh) | 一种pxe服务器部署方法、装置、介质 | |
CN111026422B (zh) | 基于容器的应用数据升级方法、装置及计算机存储介质 | |
CN116541104B (zh) | 程序管理方法、控制装置、平台、设备以及存储介质 | |
CN117667132A (zh) | 操作系统更新方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |