操作系统是什么,Server的snapapi折腾笔记

日期:2019-09-07编辑作者:系统操作

目标:我要在一个被修改过的linux(基于centos 5.4修改的,重新编译过内核)系统,备份他的整个硬盘,该硬盘做了LVM分区。其实已经通过vmware  convert做了一次P2V的镜像了,不过我还是不甘心,希望能做个P2P的镜像。
 
如果没LVM,这很简单,DD出来再DD回去就是了,但是Y做了LVM(centos/RHEL的默认分区方式),而我对LVM掌握的十分有限,只有另谋出路了:商业备份程序–>acronis backup & recovery advanced server
 
前期的折腾:
 
1、linux agent的下载,够隐蔽的,得要在安装server的过程中才有提示,最后在注册了试用版的portal里才可以下载的到。
 
2、需要安装kernel-devel和gcc才可以安装snapapi
 
折腾到最后,发现必须要安装acronis的一个叫snapapi的LKM才可以对LVM分区执行备份工作。所以,我现在面对的情况是:
 
1、没有当前内核的代码,或许有当前内核的配置文件
 
2、有类似版本的内核代码
 
3、有他的LKM的代码
 
错误信息:
 
[18458.932501] snapapi26: version magic ’2.6.18-164.15.1.el5.xxx SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1′should be ’2.6.18-164.15.1.el5.xxx SMP mod_unload 686 REGPARM gcc-4.1′
 
分析:
 
modversion modmagic不一致,差距就是多了个4KSTACKS,需要强行插入LKM。
 
 
 
思路:
 
一、去掉4KSTACKS字样
 
1、暴力修改二进制文件。我用UE试了试,ctrl+d删除了不需要的字符,结果出错了。VI做的二进制编辑器用不来,老保存不到文件,后续方法是找一个对ELF文件支持的更好的二进制编辑器或者modversion cracker实现。
 
[20218.918997] Verify ELF error [sec 1] (assertion 143)
[20218.919000] Module failed ELF checks
 
二、强插LKM
 
1、modprobe -f参数,系统崩溃
 
2、编译LKM的时候去掉modversion的支持,就好像adore-ng那样
 
这个东西又洋气的很,用的dkms编译的LKM,现在得熟悉下dkms了,参考
 

 

 
摘自 素包子

实验材料准备

5.4修改的,重新编译过内核)系统,备份他的整个硬盘,该硬盘做了LVM分区。其实已经通过v...

1,下载实验材料hit-oslab-linux-20110823.tar.gz(包含linux-0.11源码,bochs模拟器等)

网址:

2,下载安装gcc-3.4(编译linux-0.11需要用到低版本gcc)

网址:old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/

下载内容:(统一下载存放在新建的gcc-3.4文件夹下,由于我的ubuntu是64位所以下载amd64)

1 cpp-3.4_3.4.6-6ubuntu3_amd64.deb
2 g++-3.4_3.4.6-6ubuntu3_amd64.deb
3 gcc-3.4_3.4.6-6ubuntu3_amd64.deb
4 gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
5 libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb

实验相关简述

1,x86模拟器器Bochs

Bochs是一个免费且开放源代码的IA-32(x86)架构PC机模拟器。在它模拟出的环境中可以运行Linux、DOS和各种版本的Windows等多种操作系统。而Bochs本身具有很高的移植性,可以运行在多种软硬件平台之上。如果您想拥抱自由的Linux,那么Bochs几乎是您的不二选择。如果您想继续把自己绑定在Windows平台上,那么除了Bochs,您还可以选用VMware或者Microsoft Virtual PC。它们是最著名虚拟机软件,而且都可以免费使用。因为Bochs的是模拟器,其原理决定了它的运行效率会低于虚拟机。但是,Bochs有虚拟机无可比拟的调试操作系统的能力.

2,实验环境的工作模式

