本发明属于操作系统使用,尤其涉及一种支持linux内核操作系统对系统盘热插拔的方法。
背景技术:
1、目前以linux为内核的桌面系统越来越得到使用者的青睐。使用可移动存储设备作为系统盘安装操作系统,从而方便使用者便携使用定制系统或保密系统的使用场景也被使用者从windows系统过渡到了linux系统。在实际使用中, windows 10操作系统可以在使用中热卸载系统磁盘,卸载后系统卡死,重新插上系统磁盘之后,windows系统又能恢复正常,数据不会出现丢失等情况。但在以linux为内核的操作系统中,则会出现系统彻底崩溃,系统盘数据遭到破坏,即使重新启动系统,系统也无法启动成功的情况。
2、以linux为内核的操作系统无法在使用中进行系统盘的热插拔,从而无法在以可移动存储设备为系统盘的使用场景下安全稳定方便的运行。
技术实现思路
1、针对现有技术不足,本发明的目的在于提供一种支持linux内核操作系统对系统盘热插拔的方法,在进行系统盘的热插拔之后,重新插上拔出的系统盘能确保系统不必重启就能继续正常使用,同时系统盘的数据以及其他挂载磁盘的数据不会出现损坏丢失。
2、本发明提供如下技术方案:
3、一种支持linux内核操作系统对系统盘热插拔的方法,包括以下步骤:
4、a、检查可移动存储设备与系统盘的一致性,在可移动存储设备卸载时,匹配卸载设备是否与系统盘一致;
5、b、若卸载的可移动存储设备与系统盘一致,则不释放超级块,并挂起内核所有运行线程,等待设备插入,若卸载的可移动存储设备与系统盘不一致则按正常流程处理;
6、c、在可移动存储设备插入之后,挂载完成并开始自动mount时识别mount设备的设备id,并且与系统盘id进行对比;
7、d、如果mount设备的id与系统盘的id一致,则将该设备映射到原系统盘的超级块之上,在完成数据的回写同步之后激活内核中所有线程,完成系统恢复;如果mount设备的id与系统盘的id不一致,则按正常流程处理。
8、优选的,在系统启动时,init线程启动,并读取/etc/fstab文件,完成挂载之后,重新读取/etc/fstab文件,找到根目录对应的uuid或者label值,轮询超级块链表、寻找到与uuid或label值匹配的超级块,将该超级块对象指针、uuid或者label值记录在一个全局变量对象中。
9、优选的,在内核umount函数中,对需要卸载的设备进行id对比,阻止内核对系统盘进行卸载及释放超级块,同时挂起内核线程,确保数据不在写入系统盘,防止出现大量i/o读写错误。
10、优选的,通过name获取nameidate值,通过nameidate值获取设备的uuid值或者label值,将该值与全局变量表中的系统盘id值对比。
11、优选的,在内核do_mount函数中,对需要挂载的设备进行id号对比,如果是系统盘重新插入,则直接恢复超级块与设备之间的映射关系,同时完成一次数据回写,防止数据丢失,之后启动所有挂起的内核线程,恢复系统运行状态。
12、优选的,在内核do_mount函数中,通过dir_name获取path值,在通过该值获取到nameidate后,通过nameidate值获取该设备的uuid或者label值,将该值与全局变量表中的系统盘id值对比。
13、优选的,恢复系统运行状态的同时,将全局变量表中的冻结参数置0。
14、与现有技术相比,本发明具有以下有益效果:
15、(1)本发明一种支持linux内核操作系统对系统盘热插拔的方法,在内核do_mount函数中,对需要挂载的设备进行id号对比,如果是系统盘重新插入,则直接恢复超级块与设备之间的映射关系,同时完成一次数据回写,防止数据丢失,之后启动所有挂起的内核线程,恢复系统运行状态。
16、(2)本发明一种支持linux内核操作系统对系统盘热插拔的方法,在init线程读取/etc/fstab文件,并完成挂载之后,重新读取/etc/fstab文件,并将系统盘对应的uuid或者label值写入,在内核umount函数中,对需要卸载的设备进行id号对比,阻止内核对系统盘进行卸载及释放超级块,同时挂起内核线程,确保数据不在写入系统盘,防止出现大量i/o读写错误。
17、(3)本发明一种支持linux内核操作系统对系统盘热插拔的方法,通过适配不同版本的内核,将源码patch到内核代码中,在完成内核编译之后,即可使用该内核支撑各类以linux为内核的桌面操作系统。
18、(4)本发明一种支持linux内核操作系统对系统盘热插拔的方法,不需修改桌面系统层或者用户层的任何数据,无需让用户对系统进行任何配置,即可无感完成系统盘热插拔功能。
1.一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,在系统启动时,init线程启动,并读取/etc/fstab文件,完成挂载之后,重新读取/etc/fstab文件,找到根目录对应的uuid或者label值,轮询超级块链表、寻找到与uuid或label值匹配的超级块,将该超级块对象指针、uuid或者label值记录在一个全局变量对象中。
3.根据权利要求1所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,在内核umount函数中,对需要卸载的设备进行id对比,阻止内核对系统盘进行卸载及释放超级块,同时挂起内核线程,确保数据不在写入系统盘,防止出现大量i/o读写错误。
4.根据权利要求3所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,通过name获取nameidate值,通过nameidate值获取设备的uuid值或者label值,将该值与全局变量表中的系统盘id值对比。
5.根据权利要求1所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,在内核do_mount函数中,对需要挂载的设备进行id号对比,如果是系统盘重新插入,则直接恢复超级块与设备之间的映射关系,同时完成一次数据回写,防止数据丢失,之后启动所有挂起的内核线程,恢复系统运行状态。
6.根据权利要求5所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,在内核do_mount函数中,通过dir_name获取path值,在通过该值获取到nameidate后,通过nameidate值获取该设备的uuid或者label值,将该值与全局变量表中的系统盘id值对比。
7.根据权利要求5所述一种支持linux内核操作系统对系统盘热插拔的方法,其特征在于,恢复系统运行状态的同时,将全局变量表中的冻结参数置0。