掌桥专利:专业的专利平台
掌桥专利
首页

使用设备映射的快照功能实现系统掉电保护的方法

文献发布时间:2023-06-19 11:22:42


使用设备映射的快照功能实现系统掉电保护的方法

技术领域

本发明涉及数据安全技术领域,具体涉及一种使用设备映射的快照功能实现系统掉电保护的方法。

背景技术

Linux服务器在频繁进行写入操作时,如果发生意外断电,可能会对文件系统造成破坏,甚至会损坏硬盘,导致操作系统无法启动。针对此问题,在专业的IDC机房一般会配备冗余电源,但对于车载终端、嵌入式设备、条件简陋的机房等使用场景则没有一个行之有效的解决方案。

因此需要一种有效的方案,能够保证系统在意外断电后重要数据不丢失,操作系统可快速重启,恢复作业状态。

已有的实现系统掉电保护的方法,通过调用overlay联合挂载脚本实现掉电保护,这种方法存在如下缺陷:

第一、overlayfs是基于底层文件系统进行联合挂载出来的一个抽象的文件系统,不能保证支持底层文件系统的全部特性,实际部署时使用overlayfs的程序可能会出现异常。

目前已知的缺陷有:

1、Rename directory

如果Overlayfs的某一个目录是单纯来自lower layer或是lower layer和upperlayer合并的,那默认情况下,用户无法对该目录执行rename系统调用,否则会返回-EXDEV错误。

2、Hard link break

该问题源自copy-up机制,当底层目录中某个文件拥有多个硬链接时,若用户对其中一个文件写入了一些数据,那将触发copy-up,由此该文件将拷贝到上层目录,那么和原始文件的hard link也就断开了,变成了一个单独的文件,用户在merge layer通过stat和ls命令能够直接看到这个变化。

3、Unconstant st_dev&st_ino

该问题同样源自copy-up机制,当原来在lower dir中的文件触发了copy-up以后,那用户在merge layer见到的将是来自upper dir的新文件,那也就意味着它俩的inode是不同的,虽然inode中很多的attr和xattr是可以copy的,但是st_dev和st_ino这两个字段却具有唯一性,是不可以复制的,所以用户可以通过ls和stat命令看到的该字段将发生变化。

4、File descriptor change

该问题也同样源自copy-up机制,用户在文件发生copy-up之前以只读方式open文件(这操作不会触发copy-up)得到的文件描述符fd1和copy-up之后open文件得到的文件描述符fd2指向不同的文件,用户通过fd2写入的新数据,将无法从fd1中获取到,只能重新open一个新的fd。该问题目前社区主线内核依然存在,暂未修复。

第二、overlayfs的写时复制功能是基于文件的,首次修改一个文件(特别是大文件)时,即使修改的内容很少,也要先复制整个文件,再对复制的文件进行修改,造成较高的I/O损耗。

第三、overlayfs于2014年正式合入Linux-3.18主线内核,目前仍在开发当中。低版本的内核需要自行打补丁才能使用,过程繁琐且稳定性有待验证。

因此,需要提供一种新的系统掉电保护方法。

发明内容

为解决已有技术存在的不足,本发明提供了一种使用设备映射的快照功能实现系统掉电保护的方法,包括如下步骤:

步骤S1:服务器加电;

步骤S2:加载显示grub菜单;

步骤S3:判断本次启动是否需要修改系统配置;

步骤S4:若需要,则选择常规引导向,正常加载系统,进入系统修改配置并保存配置、重启系统,回到步骤S2;

步骤S5:若不需要,则执行步骤S6至步骤S9;

步骤S6:选择掉电保护的引导项;

步骤S7:调用磁盘映射脚本,对根分区进行快照;

步骤S8:继续加载系统,使系统正常运行,根分区受到保护;

步骤S9:在设备异常断电时,解除快照,使系统自动恢复到快照前的状态,并回到步骤S1。

其中,所述步骤S7包括:

步骤S71:通过grub菜单引导项中的内核参数获取根分区;

步骤S72:对根分区进行快照,然后把根分区映射得到的分区挂载到/sysroot。

其中,通过对系统进行如下的初始处理,以实现上述方法:

步骤Sa:编写磁盘映射脚本,以在系统启动时对根分区进行快照;

步骤Sb:修改initramfs配置文件,以在系统启示时调用步骤Sa中所编写的磁盘映射脚本;

步骤Sc:重新生成initramfs,以集成步骤Sa及步骤Sb中的磁盘映射脚本;

步骤Sd:修改系统grub菜单,添加掉电保护引导项,使用步骤Sc中重新生成的initramfs。

其中,所述步骤Sa包括:

步骤Sa1:通过grub菜单引导项中的内核参数获取根分区;

步骤Sa2:对根分区进行快照,然后把根分区映射得到的分区挂载到/sysroot。