hit-oslab实验环境简称oslab,是一个压缩文件(hit-oslab-linux-20110823.tar.gz),可以将这个文件拷贝到自己的实验工作目录下,用tar zxvf hit-oslab-linux-20110823.tar.gz命令解压展开即可工作。oslab工作在一个宿主操作系统之上,我们使用的Linux,在宿主操作系统之上完成对Linux 0.11的开发、修改和编译之后,在linux-0.11目录下会生产一个名为Image的文件,它就是编译之后的目标文件。该文件内已经包含引导和所有内核的二进制代码。如果拿来一张软盘,从它的0扇区开始,逐字节写入Image文件的内容,就可以用这张软盘启动一台真正的计算机,并进入Linux 0.11内核。oslab采用bochs模拟器加载这个Image文件,模拟执行Linux 0.11,这样省却了重新启动计算机的麻烦。

bochs目录下是与bochs相关的执行文件、数据文件和配置文件。run是运行bochs的脚本命令。运行后bochs会自动在它的虚拟软驱A和虚拟硬盘上各挂载一个镜像文件,软驱上挂载是linux-0.11/Image,硬盘上挂载的是hdc-0.11.img。因为bochs配置文件中的设置是从软驱A启动,所以Linux 0.11会被自动加载。而Linux 0.11会驱动硬盘,并mount硬盘上的文件系统,也就是将hdc-0.11.img内镜像的文件系统挂载到0.11系统内的根目录——“/”。在0.11下访问文件系统,访问的就是hdc-0.11.img文件内虚拟的文件系统。

hdc-0.11.img文件的格式是Minix文件系统的镜像。Linux所有版本都支持这种格式的文件系统,所以可以直接在宿主Linux上通过mount命令访问此文件内的文件,达到宿主系统和bochs内运行的Linux 0.11之间交换文件的效果。Windows下目前没有(或者是还没发现)直接访问Minix文件系统的办法,所以要借助于fdb.img,这是一个1.44M软盘的镜像文件,内部是FAT12文件系统。将它挂载到bochs的软驱B,就可以在0.11中访问它。而通过filedisk或者WinImage,可以在Windows下访问它内部的文件。

hdc-0.11.img内包含有:

  • Bash shell
  • 一些基本的Linux命令、工具,比如cp、rm、mv、tar。
  • vi编辑器
  • gcc 1.4编译器,可用来编译标准C程序
  • as86和ld86
  • Linux 0.11的源代码,可在0.11下编译,然后覆盖现有的二进制内核

实验环境搭建(ubuntu-14.04.1-desktop-amd64)

1,在~(用户Home文件夹)下创建oslab文件夹,将hit-oslab-linux-20110823.tar.gz解压到oslab下

mkdir oslab
cd oslab
tar -zxvf hit-oslab-linux-20110823.tar.gz

2,gcc-3.4安装

cd gcc-3.4
sudo apt-get --purge remove gcc
sudo chmod 777 *
sudo dpkg -i *.deb

3,as86,ld86安装(用于编译和链接linux/boot下的bootsect.s和setup.s,它们采用as86汇编语法;而linux-0.11下的其他汇编语言文件采用gas的语法AT&T)

搜索包含as86,ld86的包:

apt-cache search as86 ld86

执行结果如下:

bin86 - 16-bit x86 assembler and loader

安装bin86:

sudo apt-get install bin86

4,一般环境设置

64位系统需要安装32位兼容库

sudo apt-get install libc6-dev-i386 

C语言编译环境

sudo apt-get install build-essential

安装IDE

sudo apt-get install vim cscope exuberant-ctags

编译内核

cd ~/oslab/oslab/linux-0.11
make

编译中断,输出错误信息:

In file included from /usr/include/linux/fs.h:10,
                 from tools/build.c:28:
/usr/include/linux/ioctl.h:4:23: asm/ioctl.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:4:23: asm/types.h: No such file or directory
In file included from /usr/include/linux/types.h:8,
                 from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/posix_types.h:35:29: asm/posix_types.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:27: error: syntax error before "__le16"
