Linux安装操作系统环境有很多种方法,今天就在这里列举些。系统高手勿喷(可能还有新的装机技术)!

  • Kickstart+HTTP+DHCP+TFTP
  • pxe+kickstart
  • cobber+pxe(http+ftp+dhcp)
  • Windows部署服务统一安装win和linux操作系统
  • 使用raid磁盘阵列技术进行磁盘同步对拷(前提硬件环境相同)
  • 使用VM、qemu等虚拟化软件进行镜像格式转换
  • 使用云服务商提供的控制面板进行操作系统的镜像导入这导出

无人值守安装linux
目前业界普遍采用的解决方案是通过网络方式安装并结合自动答应文件,来实现无人值守安装linux,这种安装方式需要我们配置至少一台安装服务器,所有需要安装系统的客户端可以通过网络的方式连接服务器端启动安装程序,根据服务器中存放的自动应答文件实现大规模自动安装部署系统,整体的环境拓扑结构图如图所示(图画的比较简陋,请多多包容)

这种无人值守安装linux的解决方案需要提前部署一台包含DHCP,TFTP,NFS,等服务的安装服务器
安装部署流程:

1. 客户端bios中设置通过网络启动 

2.客户端启动后就会广播寻找DHCP服务器,如果找到该服务器即可以向该服务器申请获得包括ip地址在内的网络参数等。通过DHCP获取tftp的位置,当客户端找到tftp的位置后就可以重tftp服务器上下载启动文件到客户端的内存并启动,最终实现无盘启动。

3.在启动中设置kickstart文件共享位置,这样客户端启动后可以自动寻找kickstart文件 实现无人值守安装linux(ps:kickstart文件事先要共享以及Cobbler也不错哦)。

【注意】使用PXE批量部署时,有一个缺陷,即只能安装单一的操作系统(同一个版本,仅用一个kickstart文件)。但是在实际环境中,不同功能的服务器需要部署不同的环境,而cobbler正好满足了这一需求。cobbler基于python开发,是对PXE的二次封装,且提供了CLI和Web的管理形式,使得操作和管理更加简便。cobbler的实现与PXE类似,也需要tftp,httpd,dhcp这些服务。使用yum即可完成cobbler的安装,在安装的同时也会自动安装tftp和httpd服务,dhcp服务需要自行安装。

cobbler的部署非常简单,首先添加distro,或直接导入光盘镜像,然后为某一个distro添加kickstart文件,一个distro可有多个kickstart文件,以实现同一版本的操作系统部署多个不一样的环境。

流程图如下:

        安装操作系统,速度太慢,整个过程太冗长乏味了。

       安装过程中,需要回答若干问题,系统需要安装无数个软件,创建和写入无数的文件。因为涉及到大量的文件定位和读写,速度一定是快不起来的。

       Windows下我们常常使用ghost系统来备份和刻录操作系统。ghost可以clone整个系统的镜像,然后在新的电脑上恢复,相当简单。用ghost系统安装操作系统比使用安装光盘安装系统要快捷多了,也不需要回答任何问题了。


      那么,我们能不能用ghost来备份和恢复Linux系统呢。

     答案是不行。因为ghost只能识别很少的老旧Linux文件系统,也无法识别grub和LILO等引导加载程序。


     其实,Linux下也有ghost工具,最著名的有g4l—ghostForLinux。

     用了一下ghostForLinux。如果是整个磁盘的复制和恢复,还算简单。但是,我试了半天,也没办法实现对一个或者几个分区的恢复。


     g4l,还是太弱了,无法满足我的要求!


神奇的和命令

        深深的苦恼中,灵光乍现:神奇的ghost的原理是什么呢?不就是数据复制吗?Linux下的dd命令不就是最强大的数据复制工具!


       既然如此,我为什么要使用g4l这样复杂的工具呢?一条dd命令不就可以帮我实现任意复杂的镜像复制和恢复的需求了吗?管他是grub,还是ext4,btrfs,FAT32,NTFS...dd面前众生平等。


       进入Linux操作系统,打开命令行,执行如下命令:

      sudo  fdisk -u -l

      可以查看所有磁盘上的所有分区的尺寸和布局情况。