本发明提供的使用设备映射的快照功能实现系统掉电保护的方法,可以直接对底层块设备进行快照,对文件系统无影响,能够完整保留文件系统的所有特性,在实现掉电保护同时对上层应用完全透明,且不需要额外采购硬件。

附图说明

图1:本发明提供的使用设备映射的快照功能实现系统掉电保护的方法的实现流程图。

具体实施方式

为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。

图1为本发明提供的使用设备映射的快照功能实现系统掉电保护的方法的实现流程图,如图1所示,本发明提供的使用设备映射的快照功能实现系统掉电保护的方法,主要包括如下步骤:

步骤S1:服务器加电;

步骤S2:加载显示grub菜单;

步骤S3:判断本次启动是否需要修改系统配置;

步骤S4:若需要,则选择常规引导向,正常加载系统,进入系统修改配置并保存配置、重启系统,回到步骤S2;

步骤S5:若不需要,则执行步骤S6至步骤S9;

步骤S6:选择掉电保护的引导项;

步骤S7:调用磁盘映射脚本,对根分区进行快照;

步骤S8:继续加载系统,使系统正常运行,根分区受到保护;

步骤S9:在设备异常断电时,解除快照,使系统自动恢复到快照前的状态,并回到步骤S1。

因此,本发明能够利用设备映射快照功能在实现对根分区只读保护的同时,可以完整保留原有文件系统的所有特性,确保数据不会因异常断电而丢失;对应用层和文件系统完全透明,可确保上层应用正常运行。并且,重启系统后能够自动还原快照,使被保护的分区自动恢复到启动前的状态;相对通过调用overlay联合挂载脚本实现掉电保护,本发明基于设备块的写时重定向机制避免了修改大文件时造成较高的I/O损耗。

本发明实现上述掉电保护过程的系统处理过程如下:

1、编写磁盘映射脚本,在系统启动时对根分区进行快照;主要包括:

(1)通过gurb菜单引导项中的内核参数获取根分区;

(2)对根分区进行快照(需要先卸载),然后把根分区映射得到的分区挂载到/sysroot;

2、修改initramfs配置文件,在系统启动时(swith root之前)调用上述磁盘映射脚本;

[Service]

Environment=DRACUT_SYSTEMD=1

Environment=NEWROOT=/sysroot

Type=oneshot

ExecStartPre=-/bin/linuxrc.sh

ExecStart=-/bin/dracut-pre-pivot

StandardInput=null

StandardOutput=syslog

StandardError=syslog+console

KillMode=process

RemainAfterExit=yes

3、重新生成initramfs集成上述步骤中的磁盘映射脚本;

dracut-f-I/usr/bin/linuxrc.sh-I/usr/sbin/dmsetup-I/usr/sbin/blockdev\

-I"/usr/lib/udev/rules.d/10-dm.rules/lib/udev/rules.d/10-dm.rules\

/lib/udev/rules.d/13-dm-disk.rules\

/usr/lib/udev/rules.d/95-dm-notify.rules"\

/boot/initramfs-4.4.13-200.nd7.3.x86_64.img.pdp2

4、修改系统grub引导菜单,添加掉电保护引导项,使用前面创建的initramfs;

menuentry'NeoKylin Desktop 7.0(x86)'--class neokylin--class gnu-linux--class gnu--class os--unrestricted{

load_video

set gfxpayload=keep

insmod gzio

insmod part_msdos

insmod ext2

set root='hd0,msdos1'

linux16/boot/vmlinuz-4.4.13-200.nd7.3.x86_64root=/dev/sda1ro rhgbquiet loglevel=0LANG=zh_CN.UTF-8

initrd16/boot/4.4.13-200.nd7.3.x86_64.img.pdp2}。

本发明中,所谓的“掉电保护”,是指操作系统在异常断电时,对存储设备及文件系统的保护措施。

本发明中,所谓的“设备映射”,是指操作系统内核提供的卷管理框架,支持快照、逻辑卷、条带卷等功能。

本发明中,所谓的“Overlayfs”,是一种堆叠文件系统,它依赖并建立在其它的文件系统之上。

本发明中,所谓的“grub”,是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。

本发明中,所谓的“initramfs”,是指,在操作系统内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。

如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行/sbin/init程序完成系统的后续初始化工作。这个压缩过的cpio格式的打包文件就是init ramfs。

本发明中,所谓的“sysroot”,是指上述“initramfs”文件当中的一个特定目录,该目录是操作系统在启动时加载完“initramfs”后用来挂载最终的操作系统根分区的挂载点。

虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

相关技术
  • 使用设备映射的快照功能实现系统掉电保护的方法
  • 一种基于快照重映射的数据状态转换的方法及系统
技术分类

06120112901444