CN115686364A - 一种目录挂载方法及计算设备 - Google Patents
一种目录挂载方法及计算设备 Download PDFInfo
- Publication number
- CN115686364A CN115686364A CN202211287023.6A CN202211287023A CN115686364A CN 115686364 A CN115686364 A CN 115686364A CN 202211287023 A CN202211287023 A CN 202211287023A CN 115686364 A CN115686364 A CN 115686364A
- Authority
- CN
- China
- Prior art keywords
- directory
- container
- host
- storage medium
- mounting
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开一种目录挂载方法及计算设备,该方法应用于计算设备,该计算设备包括主机和第一容器,第一容器运行在主机上,主机包括第一存储介质,该方法包括:在第一容器启动前,将第一主机目录挂载到第一容器目录;第一主机目录为计算设备的主机操作系统上的目录,第一容器目录为第一容器内的目录;在第一容器启动后,基于第一主机目录挂载第一存储介质,以及基于第一容器目录将第一数据存储到第一存储介质;第一数据包括第一容器在运行过程中产生的数据。本申请实施例,在第一容器启动后,可以动态为其添加新的存储介质,实现动态扩容。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种目录挂载方法及计算设备。
背景技术
容器是计算机操作系统中的一种虚拟化技术。该技术可以使得进程运行于相对独立和隔离的环境(包含独立的文件系统、命名空间、资源视图等),能够简化软件的部署流程,增强软件的可移植性和安全性。
目前,为了实现容器中数据的持久化存储,可以在通过docker run创建并运行容器时通过-v参数或--mount参数将一个或多个主机目录挂载到一个或多个容器目录。之后,可以通过该一个或多个容器目录实现容器中数据的持久化存储。但随着数据不断写入该一个或多个容器目录下,该一个或多个容器目录对应的可用存储空间会逐渐减少。当该一个或多个容器目录对应的存储空间使用完之后,容器中新产生的数据无法得到持久的存储,在容器销毁后,这些新产生的数据就会丢失。
发明内容
本申请实施例公开了一种目录挂载方法及计算设备,可以在容器启动后,动态为其添加新的存储介质,实现动态扩容,从而可以解决上述数据丢失的问题。
第一方面公开一种目录挂载方法,该目录挂载方法可以应用于计算设备,也可以应用于计算设备中的模块(例如,芯片),还可以应用于能实现全部或部分计算设备功能的逻辑模块或软件。该计算设备可以包括主机和第一容器,该第一容器运行在该主机上,该主机包括第一存储介质,下面以应用于计算设备为例进行描述。该目录挂载方法可以包括:在该第一容器启动前,将第一主机目录挂载到第一容器目录;该第一主机目录为该计算设备的主机操作系统上的目录,该第一容器目录为该第一容器的目录;在该第一容器启动后,基于该第一主机目录挂载该第一存储介质,以及基于该第一容器目录将第一数据存储到该第一存储介质;该第一数据包括该第一容器在运行过程中产生的数据。
本申请实施例中,计算设备基于第一容器启动前建立的挂载关系(即第一主机目录与第一容器目录的挂载关系),在第一容器启动后(即第一容器运行过程中),可以基于第一主机目录挂载第一存储介质,以及可以基于第一容器目录将第一数据存储到该第一存储介质。这样,可以实现在第一容器启动后,动态为第一容器添加新的存储介质,实现动态扩容,从而可以解决上述数据丢失的问题。并且,在第一容器当前使用的存储介质出现损坏时,通过这种方式也可以动态为其更换新的存储介质。
作为一种可能的实施方式,该基于该第一主机目录挂载该第一存储介质包括:将第二主机目录挂载到第三主机目录,该第二主机目录为该计算设备的主机操作系统上的目录,该第三主机目录为该第一主机目录的子目录,该第一存储介质挂载于该第二主机目录;该基于该第一容器目录将第一数据存储到该第一存储介质包括:将第二容器目录挂载到第三容器目录,该第二容器目录为该第一容器目录下与该第三主机目录对应的子目录,该第三容器目录为该第一容器的目录;通过该第三容器目录将第一数据存储到该第一存储介质。
本申请实施例中,计算设备可以将第二主机目录挂载到第三主机目录,以及可以将第二容器目录挂载到第三容器目录,其中,由于第二容器目录与第三主机目录之间存在对应的映射关系,因此,基于挂载传播机制,可以实现将第二主机目录挂载到第三容器目录。相应地,计算设备可以实现为第一容器动态添加第一存储介质,以及可以通过第三容器目录将第一数据存储到第一存储介质。此外,针对不同的容器,可以通过第一主机目录的不同子目录(如第一容器对应的第三主机目录)和第一容器目录的不同子目录(如第一容器对应的第二容器目录)实现挂载传播,这样,可以便于对多个不同容器进行管理,以及可以避免对其它容器的目录挂载造成影响。
作为一种可能的实施方式,该基于该第一主机目录挂载该第一存储介质包括:将第二主机目录挂载到该第一主机目录,该第二主机目录为该计算设备的主机操作系统上的目录,该第一存储介质挂载于该第二主机目录;该基于该第一容器目录将第一数据存储到该第一存储介质包括:将该第一容器目录挂载到第三容器目录,该第三容器目录为该第一容器的目录;通过该第三容器目录将第一数据存储到该第一存储介质。
本申请实施例中,计算设备也可以直接通过第一主机目录和第一容器目录实现为第一容器动态添加第一存储介质,实现动态扩容。
作为一种可能的实施方式,该基于该第一主机目录挂载该第一存储介质包括:将第一存储介质挂载到该第一主机目录;该基于该第一容器目录将第一数据存储到该第一存储介质包括:通过该第一容器目录将第一数据存储到该第一存储介质。
本申请实施例中,计算设备也可以直接将第一存储介质挂载到第一主机目录,这样,在不依赖其它目录的情况下,计算设备也可以实现为第一容器动态添加第一存储介质。
作为一种可能的实施方式,该基于该第一主机目录挂载该第一存储介质包括:将第一存储介质挂载到第三主机目录,该第三主机目录为该第一主机目录的子目录;该基于该第一容器目录将第一数据存储到该第一存储介质包括:通过第二容器目录将第一数据存储到该第一存储介质,该第二容器目录为该第一容器目录下与该第三主机目录对应的子目录。
本申请实施例中,计算设备可以在第一主机目录下新建子目录(即第三主机目录),之后,可以将第一存储介质挂载到第三主机目录。这样,针对计算设备上不同的容器,可以为其分配第一主机目录下的不同子目录,之后可以将不同的存储介质挂载到这些子目录,从而可以便于对不同的容器的目录进行管理。
作为一种可能的实施方式,该方法还包括:通过docker run命令创建并运行该第一容器;该在该第一容器启动前,将第一主机目录挂载到第一容器目录,包括:在该第一容器启动前,通过挂载命令将第一主机目录挂载到第一容器目录。
作为一种可能的实施方式,该通过挂载命令将第一主机目录挂载到第一容器目录包括:执行/etc/sysconfig/docker配置文件中配置的程序文件,通过挂载命令将第一主机目录挂载到第一容器目录。
本申请实施例中,可以通过编辑配置文件的方式配置第一容器启动前需要执行的程序文件,这种方式可实现性强,兼容性好。
作为一种可能的实施方式,该挂载命令为mount--bind命令。
本申请实施例中,可以采用mount--bind命令,mount--bind命令为linux操作系统提供的挂载绑定命令,兼容性好。
作为一种可能的实施方式,该将第一主机目录挂载到第一容器目录包括:获取第一容器的根目录;基于该第一容器的根目录将第一主机目录挂载到第一容器目录。
本申请实施例中,在第一容器启动前,可以先获取到第一容器的根目录,基于第一容器的根目录可以建立第一主机目录与第一容器目录的挂载绑定关系。
作为一种可能的实施方式,该主机还包括第二存储介质,该方法还包括:在第二容器启动前,将第一主机目录挂载到第四容器目录;该第二容器为创建在该计算设备上的容器,该第四容器目录为该第二容器内的目录;在该第二容器启动后,基于该第一主机目录挂载该第二存储介质,以及基于该第四容器目录将第二数据存储到该第二存储介质;该第二数据包括该第二容器在运行过程中产生的数据。
本申请实施例中,计算设备基于第二容器启动前建立的挂载关系(即第一主机目录与第四容器目录的挂载关系),在第二容器启动后,还可以基于第一主机目录挂载第二存储介质,以及可以基于第四容器目录将第二数据存储到该第二存储介质。这样,可以实现在第二容器启动后,动态为第二容器添加新的存储介质,实现动态扩容。
作为一种可能的实施方式,该基于该第一主机目录挂载该第二存储介质包括:将第四主机目录挂载到第五主机目录,该第四主机目录为该计算设备的主机操作系统上的目录,该第五主机目录为该第一主机目录的子目录,该第二存储介质挂载于该第四主机目录;该基于该第四容器目录将第二数据存储到该第二存储介质包括:将第五容器目录挂载到第六容器目录,该第五容器目录为该第四容器目录下与该第五主机目录对应的子目录,该第六容器目录为该第二容器内的目录;通过该第六容器目录将第二数据存储到该第二存储介质。
本申请实施例中,针对不同的容器,可以通过第一主机目录的不同子目录(如第一容器对应的第三主机目录和第二容器对应的第五主机目录)和第一容器目录的不同子目录(如第一容器对应的第二容器目录和第二容器对应的第五容器目录)实现挂载传播,这样,可以便于对多个不同容器进行管理,以及可以避免对其它容器的目录挂载造成影响。
作为一种可能的实施方式,该方法还包括:卸载该第二主机目录与该第三主机目录之间的挂载路径,以及卸载该第二容器目录与该第三容器目录之间的挂载路径。
本申请实施例中,在为第一容器动态添加第一存储介质之后,可以卸载第二主机目录与第三主机目录之间的挂载路径,以及卸载第二容器目录与第三容器目录之间的挂载路径,这样,可以恢复隔离效果,避免第三主机目录和第二容器目录对第二主机目录和第三容器目录造成影响。
作为一种可能的实施方式,该第一存储介质为该计算设备的磁盘、磁盘的分区或磁盘的卷。
第二方面公开一种计算设备,该计算设备包括处理器、存储器和通信接口,该通信接口用于接收来自该计算设备之外的其它电子设备的信息,以及向该计算设备之外的其它电子设备输出信息,该处理器调用该存储器中存储的计算机程序实现如上述第一方面以及第一方面中任一可能的实现方式中所提供的命令挂载方法。
第三方面公开一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序或计算机指令,当该计算机程序或计算机指令运行时,实现如上述各方面公开的目录挂载方法。
第四方面公开一种芯片,包括处理器,用于执行存储器中存储的程序,当程序被执行时,使得芯片执行上述各方面公开的目录挂载方法。
作为一种可能的实施方式,存储器位于芯片之外。
第五方面公开一种计算机程序产品,该计算机程序产品包括计算机程序代码,当该计算机程序代码被运行时,使得上述各方面公开的目录挂载方法被执行。
可以理解地,上述第二方面提供的计算设备、第三方面提供的计算机可读存储介质、第四方面提供的芯片和第五方面提供的计算机程序产品均用于执行本申请第一方面以及第一方面中任一可能的实现方式中所提供的目录挂载方法。因此,其所能达到的有益效果可参考对应方法中的有益效果,此处不再赘述。
附图说明
附图为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1是本申请实施例公开的一种系统架构示意图;
图2是本申请实施例公开的一种目录挂载方法的流程示意图;
图3-图6是本申请实施例公开的一组目录挂载的场景示意图;
图7是本申请实施例公开的一种目录挂载的场景示意图;
图8是本申请实施例公开的一种计算设备的结构示意图。
具体实施方式
本申请实施例公开了一种目录挂载方法及计算设备,可以在容器启动后,动态为其添加新的存储介质,实现动态扩容,解决数据丢失的问题。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
为了更好地理解本申请实施例,下面先对本申请实施例的相关技术进行描述。
容器(container)是计算机操作系统中的一种虚拟化技术。该技术可以使得进程运行于相对独立和隔离的环境(包含独立的文件系统、命名空间、资源视图等),能够简化软件的部署流程,增强软件的可移植性和安全性。因此,容器技术广泛应用于云计算领域的服务化场景,容器开发也逐步成为主流的应用开发技术。其中,Docker是容器技术的代表,作为一个开源的应用容器引擎,其提供了一种应用程序快速自动化部署的解决方案。利用Docker可以使应用程序所在的镜像快速创建并启动容器,容器创建并运行后,应用程序即部署完成。一台物理机上可以部署多个Docker容器,每个Docker容器之间相互隔离,该物理机一般可以称为宿主机。
容器的实现主要依赖于Namespace(命名空间)和Cgroup(control groups,控制组群)两大机制,Namespace负责“隔离”,Cgroup负责“限制”。
Namespace表示着一个标识符(identifier)的可见范围。其中,一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。Namespace提供了对UTS、IPC、Mount、PID、Network、User等系统资源的隔离。通过Namespace的隔离能力,不同的容器之间互相不可见,容器内的应用只能访问本容器内的文件系统,但不同的容器之间可以共享宿主机操作系统内核中的相关资源。同时,容器启动后,一般无法对主机操作系统做操作和管理。Namespace也可以称为名字空间、名称空间等。
Cgroup是Linux内核的一个功能,可以用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等),通过Cgroup可以限制容器进程可用的资源。
chroot(change root)是起源于Unix系统的一个操作,作用于正在运行的进程和该进程的子进程,可以改变该进程外显的根目录。一个运行在这个环境下,经由chroot设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。
需要说明的是,由于容器具有独立的文件系统,并且默认容器的数据的读写发生在容器的存储层,因此,一般当容器被删除时在容器中存储的数据也会丢失,数据不能持久化的存储。如果需要实现容器中数据的持久化存储,可以在容器启动时将主机操作系统上的一个目录挂载到容器内的一个目录,这样,之后在该容器目录中存储的数据可以自动同步到对应的主机目录中,即使之后容器被删除,也可以在对应的主机目录找到对应的数据。
其中,将主机操作系统上的一个目录挂载到容器内的一个目录可以通过-v命令实现,也可以通过--mount命令实现。
-v命令的格式可以为:docker run-v主机目录:容器目录。
其中,docker run表示创建并运行容器,-v主机目录:容器目录表示将主机目录挂载到容器目录。主机目录可以为绝对路径,如果主机目录或容器目录不存在会自动创建。上述命令中还可以包括其它参数,如通过--name可以为容器命名,通过-it可以以交互模式运行容器并为容器分配一个伪输入终端,通过容器目录:ro/rw可以限制读写权限,ro(readonly)表示只读,rw(read write)表示可读可写。
--mount命令的格式可以为:docker run--mount type=bind,source=主机目录,target=容器目录。其中--mount type=bind,source=主机目录,target=容器目录表示将主机目录挂载到容器目录,并且挂载类型为bind类型。
需要说明的是,通过docker run命令挂载目录时,容器在启动后,会将主机目录完成挂载,并会切换到对应的命名空间完成隔离动作。之后,由于Namespace的隔离能力,在容器运行过程中无法动态为容器添加新的存储目录。如果需要添加新的存储目录,可以将当前运行的容器先销毁,然后在重建容器时再挂载多个目录(如通过多个-v参数)。
可见,为了给容器挂载主机目录,只能通过docker run创建并运行容器时通过-v参数或--mount参数将一个或多个主机目录挂载到一个或多个容器目录。在容器运行过程中,无法再动态为容器挂载主机目录。但是,一般情况下,在通过docker run创建并运行容器时,可能并不确定是否需要为容器挂载主机目录。并且,即使可以确定需要为容器挂载主机目录,但也无法确定容器需要的可以持久存储数据的存储容量,因此,可能会出现为容器分配的存储空间太大(即为容器挂载的主机目录对应的存储空间太大),导致存储空间浪费的情况,也可能会出现为容器分配的存储空间不足,导致数据丢失的情况。
为了解决上述问题,本申请实施例中,可以在容器启动前,通过挂载命令(如mount–bind命令)将主机操作系统上的一个目录和容器内的一个目录做成挂载绑定。之后,在容器运行过程中,如果需要为容器添加新的存储目录,可以通过提前创建好的挂载绑定关系以及挂载传播机制动态为容器添加新的存储目录。这样,可以根据容器中应用程序的需要,动态为其添加新的存储介质,实现动态扩容。
为了更好地理解本申请实施例,下面先对本申请实施例使用的系统架构进行描述。
请参阅图1,图1是本申请实施例公开的一种系统架构示意图。如图1所示,该系统架构可以为计算设备100的系统架构,计算设备100可以包括:操作系统101、容器A 102、存储介质1 103和存储介质2 104。容器A 102可以为操作系统101上运行的进程。
其中,操作系统101可以包括内核1011、主机目录1 1012和主机目录2 1013。主机目录11012可以为存储介质1 103的挂载点,主机目录2 1013可以为存储介质2 104的挂载点。应理解,内核(kernel)是一个操作系统的核心,可以提供操作系统的最基本的功能。操作系统的内核负责管理系统的进程、内存、设备驱动程序、文件系统、网络系统等,操作系统的内核是连接应用程序和硬件的桥梁,决定着系统的性能和稳定性。
存储介质1 103和存储介质2 104可以为磁盘、磁盘的一个分区或磁盘的一个卷。本申请实施例中,通过主机目录1 1012可以访问存储介质1 103的存储空间,即可以访问存储介质1 103中存储的数据,通过主机目录2 1013可以访问存储介质2 104的存储空间,即可以访问存储介质2 104中存储的数据。
具体地,Linux系统中的所有硬件设备(如磁盘/分区/卷)一般挂载之后才能使用。这里的挂载是指将硬件设备挂载到主机文件系统的某一个目录,相应地,这个目录也称为该硬件设备对应的挂载点。挂载可以将一个硬件设备与主机文件系统中的一个目录联系起来,之后通过访问这个目录就可以访问对应的硬件设备。例如,将磁盘的一个分区挂载到主机文件系统的一个目录之后,通过访问这个目录(即挂载点)就可以访问对应分区的存储空间(即可以访问对应分区上的文件)。
将硬件设备挂载到主机文件系统的某一个目录的命令可以为:mount设备文件名挂载点。其中,由于挂载操作可能会使得原有目录(即挂载点)中的文件被隐藏,因此,为了避免造成系统异常甚至崩溃,一般可以新建空目录作为挂载点。
在创建并运行容器A 102时(如通过docker run创建并运行容器A 102时),可以将主机目录1 1012挂载到容器目录1 1022。这样,容器A 102中的应用程序A 1021产生的数据可以保存到容器目录1 1022下,相应地,可以同步到主机目录1 1012下,从而可以实现持久化的存储。但由于该主机目录1 1012对应的存储容量是有限的,因此该容器目录1 1022的存储容量也是有限的。例如,上述存储介质1 103的存储容量是有限的,如100GB(千兆字节),相应地,主机目录1 1012和容器目录1 1022对应的存储容量也为100GB。
在容器A 102运行过程中,随着数据不断写入容器目录1 1022,容器目录1 1022对应的存储介质1 103的可用存储容量(即空闲存储容量)会逐渐减少,此时,如果容器A 102中再产生新的数据,那么这些数据可能无法得到持久的存储。本申请实施例中,在容器A102运行过程中,当存储介质1 103的可用存储容量不足时,可以将主机目录2 1013挂载到容器目录2 1023(即动态添加新的存储目录),可以实现为容器A 102动态添加存储介质2104,从而可以增加容器A 102可用的存储容量。
在一些实施例中,在创建并运行容器A 102时,也可以不将主机目录1 1012挂载到容器目录1 1022,在之后需要将应用程序A 1021产生的数据持久化保存时,可以动态将主机目录11012挂载到容器目录1 1022。
应理解,通过本申请实施例提供的目录挂载方法还可以动态为一个容器挂载多个存储介质。如图1所述,计算设备100还可以包括存储介质3 105,存储介质3 105可以挂载到主机目录3 1014。计算设备100在为容器A 102动态添加主机目录2 1013之后,即动态添加存储介质2 104之后,计算设备100还可以通过本申请实施例提供的目录挂载方法将主机目录3 1014挂载到容器目录3 1024,从而可以实现为容器A 102动态添加存储介质3 105,相应地可以增加容器A 102可用的存储容量。
需要说明的是,主机目录1 1012和主机目录2 1013是主机操作系统上的目录,即主机文件系统中的目录。容器A 102可以包括独立的文件系统,容器目录1 1022和容器目录2 1023是容器A 102的文件系统中的目录。因此,主机目录与容器目录可以属于不同的文件系统。
应理解,计算设备100可以包括多个容器(图1中仅示意出一个),该多个容器可以共享主机操作系统的内核。还应理解,一个主机目录可以挂载到多个容器的目录,因此,将主机目录挂载到容器目录除了可以实现数据的持久化存储之外,还可以实现不同容器之间的数据交换,以及可以实现外部进程和容器之间的数据交换。
此外,还应理解,上述图1中仅示意了1个容器(即容器A 102),但计算设备100中可以包括更多容器,并且,通过本申请实施例提供的目录挂载方法可以为计算设备100中的任意一个容器动态挂载主机目录,相应地,可以为其动态添加一个或多个存储介质,该一个或多个存储介质可以用于持久化存储该容器运行过程中产生的数据。
例如,计算设备100还可以包括容器B、容器C等容器,以及可以包括存储介质4、存储介质5等存储介质。通过本申请实施例提供的目录挂载方法,在容器B运行过程中,计算设备100可以为其动态添加新的存储介质(如存储介质4)。并且,在在容器C运行过程中,计算设备100也可以为其动态添加新的存储介质(如存储介质5)。
需要说明的是,计算设备100可以包括主机,主机为计算设备100的主要机体部分,可以包括中央处理器(central processing unit,CPU)、内存等硬件设备,也可以包括操作系统(operating system,OS)等软件。其中,操作系统可以包括Linux操作系统、Windows操作系统、Unix操作系统等中的一个或多个。
在一些实施例中,计算设备100可以是服务器。其中,服务器可以是文件服务器(file server)、域控制服务器(domain server)、数据库服务器(database server)、邮件服务器(mail Server)、Web服务器(web server)、多媒体服务器(multimedia server)、通讯服务器(communication server)、终端服务器(terminal server)、基础架构服务器(infrastructure server)、虚拟化服务器(virtualization server)等。服务器可以是塔式、机架式、刀片式、机柜式等。
需要说明的是,图1所示的系统架构只是示例性说明,并不对其构成限定。在本申请另一些实施例中,图1所示的系统架构可以包括比图示更多或更少的组件或功能模块。
在上述系统架构中,本申请实施例是通过在容器运行过程中动态挂载主机目录的方式解决数据丢失等技术问题。下面详细描述本申请实施例中如何具体实现“动态挂载主机目录”。请参阅图2,图2是本申请实施例公开的一种目录挂载方法的流程示意图。如图2所示,该目录挂载方法可以包括但不限于如下步骤:
201.在第一容器启动前,将第一主机目录挂载到第一容器目录。
为了在第一容器运行过程中,可以为第一容器动态添加新的存储目录(即挂载新的主机目录),在第一容器启动前,计算设备可以将第一主机目录挂载到第一容器目录。
具体地,在一种可能的实现方式中,通过docker run创建并运行容器时(或者通过配置文件创建并运行容器时),在容器启动前,预留了一段处理机制,可以通过这个预留处理机制做一些自定义的工作。本申请实施例中,在第一容器启动前的预留处理机制中,可以通过挂载命令(如mount--bind命令)将主机操作系统上的第一主机目录(如/host_bind)和容器内的第一容器目录(如/container_bind)做成挂载绑定。其中,第一主机目录可以为主机操作系统上的一个空目录,可以不为计算设备任一存储介质的挂载点。第一容器目录可以为第一容器内的一个空目录。这样,第一主机目录挂载到第一容器目录时,可以避免第一容器目录中原有的文件被隐藏。
mount--bind是linux操作系统实现挂载绑定的机制,可以为一个挂载点绑定一个新的挂载点。通过mount--bind绑定后的两个目录类似于硬链接,无论读写哪一个目录都会反应在另一方,操作系统的内核在系统底层所操作的都是同一个物理位置。应理解,mount--bind命令仅为挂载命令的一种示例,并不对其构成限定。
在一些实施例中,可以通过编辑/etc/sysconfig/docker配置文件指定在容器启动前的预留处理机制中需要执行的代码文件(即程序文件)。具体地,可以在/etc/sysconfig/docker文件中的OPTIONS变量后追加参数--hook-spec=“需要执行的json文件(即钩子配置文件)”。例如,--hook-spec=/var/lib/docker/hooks/hook1.json。
/var/lib/docker/hooks/hook1.json文件的内容可以如下所示:
其中,"prestart"表示在容器启动前执行。"path"用于指示在容器启动前需要执行的程序(即代码文件),上述需要执行的文件的路径为"/var/lib/docker/hooks/mount-hook"。"args"用于指示程序参数,第一个参数一般为程序名字(即"mount-hook"),后面的参数一般为程序接受的参数。"env"用于指示容器的环境变量。"timeout"用于指示超时时间的秒数,上述为120秒。应理解,通过上述配置后,在每一个容器启动前,均可以执行mount-hook程序。
需要说明的是,上述json文件中也可以配置"poststart"和"poststop"对应的内容。"poststart"和"poststop"分别作用于容器启动之后和容器停止之后。
本申请实施例中,编辑好相应的配置文件之后,在第一容器启动前,可以通过执行预先配置的程序(如mount-hook)将主机操作系统上的第一主机目录挂载到第一容器内的第一容器目录。第一容器可以为创建并运行在主机操作系统上的任一容器。
具体地,在第一容器启动前,预先配置的程序(如mount-hook)可以获取到第一容器的根目录等信息,并且此时第一容器还没有切换存储权限(即没有切换到对应的命名空间),因此,预先配置的程序可以访问到第一容器内的目录(即路径),此时,可以将主机操作系统上的第一主机目录挂载到第一容器内的第一容器目录。例如,此时可以在主机操作系统上创建第一主机目录,在第一容器内创建第一容器目录,然后通过挂载命令将第一主机目录挂载到第一容器目录,该命令具体可以为:mount--bind第一容器的根目录/第一容器目录第一主机目录。应理解,在一些实施例中,第一主机目录也可以为主机操作系统上原来就存在的目录,第一容器目录也可以为第一容器内原来就存在的目录。
202.在第一容器启动后,将第二主机目录挂载到第三主机目录。
在第一容器启动后(即第一容器运行过程中),如果需要将主机操作系统上的第二主机目录挂载到第一容器内的第三容器目录,可以先将第二主机目录挂载到第三主机目录。
具体地,计算设备可以通过挂载命令将第二主机目录挂载到第三主机目录,该命令具体可以为:mount--bind第二主机目录第三主机目录。
其中,第三主机目录可以为第一主机目录的子目录。例如,第三主机目录可以为在第一主机目录下新创建的目录(如新创建的空目录),或者可以为第一主机目录下原来就存在的目录。第二主机目录可以为第一存储介质的挂载点。第一存储介质可以为计算设备中的任一存储介质,具体可以为计算设备的磁盘、磁盘的一个分区或磁盘的一个卷。应理解,在一些实施例中,第三主机目录也可以为第一主机目录。
应理解,由于计算设备上可以运行多个容器,并且,通过本申请实施例提供的目录挂载方法可以为该多个容器动态挂载主机目录,因此,为了避免该多个容器的目录挂载互相影响(即动态挂载主机目录时相互影响),针对每一个容器,可以在第一主机目录下为其建立一个或多个独立的子目录(如第一容器对应的第一主机目录下的第三主机目录),这样,在为不同的容器动态挂载主机目录时,可以使用该容器特有的主机目录(即在第一主机目录下为该容器建立的一个或多个独立的子目录),从而可以避免对其它容器的目录挂载造成影响。并且,上述这种方式便于对多个不同容器进行管理,包括对多个不同容器的目录挂载进行管理。
在一些实施例中,在第一主机目录下为一个容器建立一个或多个独立的子目录时,该子目录的目录名可以包括该容器的标识。在一种可能的实现方式中,容器的标识可以为通过哈希函数生成的一个哈希值。
203.在第一容器启动后,将第二容器目录挂载到第三容器目录。
为了将主机操作系统上的第二主机目录挂载到第一容器内的第三容器目录,计算设备还需要将第二容器目录挂载到第三容器目录。
具体地,计算设备可以通过挂载命令将第二容器目录挂载到第三容器目录,该命令具体可以为:mount--bind第二容器目录第三容器目录。
其中,第二容器目录为第一容器目录下与第三主机目录对应的子目录。应理解,在第一主机目录下创建第三主机目录时,相应地,第一容器目录下可以存在第三主机目录对应的第二容器目录。或者,在第一容器目录下创建第二容器目录时,相应地,第一主机目录下可以存在第二容器目录对应的第三主机目录。应理解,在一些实施例中,第二容器目录也可以为第一容器目录。
第三容器目录可以为第一容器中的任一目录,例如,第三容器目录可以为新创建的空目录,或者可以为第一容器内原来就存在的目录。
通过上述处理,第二主机目录可以挂载到第三主机目录,第二容器目录可以挂载到第三容器目录,并且第二容器目录与第三主机目录存在对应的映射关系。因此,基于挂载传播机制,可以实现第二主机目录挂载到第三容器目录,从而实现了在第一容器运行过程中将主机操作系统上的一个目录(即第二主机目录)挂载到第一容器中的一个目录(即第三容器目录),进而实现了为第一容器扩充存储容量,以及可以持久化地存储更多第一容器运行过程中产生的数据。例如,可以通过第三容器目录将第一数据存储到第一存储介质中。第一数据可以包括第一容器在运行过程中产生的数据。
挂载传播机制可以理解为:如果一个挂载点挂载到一个目录,那么该挂载点对应的源目录(设备)也挂载到该目录。例如,/host_bind/new1挂载到/host_bind/new2,那么/host_bind/new2可以为/host_bind/new1对应的挂载点,如果/host_bind/new2再挂载到/host_bind/new3,那么/host_bind/new2对应的源目录/host_bind/new1也相当于挂载到/host_bind/new3。并且,之后如果取消/host_bind/new2到/host_bind/new3的挂载路径,/host_bind/new1还是挂载到/host_bind/new3。
可以理解的是,在一些实施例中,计算设备可以先执行步骤203,再执行步骤202,也即是计算设备可以先将第二容器目录挂载到第三容器目录,再将第二主机目录挂载到第三主机目录,这样,基于挂载传播机制,也可以实现第二主机目录挂载到第三容器目录。
204.卸载步骤202和步骤203建立的挂载路径。
通过上述流程,第二主机目录可以挂载到第三容器目录。但此时,第二主机目录也挂载到第三主机目录和第二容器目录,因此,为了避免第三主机目录和第二容器目录对第二主机目录和第三容器目录造成影响,可以将步骤202和步骤203建立的两个挂载路径取消(即卸载第二主机目录与第三主机目录之间的挂载路径,以及卸载第二容器目录与第三容器目录之间的挂载路径),恢复隔离效果。其中,可以通过umount命令取消(即卸载)挂载路径。
应理解,步骤204为可选地,在一些实施例中,计算设备可以不用执行步骤204。
可以理解的是,在一些实施例中,计算设备也可以直接将第一存储介质挂载到第一主机目录或者第一主机目录的子目录(如第三主机目录),这样,由于第一主机目录挂载到第一容器目录,可以通过第一容器目录或第一容器目录的子目录(如第二容器目录)将第一数据存储到第一存储介质,从而可以实现为第一容器添加新的存储介质,实现动态扩容。
可见,在上述建立了第一主机目录和第一容器目录的绑定挂载关系之后,基于第一主机目录和第一容器目录的绑定挂载关系,可以通过多种不同的方式为第一容器添加新的存储介质,本发明实施例在此不作限定。
应理解,计算设备除了可以为第一容器动态添加存储介质外,还可以为运行在计算设备上的其它容器动态添加存储介质。下面以计算设备上的第二容器为例进行说明:
为了在第二容器运行过程中,可以为其动态添加新的存储介质,在第二容器启动前,计算设备可以将第一主机目录挂载到第四容器目录。之后,在第二容器运行过程中,计算设备可以基于第一主机目录挂载第二存储介质,以及可以基于第四容器目录将第二数据存储到第二存储介质。
第二存储介质可以为计算设备中的任一存储介质,具体可以为计算设备的磁盘、磁盘的一个分区或磁盘的一个卷。第二容器可以为创建在计算设备上的容器,第四容器目录可以为第二容器内的目录,第二数据可以包括第二容器在运行过程中产生的数据。
具体地,计算设备为第二容器添加第二存储介质的具体实现可以为:计算设备可以将第四主机目录挂载到第五主机目录,以及可以将第五容器目录挂载到第六容器目录。其中,第四主机目录可以为计算设备的主机操作系统上的目录,第五主机目录可以为第一主机目录的子目录,第二存储介质可以挂载于第四主机目录。第五容器目录可以为第四容器目录下与第五主机目录对应的子目录,第六容器目录可以为第二容器内的目录。
由于第五容器目录与第五主机目录之间存在对应的映射关系。因此,基于挂载传播机制,可以实现第四主机目录挂载到第六容器目录,从而实现了在第二容器运行过程中将主机操作系统上的一个目录(即第四主机目录)挂载到第二容器中的一个目录(即第六容器目录),进而实现了为第二容器扩充存储容量。相应地,计算设备可以通过第六容器目录将第二数据存储到第二存储介质中。
需要说明的是,上述第一容器和第二容器均是基于第一主机目录挂载存储介质(如第一容器基于第一主机目录挂载第一存储介质,第二容器基于第一主机目录挂载第二存储介质),但在本申请的另一些实施例中,上述第一容器和第二容器也可以基于不同的主机目录挂载存储介质。相应地,在第一容器和第二容器启动前,计算设备可以将不同的主机目录分别挂载到第一容器和第二容器内的一个目录。例如,计算设备可以将主机目录a挂载到容器目录a,可以将主机目录b挂载到容器目录b。其中主机目录a和主机目录b为主机操作系统上的目录,容器目录a为第一容器内的目录,容器目录b为第二容器内的目录。
上述处理流程中,可以通过配置文件在容器启动前创建第一主机目录和第一容器目录的绑定挂载关系,之后,在容器运行过程中,如果需要为第一容器添加新的存储目录(即将新的主机目录挂载到第一容器中的目录),则可以通过第一主机目录和第一容器目录的绑定挂载关系实现。这样,可以在第一容器不重建的情况下为第一容器添加新的存储介质。并且,在第一容器当前使用的存储介质出现损坏时,可以动态更换新的存储介质。此外,上述第一主机目录和第一容器目录的绑定挂载可以通过配置一个代码文件实现,对内核不会引入侵入式修改,并且,兼容性较好。
如下结合图3-图6,以容器A的动态扩容为例介绍应用上述图2所示的方法的实例。
在容器A启动前的预留处理机制中,可以通过挂载命令将主机操作系统上的/host_bind目录和容器内的/container_bind目录做成挂载绑定。相应地,/host_bind的子目录/host_bind/temp和/container_bind的子目录/container_bind/temp也具有对应的映射关系,可以参见图3。并且,可以在主机操作系统上创建/host_temp目录,然后可以将计算设备的硬盘A挂载到主机操作系统上的/host_temp目录。
之后,在容器A运行过程中,如果需要为容器A添加存储介质(如将/host_temp挂载到/container_temp),可以先通过挂载命令将/host_temp挂载到/host_bind/temp,如图4所示。再之后,还可以在容器A内创建/container_temp目录,然后可以通过挂载命令将/container_bind/temp挂载到/container_temp,如图5所示。此时,由于/host_temp挂载到/host_bind/temp,/container_bind/temp挂载到/container_temp,因此,基于挂载传播机制,/host_temp可以挂载到/container_temp。相应地,/container_temp下的内容可以存储到对应的硬盘A中,从而实现为容器A动态添加存储介质。相应地,容器内的应用程序A可以通过/container_temp命令实现数据的持久化存储。再之后,可以取消之前建立的两个挂载路径(即卸载/host_temp与/host_bind/temp之间的挂载路径,以及卸载/container_bind/temp与/container_temp之间的挂载路径),恢复隔离效果,如图6所示。
请参见图7,与图3-图6不同的是,在容器A运行过程中,如果需要为容器A添加存储介质,可以直接将硬盘A挂载到/host_bind/temp目录,这样,通过容器内的/container_bind/temp目录也可以实现为容器A动态添加存储介质。
需要说明的是,上述不同实施例中的相关信息(即相同信息或相似信息)和相关描述可以相互参考。
应理解,上述图2中以计算设备作为交互示意的执行主体为例来示意上述处理流程,但本申请并不限制该交互示意的执行主体。例如,图2中的计算设备也可以是支持该计算设备实现该方法的芯片、芯片系统、或处理器,还可以是能实现全部或部分计算设备功能的逻辑模块或软件。
基于上述系统架构,请参阅图8,图8是本申请实施例公开的一种计算设备的结构示意图。其中,该计算设备800可以包括:处理器801、通信接口802和存储器803。处理器801、通信接口802以及存储器803可以相互连接或者通过总线804相互连接。
示例性的,存储器803用于存储计算设备800的计算机程序和数据,存储器803可以包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-onlymemory,ROM)、可擦除可编程只读存储器(erasable programmable read only memory,EPROM)或便携式只读存储器(compact disc read-only memory,CD-ROM)等。通信接口802用于支持计算设备800进行通信,例如接收或发送数据。
示例性的,处理器801可以是中央处理器(central processing unit,CPU)、复杂可编程逻辑器件、通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。
在一个实施例中,计算设备800可以为上述计算设备,处理器801可以用于读取上述存储器803中存储的程序,执行上述图2所示的方法实施例中计算设备或计算设备中的组件执行的操作,可以参考上述相关描述,在此不再详细赘述。
需要说明的是,图8所示的计算设备800仅仅是本申请实施例的一种实现方式,实际应用中,计算设备800还可以包括更多或更少的部件,这里不作限制。
本申请实施例还公开一种计算机可读存储介质,其上存储有指令,该指令被执行时执行上述方法实施例中的方法。
本申请实施例还公开一种包括指令的计算机程序产品,该指令被执行时执行上述方法实施例中的方法。
显然,上述所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或者特性可以包含在本实施例申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是相同的实施例,也不是与其它实施例互斥的独立的或是备选的实施例。本领域技术人员可以显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本申请的说明书和权利要求书及所述附图中术语“第一”、“第二”、“第三”等是区别于不同的对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元,或者可选地,还包括没有列出的步骤或单元,或者可选地还包括这些过程、方法、产品或设备固有的其它步骤或单元。
可以理解的是,附图中仅示出了与本申请相关的部分而非全部内容。应当理解的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在本说明书中使用的术语“部件”、“模块”、“系统”、“单元”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件或执行中的软件。例如,单元可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或分布在两个或多个计算机之间。此外,这些单元可从在上面存储有各种数据结构的各种计算机可读介质执行。单元可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一单元交互的第二单元数据。例如,通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。
Claims (10)
1.一种目录挂载方法,其特征在于,应用于计算设备,所述计算设备包括主机和第一容器,所述第一容器运行在所述主机上,所述主机包括第一存储介质,所述方法包括:
在所述第一容器启动前,将第一主机目录挂载到第一容器目录;所述第一主机目录为所述主机的操作系统上的目录,所述第一容器目录为所述第一容器的目录;
在所述第一容器启动后,基于所述第一主机目录挂载所述第一存储介质,以及基于所述第一容器目录将第一数据存储到所述第一存储介质;所述第一数据包括所述第一容器在运行过程中产生的数据。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第一主机目录挂载所述第一存储介质包括:
将第二主机目录挂载到第三主机目录,所述第二主机目录为所述主机的操作系统上的目录,所述第三主机目录为所述第一主机目录的子目录,所述第一存储介质挂载于所述第二主机目录;
所述基于所述第一容器目录将第一数据存储到所述第一存储介质包括:
将第二容器目录挂载到第三容器目录,所述第二容器目录为所述第一容器目录下与所述第三主机目录对应的子目录,所述第三容器目录为所述第一容器的目录;
通过所述第三容器目录将第一数据存储到所述第一存储介质。
3.根据权利要求1所述的方法,其特征在于,所述基于所述第一主机目录挂载所述第一存储介质包括:
将第二主机目录挂载到所述第一主机目录,所述第二主机目录为所述主机的操作系统上的目录,所述第一存储介质挂载于所述第二主机目录;
所述基于所述第一容器目录将第一数据存储到所述第一存储介质包括:
将所述第一容器目录挂载到第三容器目录,所述第三容器目录为所述第一容器的目录;
通过所述第三容器目录将第一数据存储到所述第一存储介质。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过docker run命令创建并运行所述第一容器;
所述在所述第一容器启动前,将第一主机目录挂载到第一容器目录,包括:
在所述第一容器启动前,通过挂载命令将第一主机目录挂载到第一容器目录。
5.根据权利要求4所述的方法,其特征在于,所述通过挂载命令将第一主机目录挂载到第一容器目录包括:
执行/etc/sysconfig/docker配置文件中配置的程序文件,通过挂载命令将第一主机目录挂载到第一容器目录。
6.根据权利要求2所述的方法,其特征在于,所述主机还包括第二存储介质,所述方法还包括:
在第二容器启动前,将第一主机目录挂载到第四容器目录;所述第二容器为创建在所述计算设备上的容器,所述第四容器目录为所述第二容器的目录;
在所述第二容器启动后,基于所述第一主机目录挂载所述第二存储介质,以及基于所述第四容器目录将第二数据存储到所述第二存储介质;所述第二数据包括所述第二容器在运行过程中产生的数据。
7.根据权利要求6所述的方法,其特征在于,所述基于所述第一主机目录挂载所述第二存储介质包括:
将第四主机目录挂载到第五主机目录,所述第四主机目录为所述主机的操作系统上的目录,所述第五主机目录为所述第一主机目录的子目录,所述第二存储介质挂载于所述第四主机目录;
所述基于所述第四容器目录将第二数据存储到所述第二存储介质包括:
将第五容器目录挂载到第六容器目录,所述第五容器目录为所述第四容器目录下与所述第五主机目录对应的子目录,所述第六容器目录为所述第二容器的目录;
通过所述第六容器目录将第二数据存储到所述第二存储介质。
8.根据权利要求2所述的方法,其特征在于,所述方法还包括:
卸载所述第二主机目录与所述第三主机目录之间的挂载路径,以及卸载所述第二容器目录与所述第三容器目录之间的挂载路径。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述第一存储介质为所述计算设备的磁盘、磁盘的分区或磁盘的卷。
10.一种计算设备,其特征在于,所述计算设备包括处理器、存储器和通信接口,所述通信接口用于接收来自所述计算设备之外的其它电子设备的信息,以及向所述计算设备之外的其它电子设备输出信息,所述处理器调用所述存储器中存储的计算机程序实现如权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211287023.6A CN115686364A (zh) | 2022-10-20 | 2022-10-20 | 一种目录挂载方法及计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211287023.6A CN115686364A (zh) | 2022-10-20 | 2022-10-20 | 一种目录挂载方法及计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115686364A true CN115686364A (zh) | 2023-02-03 |
Family
ID=85065881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211287023.6A Pending CN115686364A (zh) | 2022-10-20 | 2022-10-20 | 一种目录挂载方法及计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115686364A (zh) |
-
2022
- 2022-10-20 CN CN202211287023.6A patent/CN115686364A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10445122B2 (en) | Effective and efficient virtual machine template management for cloud environments | |
US8661457B2 (en) | Pipeline across isolated computing environments | |
US7203774B1 (en) | Bus specific device enumeration system and method | |
US11385883B2 (en) | Methods and systems that carry out live migration of multi-node applications | |
CN101650660B (zh) | 从中央存储装置引导计算机系统 | |
US11010355B2 (en) | Layer-based file access method and apparatus of virtualization instance | |
US10574524B2 (en) | Increasing reusability of and reducing storage resources required for virtual machine images | |
CN111930473B (zh) | 在容器云上部署图像识别服务的方法与设备 | |
US20120011513A1 (en) | Implementing a versioned virtualized application runtime environment | |
US20140195753A1 (en) | Managing virtual hard disk snapshots | |
US11334427B2 (en) | System and method to reduce address range scrub execution time in non-volatile dual inline memory modules | |
US9104339B1 (en) | Support track aligned partitions inside virtual machines | |
US20240004832A1 (en) | System and method for providing a container environment in a single file | |
CN115774701B (zh) | 数据共享方法、装置、电子设备及存储介质 | |
US9026565B2 (en) | Real-time data transformation to access foreign data sources | |
US20200364040A1 (en) | System and Method for Restoring a Previously Functional Firmware Image on a Non-Volatile Dual Inline Memory Module | |
CN113986858B (zh) | Linux兼容安卓系统的共享文件操作方法和装置 | |
CN115686364A (zh) | 一种目录挂载方法及计算设备 | |
CN115618409A (zh) | 数据库云服务生成方法、装置、设备及可读存储介质 | |
CN114679442A (zh) | 基于云桌面的用户数据同步方法、装置、设备及存储介质 | |
US10983819B2 (en) | Dynamic provisioning and delivery of virtual applications | |
JP2022536681A (ja) | 不揮発性記憶区画識別子 | |
US20200034445A1 (en) | Techniques for limiting the maximum storage consumed by a file system without shrinking an underlying volume | |
CN113535241B (zh) | 无盘启动方法、装置、终端设备和存储介质 | |
EP4068091A1 (en) | Hybrid approach to performing a lazy pull of container images |
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 |