第二章 Linux系统安装
四、使用U盘安装Linux系统
前面章节介绍了如何通过虚拟机 VMware 安装 Linux 系统,而实际开发中,我们更多的是要将 Linux 系统直接安装到电脑上。
直接在电脑上安装 Linux 系统的常用方法有 2 种,分别是用光盘安装和用 U 盘(包括移动硬盘)安装。但由于光盘介质不方便携带、多数电脑不自带光驱等因素,这种安装方式正逐渐退出历史舞台,所以本节讲解如何使用 U 盘安装 Linux 系统。
1、前期准备
使用 U 盘安装 Linux 系统,需要准备以下工具:
- 大容量的U盘(安装 CentOS 6.x 系统,U 盘容量至少 8 G);
- UltraISO 工具,用来制作 U 盘启动盘。除此之外,由于 UltraISO 工具是 Windows 软件,所以需要一台安装了 Windows 系统的计算机协助;
- CentOS 6.x 系统的 ISO 映像文件。
这里所使用的 UltralISO 只是制作 U 盘启动盘的工具之一,除此之外,还可以选择大白菜、老毛桃等软件,都可实现一键快速制作 U 盘启动盘。
2、U 盘安装 Linux 系统
U 盘安装 Linux 系统需经过以下几步:
- 在装有 Windows 系统的电脑上下载和安装 UltraISO 软件。
- 用安装好的 UltroISO 制作 U 盘启动盘,具体操作为:
- 将 U 盘通过 USB 口插到计算机上;
- 启动 UltraISO 软件,依次选择 "文件->打开" 命令,找到已下载的 CentOS 6.x 安装映像文件(iso 文件);
- 选择“启动->写入硬盘映像”命令,打开 "写入硬盘映像" 对话框,在 "硬盘驱动器" 下拉列表框中选择你的 U 盘(注意不要选错,因为这一步对 U 盘进行格式化操作)。"写入方式" 选择 "USB-HDD +",然后单击 "写入" 按钮,等待写入完成,如图 1 所示。
图 1 写入硬盘映像
- 安装 CentOS 6.x:
- 插入 U 盘,设定 U 盘为第一个启动设备,重启之后出现安装界面。
- 选择第一项“Install or upgrade an existing system (安装或升级现有系统)”,进入安装语言选择界面,如图 2 所示。
图 2 安装语言选择
- 选择 "简体中文",选择 "OK",出现键盘选择界面。这里默认选择 "US" 美式标准键盘,选择 "OK",出现安装方法界面,如图 3 所示。
图 3 安装方法
- 选择 "Harddrive (硬盘驱动)",选择 "OK",进入选择分区界面。这里分区使用 "/dev/sdb4" 代表 U 盘分区。"Directory holding image" 项用于搜索 U 盘 image 目录下的 install.img 文件,不用填写,系统会自动搜索,如图 4 所示。
图 4 选择分区
- 选择"OK",进入图形安装界面。
之后的安装过程就比较简单了,在此不再赘述。
五、使用dd命令安装Linux系统
面对大批量服务器的安装,人们往往热衷于选择“无人值守安装”的方式,而此方式需要对服务器进行过多的配置,并不适合初学者。
无人值守安装(Kickstart),又称全自动安装,其工作原理是,创建一个名为 ks.cfg 的文件记录 Linux 系统在安装过程中需要人工干预填写的各种参数,当安装过程中出现要填写参数时,安装程序会自行去 ks.cfg 文件中查找合适的参数,如果没找到,还是需要手工干预。因此,在 ks.cfg 文件涵盖安装过程所有可能需要填写的参数的前提下,安装者只需要告诉安装程序 ks.cfg 文件的位置,就可实现全自动安装。
本节介绍使用 dd 命令实现硬盘复制,间接实现安装 Linux 系统的方法,此方式类似 Windows 下用 GHOST 软件进行硬盘克隆。
首先,我们先来系统了解一下 dd 命令。
对于初学者来说,本节内容可在掌握常用 Linux 命令后再行学习。
1、Linux dd 命令是什么
dd 命令是用来复制文件的命令,它可以用指定大小的数据块复制一个文件,并在复制的同时进行指定的转换。简单地理解,dd 命令可用于进行两块硬盘之间的复制(完整复制出一块和原系统盘一样的硬盘)。
dd 命令的格式如下:
[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
- if=输入文件:指定源文件或源设备;
- of=输出文件:指定目标文件或目标设备;
- bs=字节数:指定一次输入/输出多少字节,即把这些字节看作一个数据块;
- count=个数:指定输入/输出多少个数据块;
【例 1】
[root@localhost ~]# dd if=/dev/zero of=/root/testfile bs=1k count=100000
#创建一个100MB大小的文件testfile,/dev/zero是一个输入设备,可以使用它来初始化文件,该设备无穷尽地输出0,可以理解为向testfile中不停地写0,直到写满100MB;
【例 2】
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb
#把第一块硬盘中的数据复制到第二块硬盘中
【例 3】
[root@localhost ~]# dd if=/dev/hda of=/root/image
#把第一块硬盘中的数据复制到image文件中
使用 dd 命令复制硬盘,需满足以下两个前提条件:
- 需要批量复制的服务器硬件配置一致。通常,采购服务器都是批量采购的,服务器的配置都是一样的。
- 复制硬盘的时候,需要手工更换被复制盘。服务器上一般都是 SCSI 硬盘,SCSI 硬盘支持热插拔,而且不需要拆卸机箱,更换被复制盘非常方便。
实际上,笔者当年维护大批量服务器时采用的就是 dd 复制,而不是无人值守安装。
2、dd命令安装Linux详细步骤
通过以上的学习我们知道,使用 dd 命令安装 Linux,实际上就是硬盘之间的完整拷贝,其实现过程如下:
- 把母盘插入服务器的第一个硬盘插口,把被复制盘插入服务器的第二个硬盘插口,注意不要插反。
- 执行复制命令
dd if=/dev/sda of=/dev/sdb
。在 dd 命令中,if 指定复制源,of 指定复制目标。/dev/sda 代表第一块 SCSI 盘,/dev/sdb 代表第二块 SCSI 盘。这条命令会把第一块硬盘中的数据完整地复制到第二块硬盘中。
经过以上两步,即可实现将服务器之间的复制。那么,此方法的效率如何呢?由于复制的速度和服务器的配置及安装软件的多少相关,因此每台服务器的复制时间约为15〜25分钟,效率还可以接受。
选择无人值守安装的方式,也要受到服务器端配置和网络带宽的影响,而且硬盘复制也可以多台服务器同时操作。
六、使用LiveCD从光盘直接运行Linux,无需安装
Linux 世界中一个相对较新的现象是可引导的 Linux CD 发行版的出现。它无需安装就可以看到 Linux 系统是什么样的。
多数现代 PC 都能从 CD 启动,而不是必须从标准硬盘启动。基于这点,一些 Linux 发行版创建了含有 Linux 样本系统的可引导 CD,称为 Linux LiveCD。
由于单张 CD 容量的限制,这个样本并非完整的 Linux 系统,不过令人惊喜的是,你可以自己加入各种软件。结果就是,你可以通过 CD 来启动 PC,并且无需在硬盘安装任何东西就能运行 Linux 发行版。
这是一个不弄乱 PC 就体验各种 Linux 发行版的绝妙方法。只需插入 CD 就能引导了!所有的 Linux 软件都将直接从 CD 上运行。你可以从互联网上下载各种 Linux LiveCD,刻录,然后体验。下表列出了一些可用的流行 Linux LiveCD。
发行版 | 说明 |
---|---|
Knoppix | 来自德国的一款 Linux 发行版,也是最早的 LiveCD Linux。 |
PCLinuxOS | 一款成熟的 LiveCD 形式的 Linux 发行版。 |
Ubuntu | 为多种语言设计的世界级 Linux 项目。 |
Slax | 基于 Slackware Linux 的一款 LiveCD Linux。 |
Puppy Linux | 为老旧 PC 设计的一款全功能 Linux。 |
你能在这张表中看到熟悉的面孔。许多特定用途的 Linux 发行版都有对应的 Linux LiveCD 版本。
一些 Linux LiveCD 发行版,比如 Ubuntu,允许直接从 LiveCD 安装整个发行版。这使你可以从 CD 引导启动,先体验一下此 Linux 发行版,如果喜欢的话,再把它安装到硬盘上。这个功能极其方便易用。
就像所有美好的事物一样,Linux LiveCD 也有一些不足之处。由于要从 CD 上访问所有东西,应用程序会运行得更慢,而如果再搭配上陈旧缓慢的 PC 和光驱,那更是慢上加慢。还有,由于无法向 CD 写入数据,对 Linux 系统作的任何修改都会在重启后失效。
不过,有一些 Linux LiveCD 的改进帮助解决了上述一些问题。这些改进包括:
- 能将 CD 上的 Linux 系统文件复制到内存中;
- 能将系统文件复制到硬盘上;
- 能在U盘上存储系统设置;
- 能在U盘上存储用户设置。
一些 Linux LiveCD,如 Puppy Linux,只包含最少数量的 Linux 系统文件。当 CD 引导启动时,LiveCD 的启动脚本直接把它们复制到内存中。这允许在 Linux 启动后立即把 CD 从光驱中取走。这不仅提高了程序运行速度(因为程序从内存中运行时更快),而且还空出了 CD 光驱,供你用 Puppy Linux 自带的软件转录音频 CD 或播放视频 DVD。
其他 Linux LiveCD 用另外的方法,同样允许你在启动后将 CD 从光驱中拿走。这种方法是将核心 Linux 文件作为一个文件复制到 Windows 硬盘上。待 CD 启动后,系统会寻找那个文件,并从中读取系统文件。dyne:bolic Linux LiveCD 采用的就是这种技术,我们称之为“对接”。当然,你必须在从 CD 引导启动之前把系统文件复制到硬盘里。
一种非常流行的技术就是用常见的U盘(也称为闪存或闪盘)来存储 Linux LiveCD 会话数据。几乎每个 Linux LiveCD 都能识别插入的U盘(即使是在 Windows 下格式化的)并从U盘上读写文件。
这允许你启动 Linux LiveCD,使用 Linux 应用来创建文件,再将这些文件存储在U盘上,然后用 Windows 应用(或者在另外一台电脑上)访问这些文件。这该有多酷!
七、为什么建议使用虚拟机来安装Linux?
笔者认为,通过虚拟机软件学习是初学者学习 Linux 的最佳方式。
在与部分读者的交流中,笔者发现,很多初学者都认为,学习 Linux 就必须将自己的电脑装成 Linux 系统或者必须要有真正的服务器设备。而实际上,这是一些机构、书籍或网络文章给大家传导的错误思想。
其实,学习 Linux 最简单、最实用的环境就是虚拟机环境(例如,通过 VMware Workstation 软件学习),这样说的原因有如下几点。
1) 利用虚拟机软件搭建 Linux 学习环境简单,容易上手,最重要的是利用虚拟机模拟出来的 Linux 与真实的 Linux 几乎没有区别,而购买服务器动则就要一两万元人民币,不是一般的初学者所能承受的,且声音很大,也很费电。
如果用 PC 和笔记本搭建 Linux(包括双系统共存方式),那就完全是 Linux 环境了,这样做不但加大了你的学习难度(例如,没法用 Word 等记笔记,以及正常浏览网页),也与实际的工作环境相差很远,而用虚拟机软件来搭建环境是最接近企业工作环境的。
企业里运维人员的工作环境绝大多数都是在 Windows 桌面系统下通过 SSH 工具(SecureCRT/Xshell)远程连接千百里之外的 Linux 服务器进行管理和维护的。
2) 搭建 Linux 集群等大规模环境,有时需要同时开启几台虚拟机(每台虚拟机仅需 256~512MB 内存、6~8GB 的硬盘空间即可),此时如果是用服务器或者自己的电脑安装 Linux,则很难满足学习要求,购买多台服务器就更不现实了。
事实上,仅仅利用价值四五千元人民币的个人笔记本电脑,就可以轻松实现搭建中小规模 Linux 集群架构的学习需求了。这里所谓的集群,简单理解,就是将多个计算机做为一个整体,向用户提供服务。
3) 用虚拟机学习,如果电脑配置高一点,那么可以同时开启多个 Linux 虚拟机学习,上班、回家的路上,带着笔记本电脑即可随时学习,如果是多台真实电脑和服务器设备,就没法移动了。当然有读者会说可以放机房里,但这个代价也太大了。大多数学习者很难有这样的资源。
4) 使用虚拟机系统环境,我们可以对虚拟系统随意进行任何的设置和更改操作,甚至可以格式化虚拟机系统硬盘,进行重新分区等操作,而且完全不用担心会丢掉有用的数据,因为虚拟机是系统上运行的一个虚拟软件,对虚拟机系统的任何操作都相当于是在操作虚拟机的虚拟机设备和系统,不会影响电脑上的真实数据。
综上所述,笔者给大家的建议就是,踏实地用虚拟机学习就足够了,不要为自己设置太多的限制和门槛,否则可能会影响学习 Linux 的进度,从而丧失学习 Linux 的兴趣。
初学者应选择哪款虚拟机软件?
如果你使用的是 Windows 系统,那么笔者推荐使用 VMware WorkStation;如果使用的是 MacOS 平台,则推荐选择 Virtual PC;如果使用的是 CentOS 系统,则推荐选择 VMware(Linux 版本)或者 KVM。
本教程以在 Windows 系统上安装 VMware WorkStation 的方法,给大家讲解 Linux,而具体的安装过程会在后续章节中作详细讲解。
八、Linux单用户模式(修改密码、运行级别)方法详解
很多新手当面对“忘记 root 账户密码导致无法登陆系统”这个问题时,直接选择重新系统。其实大可不必,我只需要进入 emergency mode(单用户模式)更新 root 账户的密码即可。
Linux 的单用户模式有些类似 Windows 的安全模式,只启动最少的程序用于系统修复。在单用户模式(运行级别为 1)中,Linux 引导进入根 Shell,网络被禁用,只有少数进程运行。
单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
1、如何进入单用户模式
现在,我们假设系统出现了问题,已经不能正常登录了。那么,如何进入单用户模式呢?
首先需要重启服务器,在 GRUB 读秒界面按任意键,进入 GRUB 菜单界面,如图 1 所示。
图 1 GRUB菜单界面
在想要进入单用户模式的 Linux 菜单上按"e"键,就会进入 GRUB 编辑界面,如图 2 所示。
图 2 GRUB编辑界面
在 GRUB 编辑界面中,移动光标到第二行 kernel 行,然后继续按"e"键,进入行编辑界面。在此行最后输入"空格 single",代表启动进入单用户模式(注意:空格必须存在),如图 3 所示。
图 3 GRUB行编辑界面
然后按回车键,就会回到上一个界面,如图 2 所示。再按"b"键(启动),就会启动进入单用户模式。单用户模式是不需要输入用户名和密码就能直接进入提示符界面的,如图 4 所示。
图 4 单用户模式提示符界面
我们已经登录了 Linux 系统的单用户模式,而且是不需要输入用户名和密码就可以直接进入的。这时如果有系统问题,就可以在单用户模式中进行修复了。
2、单用户模式常见的错误修复
我们已经进入了单用户模式,那么我们在单用户模式中主要可以修复哪些系统错误呢?下面举几个例子。
(1)遗忘root密码
这是管理员最容易犯的错误,应该如何修复呢?当然是使用单用户模式进行修复了,因为进入单用户模式的最大特点就是不需要输入用户名和密码。既然已经登录了单用户模式,那么直接给 root 用户设定新密码即可。 命令如下:
[root@localhost /]# passwd root
运行效果如图 5 所示。
图 5 单用户模式修改 root 密码
(2)修改系统默认运行级别
如果我们把系统的默认运行级别修改错误,比如改为了 0 或 6,系统就不能正常启动了。这时也可以利用单用户模式进行修复,只需直接修改默认运行级别配置文件 /etc/inittab,把系统默认运行级别修改回来即可。命令如下:
[root@localhost /]# vi /etc/inittab
id:3:initdefault:
#把默认运行级别修改为3或5。注意:系统的默认运行级别只能使用3或5
理论上,只要能够进入单用户模式,那么系统错误就可以在单用户模式中进行修复。当然,判断系统到底哪里出现了问题,是需要大量的经验积累的。
九、Linux rescue救援(光盘修复)模式详解
如果系统错误已经导致单用户模式不能进入了,那么是否需要重新安装 Linux 系统?不用着急,为了应对单用户模式也无法修复的错误,Linux 系统提供了 rescue 救援(光盘修复)模式。
rescue 救援模式的原理是不再使用硬盘中的文件系统启动 Linux,而是使用光盘中的文件系统启动 Linux。这样,就算硬盘中的 Linux 系统已经不能登录了(单用户也不能登录),rescue 救援还是可以使用的。当然,此模式也不是万能的,这时就只能重新安装 Linux 系统了。
1、如何进入rescue模式
首先需要有系统光盘或系统修复光盘。这里只需要把 CentOS 6.x 的第一张光盘放入光驱,然后重启系统,修改 BIOS 的启动顺序,让系统从光盘启动,就会看到如图 1 所示的光盘启动界面。
图 1 光盘启动界面
在这个界面上选择 "Rescue installed system" 进入rescue 救援,然后系统就会提示选择语言,如图 2 所示。
图 2 语言选择界面
选择 "English",接下来就会让我们选择键盘,如图 3 所示。
图 3 键盘选择界面
选择 "US",即美式标准键盘,之后会进入选择修复模式所在介质界面,如图 4 所示。
图 4 选择修复模式所在介质界面
选择光盘介质,然后确定,就会进入网络配置界面,如图 5 所示。
图 5 网络配置界面
选择"No",即不启用网络配置,就会进入 Rescue 模式选择界面,如图 6 所示。
图 6 Rescue模式
选择 "Continue" 进入光盘修复模式,在之后弹出的界面中选择 "OK",就会进入启动功能选择界面,如图 7 所示。
图 7 启动功能选择界面
选择 "shell Start shell",就会进入光盘修复模式,看到命令提示符。
2、rescue模式常见的错误修复
利用 rescue 救援模式,主要可以修复什么错误呢?其实能在单用户模式中修复的错误都能在该模式中修复,当然还可以修复一些在单用户模式中无法修复的错误。
(1) 多系统并存,GRUB被覆盖
还记得在前面章节中讲解的手工安装 GRUB 吗?有一种情况就是先安装 Linux,后安装 Windows,导致 MBR 中的启动引导程序被 Windows 引导程序覆盖,需要重新安装 GRUB 引导程序。
重新安装 GRUB 的过程已经讲过了,但是重新安装 GRUB 的命令需要在 rescue 模式中执行。我们重新写一遍覆盖安装 GRUB 的过程,如下:
#放入光盘重启,进入 rescue 模式
sh-4.1#grub
#启动GRUB交互界面。注意到了吗?提示符不一样了,那是因为从光盘启动了系统,所以环境变量配件文件没有生效
gmb> root (hd0.0)
#设置GRUB的主目录
grub>setup (hd0)
#因为直接把GRUB安装到MBR中,所以不需要指定分区
grub> quit
#退出
这样GRUB覆盖安装的实验才算完成了。
(2) 重要系统文件丢失,导致系统无法启动
如果系统中的重要系统文件丢失,则会导致系统无法正常启动,这时也可以利用 rescue 模式来进行修复。我们假设 /etc/inittab 文件丟失了,通过系统启动过程知道这个文件是于定义系统默认运行级别的,如果丟失了这个文件,那么系统当然不能正常启动,这时就需要进入 rescue 模式中,然后执行 chroot 命令。命令格式如下:
[root@localhost ~]#chroot 目录名
chroot 命令的作用是改变系统根目录,也就是可以把根目录暂时移动到某个目录当中。我们是通过光盘启动的 rescue 模式,所以我们现在所在的根目录并不是真正的系统根目录,而是光盘的模拟根目录,真正的系统根目录被当成外来设备放在了 /mnt/sysimage/ 目录中。
这时,就需要使用 chroot 命令把我们现在所在的根目录改成真正的系统根目录。命令如下:
bash-4.1# chroot /mnt/sysimage
执行这条命令之后,当前的根目录就是真正的系统根目录了。如果系统有任何错误,则可以直接修复。比如 /etc/inittab 文件丟失了。这时如果我们备份过系统重要文件,那么只需要把备份文件复制到 /etc/ 目录下即可。如果没有备份的文件,就需要从 RPM 包中提取 inittab 文件,然后复制。具体命令如下:
bash-4.1# chroot /mnt/sysimage
#改变主目录
sh-4.1#cd/root
#进入root目录。因为默认进入的是/目录,所以如果不进入root目录,那么一会提取的inittab文件会报错
sh-4.1# rpm -qf /etc/inittab
initscripts-9.03.31-2.el6.centos.i686
#查询一下/etc/inittab文件属于哪个包。如果系统中文件丢失不能查询,则需要通过其他Linux系统查询
sh-4.1# mkdir /mnt/cdrom
#建立挂载点
sh-4.1# mount /dev/sr0 /mnt/cdrom
#挂载光盘
sh-4.1# rpm2cpio /mnt/cdrom/Packages/initscripts-9.03.31-2.el6.centos.i686.rpm|cpio -idv ./etc/inittab
#提取inittab文件到当前目录
sh-4.1# cp etc/inittab /etc/inittab
#复制inittab文件到指定位置
注意,在执行此命令时不能将文件直接恢复到 /etc/ 目录,只能提取到当前目录,且恢复的文件名称所在路径要写完整的绝对路径。提取文件成功后,将其复制到根分区所在的 /mnt/sysimage/ 目录下的相应位置即可。
系统修复模式是维护 Linux 的有力武器,本节通过两个例子讲解了它的应用方法,希望能够给读者一点启示。解决 Linux 系统启动的故障,必须充分理解 Linux 的引导过程,才能够对故障进行有效的判断和处理。
十、Linux系统安全性分析
很多人看到系统修复模式这节内容时,都会有所感慨:Linux 的密码破解太容易了,这样的操作系统还安全吗?Linux 不是以安全性著称的吗?
图 1 密码安全
本节,我们结合图 1 解释一下类似的问题。
我们一开始始为了安全,给用户设定密码,但是这样密码可以很容易地被单用户模式破解。我们又想到,进入单用户模式,需要在 GRUB 启动界面上按"e"键,那么我们就给 GRUB 加密,必须输入正确的 GRUB 密码,才能进入 GRUB 的编辑界面,这样就保证了用户密码的安全。
不过,GRUB 加密是可以通过进入光盘修复模式,直接删除 GRUB 配置文件中的 password 行而被破解的。接着我们又想到,进入光盘修复模式,是需要通过光盘启动系统的,那么我们给 BIOS 加密,这样就必须输入正确的 BIOS 密码,才能修改光盘的启动顺序。但是 BIOS 加密是可以通过拔除主板电池而删除的。那我们只能把服务器机箱锁起来,但只是一把锁而已,完全可以被螺丝刀撬开!
其实,这里是大家对概念的理解有误。任何一个需要密码的设备,不论是 Windows、Linux、交换机、路由器,还是一个需要密码的软件,都必须留有破解密码的漏洞。如果我们的计算机没有破解密码的方法,那么万一忘记了计算机的密码,难道要重新买一台吗(如果忘记了 BIOS 密码,又不能破解,当然不能重新安装系统了)?
当然不能是这样的,所以这些漏洞是必须预留的。这些漏洞是不会影响系统安全的,因为我们可以拿到计算机本身。如果我们能够拿到计算机,就认为我们对这台计算机拥有所有权。我们所说的安全性主要是指在对计算机没有所有权时要保证绝对安全。
而且大家要注意,如果 root 没有密码,那么本机登录是没有任何问题的,但是不可能远程登录。所以我们所说的安全性主要针对的是网络安全。