在【Linux备份还原双系统设计与实现<一>】里面,实现了在开机时按住Shift键就可进行系统备份与还原,但在实际项目应用中,我们需要在WEB管理平台中,能同样实现系统备份与还原操作。
1、基本流程
1)用户登录WEB管理平台。
2)选择终端设备,点击【备份】或【还原】操作。
3)服务器通知播放器需要进行【备份】/【还原】操作。
4)终端设备接收命令后,替换对应的grub配置文件,这个配置文件默认进入备份】/【还原】的菜单,而不是原来的正常工作模式,并自动重启。
5)终端设备进入操作系统A中,先替换grub配置文件为正常的配置文件,再对操作系统B进行备份还原操作,完成后,自动重启。
2、具体实现
2.1 修改操作系统A的grub菜单配置
在原来的grub菜单上基础上创建2个不同的grub配置文件,分别为/boot/grub/grub_backup_sys.cfg:【备份操作系统】,/boot/grub/grub_restore_sys.cfg:【还原操作系统】。
boot/grub/grub_backup_sys.cfg配置文件主要内容:
#设置默认引导菜单0,也就是备份操作系统
set default = "0"
menuentry 'Backup System' --class ubuntu --class gnu -linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root = '(hd0,msdos1)'
linux /boot /vmlinuz - 3. 2. 0 - 23 -generic -pae root = /dev /sda1 ro quiet splash backupSys $vt_handoff
initrd /boot /initrd.img - 3. 2. 0 - 23 -generic -pae
}
set default = "0"
menuentry 'Backup System' --class ubuntu --class gnu -linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root = '(hd0,msdos1)'
linux /boot /vmlinuz - 3. 2. 0 - 23 -generic -pae root = /dev /sda1 ro quiet splash backupSys $vt_handoff
initrd /boot /initrd.img - 3. 2. 0 - 23 -generic -pae
}
然后复制一份原来的grub配置文件为grub_normal.cfg,用于备份还原操作完成后,再恢复回来。
sudo
cp
/boot
/grub
/grub.cfg
/boot
/grub
/grub_normal.cfg
在原来的/etc/init.d/xds.rc脚本中,有以下语句:
sudo chmod
+w
/boot
/grub
/grub.cfg
sudo cp /boot /grub /grub_normal.cfg /boot /grub /grub.cfg
sudo chmod -w /boot /grub /grub.cfg
sudo cp /boot /grub /grub_normal.cfg /boot /grub /grub.cfg
sudo chmod -w /boot /grub /grub.cfg
这三行语句就是进入系统A后,马上把grub配置菜单替换为正常的菜单,重启后就进入正常工作模式。
2.2 编辑操作系统B的运行脚本
以还原操作系统的脚本backupOs.sh为例,先挂载分区1,然后替换grub.cfg,再重启,如下:
#!/bin/bash
sudo mount /dev /sda1 /mnt
sudo chmod +w /mnt /boot /grub /grub.cfg
sudo cp /mnt /boot /grub /grub_backup_sys.cfg /mnt /boot /grub /grub.cfg
sudo chmod -w /mnt /boot /grub /grub.cfg
sudo umount /mnt
sudo reboot
sudo mount /dev /sda1 /mnt
sudo chmod +w /mnt /boot /grub /grub.cfg
sudo cp /mnt /boot /grub /grub_backup_sys.cfg /mnt /boot /grub /grub.cfg
sudo chmod -w /mnt /boot /grub /grub.cfg
sudo umount /mnt
sudo reboot
2.3 调用
以QT环境为例,如下:
void DsCommon::backOS()
{
QString shFileName
=
"backupOs.sh";
QProcess : :execute( "/bin/chmod +x " + shFileName);
QProcess : :startDetached( "/bin/sh " + shFileName + " &");
QProcess : :execute( "/bin/chmod +x " + shFileName);
QProcess : :startDetached( "/bin/sh " + shFileName + " &");
}
终端设备在收到服务器备份的命令,就调用上面的backOs()方法,重启后,就进行备份操作。
终端设备与服务器的通信就是普通的http或者socket通信,在此略过。
至此,用户能通过WEB界面管理终端设置的备份还原实现完成。