【大总结】几种安装linux操作系统的方法

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

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

无人值守安装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文件,以实现同一版本的操作系统部署多个不一样的环境。

流程图如下:

【大总结】几种安装linux操作系统的方法_第1张图片

用惯Windows的朋友,转向类Unix系统的时候可能都会想到Ghost镜像与恢复,Ghost镜像不仅可以在系统出了问题时恢复系统到正常状态,还能快速实现系统的重新安装,所以多数用过的朋友都会在Windows系统安装后做个Ghost镜像。那么,Linux/Unix下能实现快速镜像和恢复吗?

答案是肯定的。

开源系统默认安装了一个dd工具命令,dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。下面是dd命令的一些说明,这在我们使用它做系统镜像恢复之前必须了解、明白:


dd命令的解释

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2

参数:

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。
   ascii:转换ebcdic为ascii
   ebcdic:转换ascii为ebcdic
   ibm:转换ascii为alternate ebcdic
   block:把每一行转换为长度为cbs,不足部分用空格填充
   unblock:使每一行的长度都为cbs,不足部分用空格填充
   lcase:把大写字符转换为小写字符
   ucase:把小写字符转换为大写字符
   swab:交换输入的每对字节
   noerror:出错时不停止
   notrunc:不截短输出文件
   sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

二、dd应用实例。

1. 将本地的/dev/hdb整盘备份到/dev/hdd

  1. dd if=/dev/hdb of=/dev/hdd
复制代码
2. 将/dev/hdb全盘数据备份到指定路径的image文件
  1. dd if=/dev/hdb of=/root/image
复制代码
3. 将备份文件恢复到指定盘
  1. dd if=/root/image of=/dev/hdb
复制代码
4. 备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
  1. dd if=/dev/hdb | gzip > /root/image.gz
复制代码
5. 将压缩的备份文件恢复到指定盘
  1. gzip -dc /root/image.gz | dd of=/dev/hdb
复制代码
6. 备份磁盘开始的512个字节大小的MBR信息到指定文件
  1. dd if=/dev/hda of=/root/image count=1 bs=512
复制代码
count=1指仅拷贝一个块;bs=512指块大小为512个字节。

恢复:
  1. dd if=/root/image of=/dev/hda
复制代码
7. 备份软盘
  1. dd if=/dev/fd0 of=disk.img count=1 bs=1440k
复制代码
(即块大小为1.44M)

8. 拷贝内存内容到硬盘
  1. dd if=/dev/mem of=/root/mem.bin bs=1024
复制代码
(指定块大小为1k) 

9. 拷贝光盘内容到指定文件夹,并保存为cd.iso文件
  1. dd if=/dev/cdrom(hdc) of=/root/cd.iso
复制代码
10. 增加swap分区文件大小

第一步:创建一个大小为256M的文件:
  1. dd if=/dev/zero of=/swapfile bs=1024 count=262144
复制代码
第二步:把这个文件变成swap文件:
  1. mkswap /swapfile
复制代码
第三步:启用这个swap文件:
  1. swapon /swapfile
复制代码
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
  1. /swapfile swap swap default 0 0
复制代码
11. 销毁磁盘数据
  1. dd if=/dev/urandom of=/dev/hda1
复制代码
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

12.测试硬盘的读写速度
  1. dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
  2. dd if=/root/1Gb.file bs=64k | dd of=/dev/null
复制代码
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

13.确定硬盘的最佳块大小:
  1. dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
  2. dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
  3. dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
  4. dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
复制代码
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

14.修复硬盘:
  1. dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
复制代码
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。并且这个过程是安全、高效的。

这里说点儿“题外话”:

/dev/null和/dev/zero的区别 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件。 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件。

/dev/null——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 /dev/zero——该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。 

$ if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l 
total 4 -rw-r–r– 1 oracle dba 1024 Jul 15 16:56 test.txt

eg,
  1. find / -name access_log  2>/dev/null
复制代码
使用/dev/null 把/dev/null看作”黑洞”. 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.


ghostg4l

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

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

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


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

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


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

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


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


神奇的fdiskdd命令

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


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


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

      sudo  fdisk -u -l

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

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

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

/dev/sda1 5GB

/dev/sda2 1GB扩展分区

/dev/sda5 1GB扩展分区

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

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

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

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

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


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



具体步骤

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

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


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

      sudo  fdisk -u -l /dev/sda

       查看硬件的分区情况。


然后执行:


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

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



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

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

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

注意:

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

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



一样适用于非Linux操作系统

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


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

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

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

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

      而使用fdiskdd这两条命令,一切都免了!


压缩和解压缩

        可能我们需要备份的分区很大,使用dd命令生成的镜像文件也就很大。存储和传输这些镜像不太方便。  我们也可以使用压缩程序压缩生成的镜像文件。 这里,我选择使用gzip程序,配合dd命令一起使用。

gzip参数:
-c 表示输出到stdout
-d  表示解压缩
-1 表示最快压缩
-9 表示最好压缩
默认使用的是-6压缩级别。

      
   

要使用 dd 和 gzip 生成压缩的镜像文件,可以执行命令:   dd   bs=512
count=[fdisk命令中最大的end数+1] if=/dev/sda | gzip -6 > /ghost.img.gz

还原时,可以执行下列命令: gzip -dc /ghost.img.gz.gz | dd of=/dev/sda