/usr/include/linux/types.h:28: error: syntax error before "__be16"
/usr/include/linux/types.h:29: error: syntax error before "__le32"
/usr/include/linux/types.h:30: error: syntax error before "__be32"
/usr/include/linux/types.h:31: error: syntax error before "__le64"
/usr/include/linux/types.h:32: error: syntax error before "__be64"
/usr/include/linux/types.h:34: error: syntax error before "__sum16"
/usr/include/linux/types.h:35: error: syntax error before "__wsum"
In file included from tools/build.c:28:
/usr/include/linux/fs.h:43: error: syntax error before "__u64"
/usr/include/linux/fs.h:45: error: syntax error before "minlen"
make: *** [tools/build] Error 1

google搜索得知是因为64位linux的asm目录为:

/usr/include/x86_64-linux-gnu/asm

make找不到文件从而导致编译中断

解决方法(建立链接):

sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm

运行

运行编译好的内核,在oslab目录下:

./run

出现错误:

./bochs/bochs-gdb: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory

打印动态链接配置:

ldconfig -p | grep libXpm.so.4

libXpm.so.4的链接信息:

libXpm.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libXpm.so.4

我们需要的是32位库.搜索库对应的包名称:

apt-file search libXpm.so.4

打印结果:

libxpm4: /usr/lib/x86_64-linux-gnu/libXpm.so.4
libxpm4: /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0

得到其对应的包名为libxpm4,安装对应的32位库:

sudo apt-get install libxpm4:i386

 基本操作及注意事项

汇编级调试在oslab目录下执行命令

./dpg-asm

C语言级调试在oslab目录下,打开第一个终端窗口执行命令

./dbg-c

打开第二个终端窗口执行命令

./rungdb

Ubuntu和Linux0.11之间的文件交换

oslab下的hdc-0.11-new.img是0.11内核启动后的根文件系统镜像文件,相当于在bochs虚拟机里装载的硬盘。在Ubuntu上访问其内容的方法是

sudo ./mount-hdc

之后,hdc目录下就是和0.11内核一模一样的文件系统了,可以读写任何文件(可能有些文件要用sudo才能访问)。读写完毕,不要忘了卸载这个文件系统:

sudo umount hdc

经过sudo ./mount-hdc这样处理以后,我们可以在Ubuntu的hdc目录下创建一个xxx.c文件,然后利用Ubuntu上的编辑工具(如gedit等)实现对xxx.c文件的编辑工作,在编辑保存以后。执行sudo umount hdc后,再进入Linux 0.11(即run启动bochs以后)就会看到这个xxx.c,这样就避免了在Linux 0.11上进行编辑xxx.c的麻烦,因为Linux 0.11作为一个很小的操作系统,其上的编辑工具只有vi,使用起来非常不便。

另外在Linux 0.11上产生的文件,可以按这种方式”拿到“Ubuntu下用python程序进行处理,当然这个python程序在Linux 0.11上显然是不好使的,因为Linux 0.11上搭建不了python解释环境。

注意1:不要在0.11内核运行的时候mount镜像文件,否则可能会损坏文件系统。同理,也不要在已经mount的时候运行0.11内核。

注意2:在关闭Bochs之前,需要先在0.11的命令行运行“sync”,确保所有缓存数据都存盘后,再关闭Bochs。

本文由今晚最快开奖现场直播发布于系统操作,转载请注明出处:操作系统是什么,Server的snapapi折腾笔记

关键词:

allocation failed: out of vmalloc space – use vmalloc= to i

在行使oclhashcat+GPU校验密码强度时,会遭逢allocation failed: out ofvmalloc space –use vmalloc=size to increase size.那些主题材料。...

详细>>

Gedit中文乱码问题,10之Gedit中文乱码问题

缺省配置下,用Ubuntu 的文件编辑器(gedit)展开GB18030/GBK/GB2312等项目标华语编码文本文件时,将会出现乱码。    ...

详细>>

编制程序境遇,增添代码补全功效

 比相当多生手在一起首用Vim的时候,都会感觉上手相比困难,何况轻便吐槽Vim对STL补全的支撑。然后又转到VS去了,...

详细>>

文件系统

名称: mount 使用权限: 系统官员或/etc/fstab中允许的使用者 使用办法: mount [-hV] mount -a [-fFnrsvw] [-t vfstype] mount [-fnrsvw] [...

详细>>