-u,让start和end中数字的单位是512字节,也就是一个sector扇区的大小。

     假设我有一个/dev/sda磁盘,有100GB大小。我安装了一个Ubuntu操作系统。使用了如下分区:

/dev/sda1 5GB

/dev/sda2 1GB扩展分区

/dev/sda5 1GB扩展分区

/dev/sda2是所有扩展分区,它的大小和/dev/sda5重合。

/dev/sda1是ext4格式的文件系统。用于安装ubuntu操作系统。

/dev/sda5是swap格式的文件系统,作为交换分区。

      如果我用弱智的g4l工具制作系统的镜像,就需要备份整个磁盘100GB,而不是我需要的6GB。

      g4l也可以单独备份分区,但是在恢复时,就需要在目标计算机上安装好grub,并进行了适当的分区。很麻烦!


      我这里,可以使用一条dd命令就生成6GB的镜像。然后可以在任意硬盘大于6GB的计算机上恢复出完整的系统,包括MBR和3个分区sda1,sda2,sda5。



具体步骤

        找一个U盘,安装UbuntuLive Cd系统。【具体如何制作U盘启动的UbuntuLive CD,可以参考Ubuntu官方网站的帮助。】

UbuntuLive Cd和WindowsPE系统类似,是光盘/U盘引导的Ubuntu操作系统,不需要安装就可以直接使用。


       U盘启动,进入盘上的Ubuntu系统,打开命令行,执行:

      sudo  fdisk -u -l /dev/sda

       查看硬件的分区情况。


然后执行:


    dd   bs=512 count=[fdisk命令中最大的end数+1] if=/dev/sda of=/ghost.img

    这样,就可以把我需要的分区数据全部copy到ghost.img文件中。镜像制作完成了!



      然后,我们就可以把U盘插到其他系统上,用U盘启动,进入UbuntuLiveCD,打开命令行,执行如下命令:

dd if=/ghost.img of=/dev/sda

    完成后,拔掉U盘,启动计算机,就可以看到我们的Linux系统已经安装完毕了!

注意:

       不要直接在计算机上用本地磁盘启动系统后执行dd命令生成本地磁盘的镜像。而应该使用livecd启动计算机。

        因此计算机运行时会对系统盘产生大量写操作。 直接对运行中的系统盘生成的镜像,在恢复到其他硬盘上时,很可能会无法启动!



一样适用于非操作系统

       在linux上用dd命令实现系统镜像备份和恢复,是不是很简单呢?


       对于Windows系统,甚至Mac等等任意系统,其实都可以用dd命令实现系统镜像的备份和恢复。

       因为,Linux的fdisk命令能够识别任意系统下的分区格式。fdisk并不关系分区上的文件系统,甚至有无文件系统都不关心。fdisk总是可以报告分区占用了哪些扇区。

 dd命令也不关心磁盘的文件系统格式,它只是简单地按照要求从指定的位置,复制多少字节数据而已。

      dd命令实现镜像备份和恢复,比Ghost软件简单和强大多了。使用ghost软件,依然需要用户进行复杂而危险的磁盘分区操作。

      而使用fdisk和dd这两条命令,一切都免了!


压缩和解压缩

其实现在技术更新很快不在是以前的单机物理机时代,虚拟化、集群技术和云计算的出现,大大缩短了我们的业务生产周期。
  • 镜像的导入和导出。例如阿里和亚马逊需要OSS和s3的存储
  • VMspahre直接进行两个虚拟机或者虚拟机to物理的的克隆
  • 直接在购买虚拟机然后配置好环境直接在控制台里存为镜像以便下次直接购买同样的配置