提醒:
       如果你把镜像恢复到另一台计算机上,你可能会发现你的网卡是eth1,而不是eth0。这是因为
/etc/udev/ rules .d/70-persistent-net. rules    文件把你做镜像的计算机的网卡作为eth0登记了。  
     如果你的网络脚本对eth0进行了处理,而没有对eth1进行处理,那么不修改网络脚本,你可能就无法上网了。
  
    也许你会希望在做镜像之前,先删除 /etc/udev/rules.d/70-persistent-net.rules 文件。这样你恢复镜像时,网卡的名字就是eth0。   就不会造成你在恢复后的计算机上无法上网的问题了。


注意:
     最好在dd生成镜像之前,先umount所有 if和of 设备的分区。这样可以确保在dd的过程中文件系统没有被改变。
     在完成dd(生成镜像和恢复镜像)后,执行sudo sync,确保数据被真正写入到硬盘上。    
  
      另外,如果你想要对整个硬盘进行备份和恢复,而不是只备份和恢复部分分区,那么就请把dd命令中的  count=[fdisk 命令中最大的end+1]   去掉。bs=512也可以去掉。

Linux系统克隆为iso镜像盘(类似win gost)

1、简介

  Mondo Rescue(以下简称Mondo)可以说是Linux 下的Ghost,它可以将你的系统像照相一样备份至磁带,CD-R,CD-RW,NFS或硬盘分区。Mondo广泛支援LVM,RAID,ext2, ext3, JFS, XFS,ReiserFS,VFAT等。这个软件可以让大家一步一步地将Linux系统备份出来,一旦今后出了问题,只要用创建好的MondoCD将系统还原至上次备份时的状态即可。
与Ghost相似,在进行备份的使用,应把应用与数据的备份分开处理。也就是说,使用Mondo来备份系统的基本应用配置,生产数据使用资料备份的方式处理,如定时备份到磁带等。

2、前期准备

  备份前,先把需要部署的应用都安装和配置完成。然后,重新改系统,挂载需要备份的分区,停止已经启动的应用,建议把系统保留在“干净”的状态下进行备份的工作。备份时的方式有多种,建议先备份到本地磁盘上。所以,需要在本地准备一个空闲空间,可足够存放后续备份的光盘镜像。

3、安装软件

  centos7:

    ftp://ftp.mondorescue.org/centos/7/x86_64/

  制作repo源或者将将以下软件下载:

    mindi-busybox-1.21.1-1.centos7.x86_64.rpm
    mindi-3.0.2-1.centos7.x86_64.rpm
    perl-IO-Interface-1.05-2.el7.x86_64.rpm
    perl-Module-ScanDeps-1.10-3.el7.noarch.rpm
    perl-MondoRescue-3.2.2-1.centos7.noarch.rpm
    perl-Net-IPv4Addr-0.10-6.el7.noarch.rpm
    perl-ProjectBuilder-0.14.4-1.centos7.noarch.rpm

    buffer-1.19-8.centos7.x86_64.rpm
    afio-2.5-1.centos7.x86_64.rpm
    mondo-3.2.2-1.centos7.x86_64.rpm

  软件包或者repo源准备完成后:

    repo源:yum install mindi mindi-busybox mondo

    软件包(在软件下载目录执行):yum localinstall mindi mindi-busybox mondo

4、开始克隆操作

  mondoarchive

  选择备份到本地硬盘:

  【大总结】几种安装linux操作系统的方法_第2张图片

  选择备份路径:

    

  选择压缩率:

  

  如果系统比较庞大,为方便今后刻录光盘,可把镜像分块,在这里输入每个镜像光盘的大小:
  (一般,CD最大700MB,DVD最大4300MB)
  
  镜像的名称:
  
  需备份的路径:
  (“/”表示系统全系统,后面可排除某些目录)
  
  需排除在外的目录,这些目录不会备份到光盘镜像中:
  (通常都是一些临时目录和资料数据目录)
  
  这里,需要您确认创建备份镜像后,是否进行校验:
  
  需要您确认是否标准的Linux 核心,“Yes”即可:
  
  确认后,开始备份:  
  
  先后收集今后Mindi启动必须的文件信息,如BusyBox等:
  
  进行备份:
  
  完成:
  
  请留意最后的日志信息:

  引用
  # mondoarchive
  nitializing...
  See /var/log/mondoarchive.log for details of backup run.
  Checking sanity of your Linux distribution
  Done.
  Execution run ended; result=0
  Type 'less /var/log/mondoarchive.log' to see the output log


  结果:

  引用
  # ll -h /var/cache/mondo/qktest-1.iso
-  rw-r--r-- 1 root root 2.1G 05-25 15:00 /var/cache/mondo/qktest-1.iso

5、完成

  /var/cache/mondo/qktest-1.iso为克隆完成的iso镜像

6、恢复

  挂载镜像安装系统

  【大总结】几种安装linux操作系统的方法_第3张图片

  boot:nuke再输入回车

其实现在技术更新很快不在是以前的单机物理机时代,虚拟化、集群技术和云计算的出现,大大缩短了我们的业务生产周期。

  • 镜像的导入和导出。例如阿里和亚马逊需要OSS和s3的存储
  • VMspahre直接进行两个虚拟机或者虚拟机to物理的的克隆
  • 直接在购买虚拟机然后配置好环境直接在控制台里存为镜像以便下次直接购买同样的配置


你可能感兴趣的:(【大总结】几种安装linux操作系统的方法)