第0章:CentOS7的安装与初始化配置

0.1 初识Linux

    很高兴大家选择我们的课程,从现在开始我们就要一起开启愉快的Linux之旅了!

    在我们开始正式学习Linux课程之前呢,我们需要对Linux有一个初步的了解。所以,首先我们要做的就是认识Liunx,揭开它的神秘面纱!

0.1.1 生活中的Linux身影

    也许我们曾经听说过或者接触过Linux,知道它是一种操作系统,而我们都知道操作系统是使计算机运行的基本程序和工具的集合,来支配计算机硬件来进行工作,如果我们的计算机没有安装操作系统的话那这台计算机是无法接收到我们的指令而进行工作的。

    提到操作系统可能在工作学习中大家比较熟悉的就是Windows操作系统了,还会有一部分人使用MAC OS,相对来说很少会有人将Linux操作系统安装在个人计算机上,甚至很多人都不知道Linux操作系统的存在。

    但是实际上,Linux已经渗透到我们生活中的方方面面了,在互联网世界中Liunx是无处不在的。举个简单的例子,现在我们出门的时候可以不带钱,但是肯定不会忘记带手机,现在几乎每人都会至少有一部智能手机,我们都知道手机大多数使用的系统都是安卓系统,但是你可能不知道,安卓系统其实也是Linux操作系统中的一员。因为我们平时所说的Liunx操作系统实际上指的是那些内核为Liunx的操作系统。

    一个完整的Linux操作系统除了内核之外还需要有Shell、文件系统和应用程序。

在整个Linux操作系统中,内核(Kernel)是系统的心脏,实现操作系统的基本功能。在硬件方面可以控制硬件设备,管理内存,提供硬件接口,处理基本I/O。在软件方面可以管理文件系统,为程序分配内存和CPU时间等。而Shell是系统的用户界面,提供用户与内核进行交互操作的一种接口。它解释由用户输入的命令并且把它们送到内核执行。标准的Linux系统都有一套称为应用程序的程序集,包括文本编辑器、编程语言、办公套件、Internet工具、数据库等。当然,还可以有用户自己编写的具有特定功能的应用程序。文件系统则是文件存放在磁盘等存储设备上的组织方法。通常是按照目录层次的方式进行组织。每个目录可以包括多个子目录以及文件,系统以“/”为根目录。系统中的所有数据都存储在文件系统上以便用户读取、查询和写入。Linux能支持多种目前流行的文件系统,如ext2、ext3、ext4、fat、vfat、ISO9660、nfs等。而安卓系统使用的则是Linux的内核,所以我们说安卓系统也是Linux操作系统中的一员。

    那除了刚才我们所说的手机之外我们生活中还有很多娱乐影音设备如:平板电视,视频游戏控制器等使用的也是Liunx操作系统,还有像我们平时访问的百度,淘宝,谷歌等网站的服务器上绝大多数使用的也是Linux操作系统,还有世界上百分之九十的超级计算机也是使用的Linux操作系统。所以说现在Liunx已经渗透到我们生活中的方方面面了,只不过平时我们对它了解的比较少所有忽略了它的存在。

0.1.2 Linux系统的优势

    那么接下来呢我们就需要探索一下Linux为什么会在各个领域得到广泛应用:

    第一点:跨平台的硬件支持

    Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备都可以支持。

    第二点:多用户多任务

    Linux操作系统允许多用户以本地登陆或远程连接的方式同时登陆操作系统对属于自己的资源进行读写等操作而互不影响。多任务是现代计算机的最主要的一个特点,在Linux系统上也可以同时执行多个程序,而同时各个程序的运行互相独立。

    第三点:可靠的安全性

    Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。

    第四点:良好的稳定性

    Linux 内核的源代码是以标准规范的32 位(在64 位CPU上是64 位)的计算机来做的最佳化设计,可确保其系统的稳定性。所以使得一些安装 Linux 的主机可以常年不关而不宕机。

    第五点:完善的网络功能

    Linux 内置了很丰富的免费网络服务器软件、数据库和网页的开发工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP 等。近年来,越来越多的企业看到了Linux 的这些强大的功能,利用Linux 担任全方位的网络服务器。

    除了这些Linux还有一个最大的特点就是开源,免费。Linux的源代码是开放的可以被任何人获取和使用,还可以根据自身需求进行定制并重新发布。

0.1.3 Linux的诞生

    那么如此强大的Linux是如何诞生的呢?

    提到Linux的诞生我们需要感谢两个人。一个是Linus Torvalds,他被成为Linux之父,Linux内核便是他开发的。在1991年8月Linus还是芬兰赫尔辛基大学的一名学生他对Minix产生了兴趣,Minix是一个开源的类UNIX系统,是赫尔辛基大学教授为课程教学而开发的,Linus想开发一个类似Minix的操作系统,用在他自己的计算机上,在1991年9月,Linus在互联网上发布了Linux版本为0.0.1,从严格意义上来说,Linux0.0.1并不是一个完整的操作系统,它只是一个操作系统的内核,只有一个内核用户是什么都做不了的,那么这个问题是如何解决的呢?这就要提到另外一个人Richard Stallman,他是自由软件运动的发起人,开发了许多Linux重要的基础应用,被称为自由软件之父。在1983年春天麻省理工人工智能实验室的程序员Richard Stallman深深的觉得UNIX商业软件极大的束缚了开发者和软件用户,有背软件自由的本意,因此他发起了GNU(自由软件运动)项目,旨在开发一个自由的类UNIX操作系统,GNU项目的创立标志着自由软件运动的开始。在1985年10月他又创立了自由软件基金会,在自由软件基金会的支持下到1991年很多GNU工具都被开发出来了,包括强大的GCC编译器和GDB调试器等等。但是建立一个自由的操作系统还差一个必不可少的一部分,那就是自由的内核,就在这时Linux0.0.1发布了,在1992年结合了Linux内核和GNU软件的Linux正式诞生了,其名称为GNU/Linux,简称Linux,经过不断发展到今天Linux已经是一个非常成熟先进的操作系统了。现在的Linux是由一些非营利性基金如自由软件基金会,相关公司如红帽公司也包括Linux开发社区组织如CentOS社区还包括许多Linux爱好者共同开发和维护。正因为有如此强大的开发团队Linux的更新速度也是非常快的,平均2-3个月Linux核心就会推出一个新的版本。

    随着Linux内核的发展各个组织和公司都推出了自己的发行版本。这些发行版本可能存在较大的差异,但是并不是内核差异,而是表现在外部程序上和各自的侧重点不同,目前Linux发行版本就有数百个。

01-centos7安装与管理命令

第一章:centos7安装与管理命令

1.1 centos7安装:

Install CentOS 7 #安装CentOS 7

Test this media & install CentOS  7 #测试安装文件并安装CentOS  7

Troubleshooting #故障修复

请选择第一项安装Centos7

选择语言:中文-简体中文(中国)

1.2 软件包定制

继续 下一步选择 “软件选择(s)” 选择“GNOME桌面” 与 “开发工具” 点击完成。

软件选择注解:

最小安装(Minimal Install)

这个选项只提供运行CentOS 的基本软件包。最小安装为单一目的服务器提供基本需要,并可在这样的安装中最大化性能和安全性。

基础设施服务器(Infrastructure Server)

这个选项提供在服务器中使用的CentOS 基本安装,不包含桌面。

文件及打印服务器(File and Print Server)

用于企业的文件、打印及存储服务器。

基本网页服务器(Basic Web Server)

基本系统平台,加上PHP,Web server,还有MySQL和PostgreSQL数据库的客户端,无桌面。

虚拟化主机(Virtualization Host)

这个选项提供 KVM 和 Virtual Machine Manager 工具以创建用于虚拟机器的主机。

带GUI的服务器(Server with GUI)

带有用于操作网络基础设施服务GUI的服务器。

GNOME桌面(GNOME Desktop)

GNOME是一个非常直观且用户友好的桌面环境。

KDE Pasma Workspaces(KDE桌面)

一个高度可配置图形用户界面,其中包括面板、桌面、系统图标以及桌面向导和很多功能强大的KDE应用程序。

开发及生成工作站(Development and Creative Workstation)

这个选项提供CentOS 编译软件所需的工具。

如果使用文本模式安装Linux,将不能进行软件包选择。安装程序只能自动从基本和核心组群中选择软件包。这些软件包足以保证系统在安装完成后可操作,并可安装更新和新的软件包。要更改软件包选择,需要在完成安装后,使用 Add/Remove Software 程序安装。

1.3 磁盘分区

继续选择 安装位置(D)。我要配置分区-点击 完成。

1.3.1 创建/boot分区

1.3.2 centos7方案:
/boot:boot分区设备类型,必须为标准分区。用来存放与Linux系统启动相关的程序,比如启动引导装载程序grub等,建议大小为500MB。

 

其他分区为了方便存储大数据充分利用磁盘资源,设备类型必须为lvm, 文件系统类型为xfs, 我自定义卷组名为“zhangbin”。


/usr :用来存放Linux系统的内核文件,其相关数据较多,建议大于6GB以上。

/usr/local: 用来存放Linu应用程序文件 建议大于6GB以上。
/var :用来存放Linux系统中经常变化的数据以及日志文件,建议大于4GB以上。
/home:存放普通用户的数据,是普通用户的宿主目录,建议根据业务需要分配大小。
/ :Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为6GB以上。
/tmp:将临时分区独立分割,可避免在文件系统被塞满时影响到系统的稳定性。建议大小为2G以上。
swap:实现虚拟内存,建议大小是物理内存的1~2倍。

1.3.3手动分区 注解:

名称(Name):分配一个名称,一个LVM或Btrfs的量。需要注意的是boot标准分区自动命名不能被编辑,如/boot被分配的名称sda1。

挂载点(Mount point):输入分区的挂载点。例如,如果分区是根分区,输入/;启动boot分区输入/ boot,依此类推。对于一个交换分区,挂载点不需要设置 – 只要设置文件系统类型交换就足够了。

标签(Label):分配一个标签的分区。标签更容易地识别分区。

所需的容量(Desired capacity):输入的分区的所需尺寸。可以使用普通大小的单位,如千字节,兆字节,GB或TB。兆是默认选项。

设备类型(Device type):标准分区,BTRFS,LVM或LVM精简配置之间进行选择。如果被选择的分区分隔在两个或多个磁盘上,RAID也是可用的。检查相邻的加密框,分区加密。系统将提示您以后设置密码。

下面是设备类型简短描述,以及它们是如何被使用:

标准分区:标准分区可以包含文件系统或交换空间。

逻辑卷(LVM):创建一个LVM分区自动生成一个LVM逻辑卷。 LVM可以提高物理磁盘利用率。

LVM精简配置:使用自动精简配置,可以管理自由空间,被称为精简池,它可以根据需要,由应用程序可以分配给设备任意数量的存储池。所需的存储空间具有成本效益的分配时,薄池可以动态地扩展。

BTRFS:它在处理大文件和大体积数据要比的ext2,ext3和ext4 甚至是xfs文件系统更有优势。缺点是稳定性相对略差。

软件RAID:创建两个或两个以上的软件RAID分区,就可以创建RAID设备。一个RAID分区被分配到不同的磁盘上。

文件系统(File system ):在下拉菜单中,选择该分区中的相应的文件系统类型。检查相邻的格式化对话框 格式化现有的分区,或将其选中保留。

下面是文件系统的描述,以及它们是如何被使用:

XFS:XFS是一个支持的文件系统多达16艾字节(约16万TB)的高度可扩展,高性能的文件系统.子目录结构支持上千万条目。 XFS支持元数据日志,有利于更快的崩溃恢复。 除此之外XFS文件系统也可以进行碎片整理和调整。这个文件系统是默认选择,并强烈推荐。单个XFS分区可以支持到500 TB大小。

EXT4:ext4文件系统是基于ext3文件系统,并采用了多项改进。这些措施包括对更大文件系统和更大的文件,磁盘空间,子目录的目录中的数量的限制,更快的文件系统检查速度更快,更有效地分配支持,更强大的日志记录 和可操控性。

EXT3:ext3文件系统是基于ext2文件系统上,它有一个主要优点。使用文件系统减少花费的时间恢复崩溃后的文件系统,因为没有必要通过每次碰撞发生时运行fsck实用程序来检查元数据的一致性的文件系统。

EXT2:ext2文件系统支持标准Unix文件类型,包括普通文件,目录或符号链接。它还提供了分派长文件名,最多255个字符的能力。

VFAT:VFAT文件系统是Linux文件系统与FAT文件系统上的Microsoft Windows长文件名兼容。

swap:交换分区被用于支持虚拟内存。换句话说,数据被写入到交换分区的时候没有足够的内存来存储您的系统正在处理的数据。

BIOS boot:需要有一个GUID分区表(GPT)在BIOS中的系统引导设备一个非常小的分区。

EFI系统分区:需要有一个GUID分区表(GPT)在UEFI系统引导装置一个小分区。

1.4 配置网络与设置用户密码

完成 接受更改-开始安装。设置root用户密码 并创建用户。安装完后重启系统。

登陆root,链接网络配置有线网卡为on.主机会通过dhcp获得ip地址。

或者是右上角 右击 网络设置-有线-配置 -ipv4 设置网络。

另外还需要选择,认证选项- 勾选自动链接,否则服务器网络不会自动启用。

然后使用 systemctl restart network.service 命令来重新启动网络使设置生效。

1.5系统更新

请确定主机可以访问互联网。使用yum upgrade 或者 yum update 更新系统。

1.6系统初始配置

1.6.1安装必备的组件

yum install wget telnet perl perl-devel net-tools kernel-devel

安装这些组件之后会大大方便安装其他应用时碰到依赖关系的问题。其中net-tools是为了提供dig, nslookup, ifconfig等命令,方便配置CentOS 7初始化网络环境。如果不安装net-tools,在CentOS 7中,可以使用ip addr命令来代替ipconfig进行当前ip地址查询。

确认开发工具组已经安装 否则需要使用 yum groupinstall "Development tools" -y进行安装。

1.6.2安装第三方软件源

安装epel与remi第三方软件源,为了避免软件冲突,可自行选择是否安装。也可以安装完成后关闭,需要时再开启安装源。

yum install epel-release.noarch

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

启用remi安装源,编辑remi.repo文件

vim /etc/yum.repos.d/remi.repo

[remi]

name=Les RPM de remi pour Enterprise Linux 7 – $basearch

#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/

mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror

enabled=1 #enabled改为1, 0为关闭状态。

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

或者直接下载remi源安装即可。

rpm -ivh remi-release-7.rpm

为了安全起见先使用yum clean all 清除yum缓存与旧的数据包。再用yum update重新更新源。

添加多媒体源与fedora源可选,再生产环境中不建议安装多媒体源,同样也是避免软件版本冲突:

rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

fedora源: rpm -Uh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

ElRepo源(地址:http://elrepo.org/tiki/tiki-index.php):

        导入公钥:rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

        导入源:rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum 指定安装某个源下的软件的方法,为了避免rpm软件包冲突,该源也可以处于关闭状态 –enablerepo选项 就可以将其开启。

yum install nginx –enablerepo=epel

nginx是要安装的软件,epel是repo源的名字。
建议安装的时候尽量选择同一个源。因为不同的源安装的软件可能会有冲突。

例如安装nginx : yum install nginx –enablerepo=epel

本例是禁用所有的源,只应用epel源,在此源中查找并安装htop包

yum –disablerepo=\* –enablerepo=epel search htop

yum –disablerepo=\* –enablerepo=epel install htop

1.6.3 关闭CentOS 7的firewall防火墙

临时关闭防火墙服务的命令是systemctl stop firewalld.service。

stop只是临时停止防火墙服务器,重启系统后防火墙服务还会开启,要想永久关闭防火墙需要使用systemctl disable firewalld.service 命令永久关闭防火墙服务。

1.6.4修改CentOS 7网络设备名称:

在centos6系列的操作系统中,安装好系统后网卡名称为eth0 eth1 eth2……。但centos7版本的系统安装好系统后网卡名称为eno1777736。网卡名称可以修改成eth0,当然不修改也可以正常使用,个人习惯问题,我习惯把网卡名称改为eth0。

修改方法如下:

输入如下命令,进入对应目录,编辑文件:

vim /etc/sysconfig/grub

然后,往这个文件中添加“net.ifnames=0 biosdevname=0”内容,如下图所示:

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="rd.lvm.lv=zhangbin/root rd.lvm.lv=zhangbin/swap rhgb quiet net.ifnames=0 biosdevname=0"

GRUB_DISABLE_RECOVERY="true"

执行如下命令更新grub使设置生效

grub2-mkconfig -o /boot/grub2/grub.cfg

NetworkManager 是linux的图形界面管理网络的工具,它支持无线,但是在工作中一般都用network来配置网络,所以可以把NetworkManager关闭(可选)。

命令如下:

关闭NetworkManager.service

临时关闭:systemctl stop NetworkManager.service

永久关闭:systemctl disable NetworkManager.service

1.6.5修改网卡配置文件

cd /etc/sysconfig/network-scripts/

mv ifcfg-eno16777736 ifcfg-eth0

vim ifcfg-eth0

TYPE=Ethernet

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=no

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

DEVICE=eth0

ONBOOT=yes

IPADDR=192.168.1.200

PREFIX=24

重启系统初始服务命令为reboot

1.6.6 删除kvm nat网络

需要删除kvm默认网络,因为它会影响物理机防火墙规则。在本书的实验中不会用到kvm的nat网络,所以可以删除。

先使用virsh net-list查看所有的虚拟网络:

使用virsh net-list可以列出kvm虚拟网络,会看到default的网络,然后将其删掉

执行以下两个命令:

virsh net-destroy default 摧毁网络,但是重启libvirtd服务会恢复

virsh net-undefine default 彻底删除,重启系统后不会恢复

1.6.7 debian/ubuntu系统注意事项

如果安装的是debian /ubuntu系统 root用户默认是不能登陆图形界面的。当然这是为了让系统更加安全。如果你觉得这样在学习过程中不是很方便。可以修改它的设置让root用户可以登陆。配置方法如下:

Debian桌面环境默认不允许root登录,所以需要修改配置。

一、让Debian可以使用root登录

1)首先修改gdm3的设定文件(/etc/gdm3/daemon.conf),在[security]字段后面追加如下一行:

[security]

AllowRoot = true

2)最后修改gdm3的登录pam文件:

vi /etc/pam.d/gdm-password

将auth required pam_succeed_if.so user != root quiet_success注释掉 在本行前加#,使之不生效。

二、让Debian以root自动登录

1)首先修改gdm3的设定文件(/etc/gdm3/daemon.conf),在[daemon]字段后面追加如下两行:

AutomaticLoginEnable =true 改为true

#AutomaticLogin =root 以root自动登录

如果想等几秒再登录,可以在[daemon]字段后面追加如下内容:

TimedLoginEnable = true

TimedLogin = root

TimedLoginDelay = 5 延迟5秒登录,可修改

2)最后修改gdm3的自动登录pam文件:

vi /etc/pam.d/gdm-autologin

将auth required pam_succeed_if.so user != root quiet_success注释掉。 在本行前加#,取消Debian不让root登录的限制。

重启系统即可生效。

1.7基本命令详解:

1.7.1 Linux服务器的维护与调试

lscpu #查看cpu

lsblk #显示硬盘布局 baobab

lspci | grep Ethernet #网卡型号

lspci | grep VGA #显卡型号

lspci | grep audio #声卡信息

lsusb #显示服务器usb接口数量

free #查看内存 ,free指令会显示内存的使用情况。包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

-b  以Byte为单位显示内存使用情况。
 -k  以KB为单位显示内存使用情况。
 -m  以MB为单位显示内存使用情况。
 -o  不显示缓冲区调节列。
 -s<间隔秒数>  持续观察内存使用状况。
 -t  显示内存总和列。
 -V  显示版本信息。

cat /etc/redhat-release #查看系统发行版本

uname -r #显示内核版本

uname -n #显示主机名

1.7.2 服务器时钟

服务器时钟问题非常重要,因为关键点主机是不允许时间错误的。否则会导致一下三种后果。

1 网站反复注册

2 数据库数据回写

3 服务器后台无法登陆等

Cento7简单有效的应急解决办法:

设置服务器时钟为网络时钟

timedatectl set-ntp BOOL

这里的BOOL是yes或者no

1.7.3设置时区:

手动设置时区与时间的方法

查看系统所有的时区使用的命令是:

timedatectl list-timezones

Africa/Abidjan

Africa/Accra

Africa/Addis_Ababa

Africa/Algiers

Africa/Asmara

Africa/Bamako

Africa/Bangui

Africa/Banjul

Africa/Bissau

Africa/Blantyre

Africa/Brazzaville

Africa/Bujumbura

Africa/Cairo

……

timedatectl 显示时间与时区,只有在centos7中可以使用这个命令。

用以下命令设置时区:

timedatectl set-timezone time_zone

除了以上用法,timedatectl 还支持通过-H参数进行远程主机的时间设置。

Centos6版本之前的操作系统可以使用tzselect 来设置时区,centos7之后的版本设置时区都是使用timedatectl。

开启与关闭ntp自动同步时钟

timedatectl set-ntp true

timedatectl set-ntp false

timedatectl set-time 15:30 #设置系统时间

1.7.4 服务器系统时钟管理

在centos6之前的版本设置系统时钟需要使用date命令才可以。

date #查看服务器系统时钟

date -s "13:24" #设置时间

date -s "2018/10/11" #设置日期

date -s "2019/12/24 10:50" #同时设置时间与日期

hwclock –help #查看命令帮助

hwclock -s或–hctosys #从硬件时钟设置系统时间

hwclock -w 或–systohc #从当前系统时间设置硬件时钟

hwclock –set –date="03/19/2017 11:48" #设置硬件时钟的命令

1.7.5 服务器基本管理命令

1、关闭计算机的命令:

poweroff

init 0

halt

2、重启计算机的命令:

reboot

init 6

3、shutdown既可以关闭系统也可以重启系统

在Linux系统中每个命令都有很多选项。如何才能方便的记忆与使用这些选项呢?哪就需要掌握Linux帮助的使用方法了。

4、Linux 命令帮助

命令名 –help | more

显示一个简略的命令帮助(对大部分命令有效)。举个例子,试着使用 “cp help | more”。“–help”和和DOS下的“/h”开关功能类似。当输出超过一个屏幕时,加上“more”是很有必要的。

man 命令名 

显示对应命令系统的帮助手册。输入“q”退出浏览器。如果你设置了高级选项,试着输入“man man”。命令“info 命令名” 和命令“man 命令名”功能相似,但是包含更多的最新信息。帮助手册对于新手可能有点难于读懂,因为它们最初是写来给UNIX程序员看的。使用“命令名 –help”可以得到一个简略容易消化的命令帮助。有些程序自带README文件或者其他帮助信息文件—-建议你可以看看目录/usr/share /doc。在指定的部分显示命令帮助,可以使用这样的命令“man 3 exit”,这个命令只显示exit命令帮助手册的“第三部分”;或者使用命令“man –a exit”, 这个命令显示exit命令帮助手册的“所有部分”。exit命令帮助的所有部分是: 1-用户命令;2-系统调用;3-子调用;4-设备;5-文件格式;6-游戏;7-杂项;8-系统管理;9-新内容。打印完整的命令帮助,可以使用命令 “man 命令名 | col -b | lpr”(可选项col –-b删除所有的退格键和一些难以阅读的特殊字符)。

info 命令名

显示指定命令的帮助信息。info 命令取代man 命令的一个好处是,它通常带有最近更新的系统资料。多使用“空格键”和“退格键”,否则你可能会晕头转向。按“q”键退出。如果觉得用于翻阅的办法不太好用你也可以试着使用pinfo命令,看你会不会更喜欢这个替代品。

apropos 命令名

对所输入的命令名给出一个帮助一览表。

whatis 命令名

给出匹配所输入命令名的简短清单。whatis命令有点象apropos,它们使用相同的数据库。不同的是,whatis搜索的是关键字,apropos搜索的是关键字的具体描述。

例如:

shutdown –help –help可以寻求帮助,help只适用内部命令。

man shutdown #man适用于外部命令

info shutdown #info是man手册的扩展

shutdown -r now #立即重启

shutdown -r +1 -k "计算机将关闭,请保存未完成的配置!"

shutdown -r +1 -k "计算机将关闭,请保存未完成的配置!"

+1默认单位为分钟,当然业主支持小时 与天数,本例事设置一分钟之后重启系统。-k 提示信息。

shutdown -r 23:30 #指定特定时间重启系统

shutdown -p now #立即执行关机任务

shutdown -c  #取消关机任务

5、基本管理命令

cp 命令复制文件,格式为 cp [源文件路径] [目标文件路径] 对于新手来说需要注意的是, 路径中间要有空格分割。否则系统会认为是一个路径。以下内容就是一次错误复制的报错结果。把/root/initial-setup-ks.cfg文件复制到 /opt/目录下。源于目标路径之间没有空格将会出现以下错误。

[root@192 ~]# cp /root/initial-setup-ks.cfg/opt/

cp: 在"/root/initial-setup-ks.cfg/opt/" 后缺少了要操作的目标文件

由于本书重点不是讲解Linux基本命令,需要读者配合Linux的帮助或其他学习资料掌握以下基本命令的基本使用。

mv 移动或重命名

rm 删除文件

rm –rf 强制删除文件与目录

mkdir 建立空文件

rmdir 删除空目录

6、linux链接

Linux 系统中有软链接和硬链接两种特殊的“文件”。

软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。

硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。

创建方法都很简单:

软链接(符号链接) ln -s source target (使用绝对路径)

硬链接 (实体链接)ln source target (使用绝对路径)

要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 。当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)这个inode即是(目录、档案)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的 inode。 Inode 里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息。

7、硬链接与软链接的区别:

①硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;

②在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;

③链接数目是不一样的,软链接的链接数目不会增加;

④文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了。

⑤软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

⑥硬链接只能给文件做链接,不能跨目录 跨分区。软链接可以为目录做链接,可以跨目录 跨分区。

1.7.6 linux 查找命令的使用

find 查找命令根据文件属性查找

实例:

find /etc/ -name “*.conf” –size +20K –exec du –a –k {} \; |sort –rn

find 查找 /etc/ 在/etc/目录下查找 –name 查找名称后缀是.conf的文件 –size 文件大小大于 20K 的, -exec 可以再执行其它命令 du 显示大小 ,{} 代表前面命令输出的结果给后边的命令执行。\;代表结束。

find /etc/ -name “*.conf” –size +20K –exec du –a –k {} \; -exec cp –Rf {} /opt/ \;

在/etc/下查找名字后缀是.conf的大于20K的文件,并复制到 /opt/下。

find命令安时间查找文件

在讲解按时间查找文件之前我们首先普及一下Linux文件时间属性的相关知识;

stat查看文件时间

时间属性说明:Access访问时间,Modify修改时间,Change状态改变时间。

modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。 
status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。 
access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。

通过ls举例:

ls参数里没有–mtime这个参数,因为我们默认通过ls -l查看到的时间就是mtime 。

通过touch命令修改文件时间

创建文件我们可以通过touch来创建。同样,我们也可以使用touch来修改文件时间。touch的相关参数如下:

-a : 仅修改access time。

-c : 仅修改时间,而不建立文件。

-d : 后面可以接日期,也可以使用 –date="日期或时间"

-m : 仅修改mtime。

-t : 后面可以接时间,格式为 [YYMMDDhhmm]

如果touch后面接一个已经存在的文件,则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在,则会主动建立一个新的空文件。

利用touch修改文件时间:

1. 同时修改文件的修改时间和访问时间

2. 只修改文件的修改时间

touch -m -d "2015-12-24 08:10:30" install.log

3. 只修改文件的访问时间

touch -a -d "2015-12-31 08:10:30" install.log

下面再给一个rootkit木马常用的小技巧。就是把后一个文件的时间修改成和前一个相同。

touch -acmr /bin/ls /etc/sh.conf

此外touch还支持像date命令一样参数修改文件时间:

[root@web10 ~]# touch -d "2 days ago" install.log ; ll install.log

-rw-r–r– 1 root root 33386 07-11 16:35 install.log

总结下常用的文件操作与时间的关系:

1、访问时间,读一次这个文件的内容,这个时间就会更新。例如使用more命令。ls、stat命令都不会修改文件的访问时间。

2、修改时间,对文件内容修改就会更新。比如:vim后保存文件。ls -l列出的时间就是这个时间。

3、状态改变时间。通过chmod命令更改文件属性,就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。

好现在以已经具备了时Linux间相关属性的知识,

下面我们讲find根据时间查找文件的方法:

find在/log下 查找`2016-08-08`到`2016-09-01`号之间的文件,使用如下命令即可:

find /log/ -name 'production.log-2016*' -newermt '2016-08-08' ! -newermt '2016-09-01

找出 3 天”以前”被改动过的文件 (前第三天以前 > 72 小时)
find /var/log/ -mtime +3 -type f –print

找出 3 天內被改动过的文件(0 ~ 72 小时內)
find /var/log/ -mtime -3 -type f -print

find /var/log/ -mtime 3 -type f -print
找出第 3 天被改动过的文件 (也可以这样写)
find /var/log/ -mtime +2 -mtime -4 -type f -print

1.7.7 whereis 文件查找命令

whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果不制定任何参数,则返回所有信息。 和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis时,会从数据库中查找数据,可以使用updatedb手动更新数据库,默认情况下时一星期更新一次,whereis有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有更新。


whereis -m svn查出说明文档路径,whereis -s svn找source源文件。
whereis –b 查找二进制(命令)文件路径

which 查找文件、显示命令路径

which是根据使用者所配置的 PATH 变量内的目录搜寻可运行档命令!所以,不同的 PATH 配置内容所找到的命令也会有所不同!

02-Linux存储管理

第二章存储管理

2.1 parted磁盘分区

2.1.1 parted简介

parted是linux下大的磁盘分区管理工具。使用parted命令可以对分区进行建立、修改、调整等操作。此外,你还可以用来检查磁盘使用状况,在不同的磁盘间复制数据,将一个磁盘完整复制到另一个磁盘的操作。

parted是一个磁盘分区管理工具,它比fdisk更加灵活,功能也更丰富,同时还支持GUID分区表(GUID Partition Table)

全局唯一标识分区表(GUID Partition Table,缩写GPT)是一个实体硬盘分区表的结构布局的标准。它是统一可扩展固件接口标准的一部分,它使用全局唯一标识来标识设备。它是新一代分区表格式,用以替代MBR分区表。它用来解决MBR分区表的缺点。

在超过2TB时,不能使用传统的交互操作很好的fdisk命令,只能把磁盘转化为GPT格式。由于GPT格式的磁盘相当于原来MBR磁盘中原来保留4个par-tition table的4*16个字节只留第一个16个字节,其它的类似于扩展分区,真正的partition tble在512字节之后,所以对GPT磁盘表来讲没有四个主分区的限制。

GPT磁盘分区样式支持最大卷为128EB(Exabytes),理论上讲每块磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,在redhat/centos系统中每块磁盘可以分配128个分区。)

对GPT磁盘分区表进行操作,我们要使用parted命令。其实parted功能很强大,它可以像fdisk一样既可以命令行也可以用于交互式,除了能够进行分区的添加、删除等常见操作外,还可以移动分区,制作文件系统,调整文件系统大小,复制文件系统。

2.1.2 parted常用命令讲解

parted –help

选项:

-h, –help 显示此求助信息

-l, –list 列出所有块设备上的分区布局

-m, –machine 机器可解析的输出显示

-s, –script 从不提示用户

-v, –version 显示版本

-a, –align=[none|cyl|min|opt] 新分区的对齐方式

命令:

mklabel,mktable LABEL-TYPE 创建一个新的标识

mkpart PART-TYPE [FS-TYPE] START END 创建一个分区

name NUMBER NAME 名称分区编号

print [devices|free|list,all|NUMBER] 显示分区表,可用设备、可用空间、所有已找到的分区或特定分区

rm NUMBER 删除分区

select DEVICE 选择要编辑的设备

disk_set FLAG STATE 更改选定设备上的标志

disk_toggle [FLAG] 切换选定的标志状态

set NUMBER FLAG STATE 更改分区编号的标志

配置实例1

创建一个普通分区:

首先添加一块新的硬盘,然后用echo “- – -” > /sys/class/scsi_host/host0/scan命令扫描新设备,让操作系统识别新添加的硬盘。使用lsblk可以看到我们新添加的硬盘sdb。

使用parted给新添加的第二块硬盘sdb分区

parted /dev/sdb

GNU Parted 1.8.1

Using /dev/sdb

Welcome to GNU Parted! Type ‘help’ to view a list of commands.

(parted) mklabel gpt #将MBR磁盘格式化为GPT

MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区

GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破MBR4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB.

(parted) mkpart primary 1 100 #划分一个起始位置为1大小为100M的主分区

(parted) mkpart primary 100 200 #划分一个起始位置为100M大小为100M的主分区

(parted) mkpart primary 0 -1 #划分所有空间到一个分区

忽略/Ignore/放弃/Cancel? i #提示下面警告,忽略继续即可输入i或者ignore

(parted) print #打印当前分区

(parted) quit #退出parted

分好区之后使用mkfs.xfs格式化

mkfs.xfs -f /dev/sdb1

格式化完成之后使用mount命令挂载使用。也可以使用umount卸载。

2.2 LVM卷管理

LVM是逻辑卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:"development"和"sales",而不是使用物理磁盘名"sda"和"sdb"。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,是直接扩展文件系统跨越磁盘即可。

LVM结构图如下:

Pv(物理卷) –vg(卷组) –lv(逻辑卷)

配置实例1

如果你的卷组中有空闲空间,可以直接扩大现有的逻辑卷,以扩大home为例。

lvextend –L 2G /dev/mapper/JUNXI-home

扩大逻辑卷之后需要整理文件系统,这里需要注意,如果你的逻辑卷文件系统类型是ext4的,使用resize2fs /dev/mapper/JUNXI-home命令调整文件系统大小。如果你的逻辑卷文件系统类型是xfs的使用 xfs_growfs /dev/mapper/JUNXI-home 命令扩大文件系统。

配置实例2

创建新的卷组并在新创建的卷组中创建新的逻辑卷

首先添加新的磁盘,然后给新添加的磁盘分区,把新的分区创建成物理卷,使用的命令是pvcreate /dev/sdb1。

创建好pv之后,创建卷组,使用的命令是vgcreate –s 32M leilei /dev/sdb1

-s 可以指定PE(PE(Physical Extents 物理块)是pv的基本单元,具有唯一编号的PE,是LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。物理卷的大小等同的基本单元PE组成。每个卷组最多有65535个PE, 默认是4MB的话,卷组大小可以这样计 4*65535)所以pe越大卷组越大,修改PE大小时须注意它是2的幂次方,目前单个PE最大为128。这样的话,卷组越多(最多65535),pe越小,磁盘利用就会率越高。

创建好卷组之后,创建逻辑卷,命令为lvcreate –L 4G –n web leilei

-L指定逻辑卷的大小, -n 指定逻辑卷的名称。

接下来格式化逻辑卷,命令为mkfs.xfs /dev/junxi/web

创建挂载点,mkdir /web

把逻辑卷挂载使用,mount /dev/junxi/web /web

df –T /dev/junxi/web 可以查看文件系统类型。

配置实例3

逻辑卷的动态缩小

缩小有风险,在工作中不建议缩小,xfs文件系统只支持扩大,不支持缩小,只有ext4的文件系统支持缩小。

缩小逻辑卷分以下几个步骤(注意先后顺序)

首先卸载逻辑卷,使用的命令为umount /dev/mapper/JUNXI-home

然后使用e2fsck –f /dev/mapper/JUNXI-home 命令检查分区

然后使用 resize2fs /dev/mapper/JUNXI-home 2G 命令把文件系统缩减到2G

最后使用 lvreduce –L 2G /dev/mapper/JUNXI-home 命令把逻辑卷缩减到2G

缩减完成之后使用mount –a 重新挂载测试。

2.3开机自动挂载

获取/dev/leilei/web 设备的uuid,使用的命令是 blkid。

然后编辑/etc/fstab

添加如下选项:

vi /etc/fstab

UUID="472b68d4-dea9-4ee1-880a-e943a0d9f834"/opt xfs defaults

0 0

mount -a #测试挂载

2.3 逻辑卷创建快照

创建快照的命令为 lvcreate –L 2G –n homes –s /dev/JUNXI-home

-L 指定创建快照的大小,-n 指定快照的名称,-s 给哪个逻辑卷做快照。

2.4 Lvm之数据迁移

日常运维当中,建议使用lvm作为磁盘管理的工具,在这里介绍两个linux磁盘管理的使用技巧使大家了解lvm的强大。

pv迁移

在机房中,通常都会有一些比较老旧的存储服务器,利用pv迁移可以在线将旧存储上的数据迁移到新存储上,避免硬件故障导致数据丢失。

配置实例:

需求:把/dev/sdb 中的数据迁移到/dev/sdc中。/dev/sdb属于database卷组。

首先添加一块新的磁盘作为迁移的目标,添加好磁盘之后使用pvcreate /dev/sdc命令把新添加的磁盘创建成pv。

然后把pv 加入到database卷组中,使用vgextend database /dev/sdc 命令。

使用pvs查看,确认/dev/sdc已经属于database卷组。

然后使用pvmove /dev/sdb1 /dev/sdc命令进行数据迁移,迁移过程中可以正常读写数据。

迁移完成之后,再使用pvs 查看,你会发现,/dev/sdc剩余空间为16G,而/dev/sdb 剩余空间为20G。证明数据迁移成功。

然后就可以把旧的设备移除,使用的命令是vgreduce database /dev/sdb1。

2.5.1 SSM管理工具管理lvm卷

只适用于rhel7 centos7系统。

LVM逻辑卷的管理

需求描述:

当我们需要在一个100G的磁盘中存储120G的数据时,空间不够用,这时我们应该怎么办?

一般方法时,重新分区或者是在购买一个大点磁盘

但是,在服务器中,这是不现实的,如果该磁盘上运行着非常重要的服务呢?

传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。

这时就用到了我们的LVM逻辑卷

LVM(Logical volume Manager)是逻辑卷管理的简称。

它是Linux环境下对磁盘分区进行管理的一种机制。

现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,

对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。

LVM逻辑卷可以对磁盘的大小实现动态调整。

lvm 逻辑卷的原理:它就是通过将底层的物理硬盘进行封装,然后以逻辑卷的形式呈现给上层应用。

当我们对磁盘进行操作时,实际上不是对分区进行操作,而是通过一个叫做逻辑卷的东西对其进行底层磁盘的操作

PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。

比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。

PV(Physical Volume),物理卷 ,作用就是用来装PE的,普通磁盘被分割成多个PE块,最终形成PV(物理卷)

VG即卷组 作用就是用来装PV的,我们可以把一个或者多个PV加到VG当中

LV(Logical Volume),就是基于VG来创建我们最终要使用的LV。

2.5.2 SSM管理工具的使用

系统存储管理器(system-storage-manager) SSM ,是RHEL7新增加的功能,它是一种可以管理格式格式存储设备的命令。目前,有三种可以供SSM使用的卷管理后端:LVM、brtfs和crypt。

现在源里查找有没有这个安装包,如果有直接安装

安装ssm系统存储管理器 yum -y install system-storage-manager.noarch

使用ssm list命令检查关于可用硬驱和lvm卷的信息。这个命令将显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。以下输出结果是CentOS 7,自定义的LVM和XFS文件系统信息。

在这个实例中,有1物理设备/dev/sda、一个存储池(“JUNXI”),以及存储池中创建的3个LVM卷(“/dev/JUNXI/swap” “/dev/JUNXI/root” “/dev/JUNXI/home”)。

ssm list dev 或者 ssm list devices #显示设备

ssm list pool #显示卷组

ssm list vol 或者 ssm list volumes #则是只显示逻辑卷

将物理磁盘添加到LVM池不妨将一个新的物理磁盘(比如/dev/sdb)添加到现有的存储池JUNXI。将新的物理磁盘添加现有存储池的命令如下:

ssm add -p <pool-name> <device>

移除磁盘的命令是不需要加-p选型的

ssm remove <pool-name> <device>

首先给新设备分区

现在从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流服务器,为了更好的支持大于2TB硬盘,预装系统都采取了GPT分区的格式,并且主板bios支持UEFI启动。(UEFI统一扩展固件接口)

BIOS Basic Input/Output System,翻译成中文是“基本输入/输出系统”,是一种所谓的“固件”,负责在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件的中介角色。

因为硬件发展迅速,传统式(Legacy)BIOS 成为进步的包袱,现在已经发展最新的UEFI(Unified Extensible Firmware Interface)统一可扩展固件接口,相比传统BIOS的来说,这将是一个“没有特定BIOS”的电脑时代

bios+mbr msdos 4个主分区 ext4 单个最大文件16TB 单个最大分区1EB

uefi+gpt gpt 不受限制 xfs 单个最大文件容量9EB 单个最大分区18EB

但是收到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少分区目前linux128个)

XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。他是取代ext4的下一代文件系统。

ssm list pools 查看卷组

ssm list dev 查看分区

ssm list vol 查看逻辑卷

创建一个分区sda3

parted /dev/sda

pvcreate /dev/sda3 创建Pv

通过ssm工具管理

ssm add -p JUNXI /dev/sda3 把pv添加JUNXI 的卷组中

ssm remove /dev/sda3 #把pv移除出JUNXI的卷组

ssm remove web #删除卷组

2.5.3扩大逻辑卷

扩大之前要保证JUNXI卷组中有空闲空间

ssm resize -s +2G /dev/mapper/JUNXI-home 扩大逻辑卷/减小逻辑卷

这并不意味着你立即就可以使用在卷中创建的文件系统里面增加的额外空间。你会发现,文件系统大小(“FS size”)仍然是3.99GB。为了让文件系统识别增加后的卷大小,你需要“扩大”现有的文件系统本身。有不同的工具可用来扩大现有的文件系统,这取决于你使用哪种文件系统。比如说,有面向EXT2/EXT3/EXT4的resize2fs、面向XFS的xfs_growfs以及面向Btrfs的btrfs,不一而论。

由于在centos7 中。XFS文件系统在默认情况下创建。因而,我们使用xfs_growfs来扩大现有的XFS文件系统。

扩大XFS文件系统后,核实文件系统完全占用了整个磁盘卷的5.99G,

方法如下:

xfs_growfs /dev/JUNXI/home

2.5.4 收缩lvm逻辑卷

缩小/home分区,resize 选后跟一个绝对值即可lvm就会调整到固定大小。目前xfs文件系统无法实现。只有ext4文件系统可以收缩。

ssm resize -s 3G /dev/JUNXI/home

2.5.5创建新卷组并格式化

在这个示例中,如何在物理磁盘驱动器上创建新的存储池和新的LVM卷。如果使用传统的LVM工具,整个过程相当复杂,需要准备分区,需要创建物理卷、卷组、逻辑卷,最后还要建立文件系统。不过,若使用ssm,整个过程就一蹴而就!

下面这个命令的作用是,创建一个名为dbs的存储池(卷组vg),在卷组中创建名为web大小为500MB的LV逻辑卷,使用XFS文件系统格式化卷,并将他挂载到/mnt/test下。立即就能领略到ssm的强大功能。

pvcreate /dev/sdb2 #添加新的分区,并创建成pv。

mkdir /mnt/test

ssm create -s 500M -n web –fstype xfs -p dbs /dev/sdb2 /mnt/test

-p 卷组名 -n 逻辑卷名 –s 大小 –fstype 文件系统类型。

实例讲解:ssm创建新的卷组dbs,并在新卷组中创建新逻辑卷web,完成各式化将其挂载到/mnt/目录下

ssm create -s 1G -n web –fstype xfs -p dbs /dev/sdb1 /mnt/。

实例讲解:创建新的逻辑卷web2格式化,并挂载到/opt目录下。

ssm create -n web2 -s 1G -p dbs –fstype xfs /opt/

ssm remove /dev/dbs/web2 #删除逻辑卷

2.5.6移除卷组的方法,首先要卸载挂载的设备。

umount /mnt/test/

ssm remove dbs #移除卷组即可,是不是很简单

2.5.7ssm管理lvm快照

使用ssm工具,你还可以对现有的磁盘卷拍取快照。注意:只有含有卷的后端支持快照机制,快照才适用。LVM后端支持联机快照功能,这意味着我们没必要在离线状态下对卷拍取快照。另外,由于ssm的LVM后端支持LVM2,快照具有读取/写入功能。

ssm snapshot -s 1G /dev/abc/web -n abc #为逻辑卷web创建快照名为abc,如果不制定名称与大小的话会产生随机快照名。-s指定快照大小 –n指定快照的名字。

ssm snapshot /dev/JUNXI/home

ssm list snapshots 或者 ssm list snap #查看当前卷组快照

ssm snapshot /dev/JUNXI/home #创建快照

储快照后,你可以删除原始卷,并挂载快照卷,以访问快照中的数据。

使用umount /home/ 卸载原始卷

使用mount /dev/JUNXI/snap20151021T224228 /home/ 挂载快照

删除LVM卷

删除现有的磁盘卷或存储池就跟创建磁盘卷或存储池一样容易。如果你试图删除已挂载的卷,ssm会自动先将它卸载。这方面没有麻烦。

删除LVM卷

ssm remove <volume>

想删除存储池(卷组):

ssm remove <pool-name>

至此应领略了ssm的强大功能。在企业存储环境中,处理一大批的存储设备、磁盘卷和文件系统是相当常见的事。现在你可以运用单单一个命令行工具ssm,让其后端为你完成任务,而不是操心运用许多不同的工具管理一整套存储配置。对任何置身于复杂存储管理环境的系统管理员来说,ssm绝对是一款必备工具。

Lvm常见故障排除:

很多新手学员在添加一个pv到vg后,误删新加入的pv,报 pv * not found or rejected by a filter错误。

使用lvdisplay报警告

[root@localhost ~]# lvdisplay 或 vgscan

WARNING: Device /dev/xvdb1 has size of 6291456 sectors which is smaller than corresponding PV size of 20969472 sectors. Was device resized?

One or more devices used as PVs in VG cl have changed sizes.

PV Name [unknown] #这里显示未知说明有问题

解决方法如下

方法1:从lvdisplay那里我们可以推测,vg有问题

所以我们来看一下卷组有哪些

可以看到vgs,vgscan都可以用来检查vg,其中vgremove和vgreduce和删除和缩减选项,所以我们重点关注vgreduce命令

尝试用removemissing选项删除错误信息 cl为卷组名称

vgreduce –removemissing cl

重启系统 再次使用vgdisplay可以恢复正常

方法2: 把卷组中报错的uuid复制出来 再次添加一个新的分区 在创建pv时指定uuid为丢失报错uuid "iUJdjw-C9S6-bRE7-jIdl-6kQ6-esLL-5vDGYE" 如下/dev/sdb1所示:

pvcreate /dev/sdb1 –u iUJdjw-C9S6-bRE7-jIdl-6kQ6-esLL-5vDGYE –norestorefile

也可以恢复正常

2.6 扩展swap分区

swap分区是虚拟内存对swap消耗比较大的应用有很多,例如:web服务器 数据库服务器 虚拟化与云计算等。运维有时需要对swap进行扩展的操纵。

首先使用free –m 查看我系统中swap分区的大小。

扩大swap分区的方法有两种,一种是以分区的方式扩大swap分区,一种是以镜像文件的方式扩大swap分区。首先介绍第一中方法:

需要有一个分区,来扩大swap分区的大小。创建好分区之后,使用mkswap命令格式化新的分区

mkswap /dev/sdb1

使用swapon /dev/sdb1 命令开启/dev/sdb1 swap分区,开启之后使用free –m 查看swap 分区的大小

也可以使用swapoff /dev/sdb1关闭。

可以使用cat /proc/swaps 查看新的分区启动情况。

如果想开机自动挂载的话需要编辑/etc/fstab中添加如下内容

/dev/sdb1 swap swap defaults 0 0

第二中扩大swap分区的方法:

因为服务器在某些特殊状态下不能再添加新的分区。也可以镜像文件的方式来添加swap分区。

先使用dd 命令创建一个大小为2G的镜像文件

dd if=/dev/zero of=/home/swap bs=2048MB count=1

镜像文件创建在/home/下,名称为swap,bs=2048M 一次写入2048MB,count=1只写一次,镜像文件的大小是2G。

创建好镜像文件之后把它格式化为swap文件系统类型。用mkswap /home/swap 命令,然后激活swap分区,使用swapon /home/swap。使用free –m查看swap的大小。

这里提到一个镜像文件,那什么是镜像文件?镜像文件是一种稀疏文件,在unix文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成空洞。位于文件中但没有写过的字节都被设为0。如果offset比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”在文件里创建“空洞(hole)”。没有被实际写入文件的所有字节由重复的0表示。空洞是否占用硬盘空间是由文件系统(file system)决定的。

2.7 Loop设备及losetup命令讲解

losetup命令用于循环设备。

循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

Loop设备介绍

在类unix系统里,loop设备是一种伪设备(pseudodevice),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。

在使用之前,一个loop设备必须要和一个镜像文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被mount起来。

在上面说的文件格式,我们经常见到的是CD或DVD的ISO光盘镜像文件或者是软盘(硬盘)的*.img镜像文件。通过这种loop mount(回环mount)的方式,这些镜像文件就可以被mount到当前文件系统的一个目录下。

Loop的含义

对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被mount起来的镜像文件(它引入包含有文件系统),它是建立在第一层文件系统上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为loop。或者叫二层伪设备。

losetup命令讲解

losetup [-d][-e <加密方式>][-o <平移数目>][循环设备代号][文件]

参数:

-d 卸除设备

-e<加密方式> 启动加密编码

-o<平移数目> 设置数据平移的数目

使用dd命令创建一个镜像dd if=/dev/zero of=/twoing.img bs=1024MB count=2

bs=1024MB一次读写1024G ,count=2一共读写两次。所以是2G镜像文件。

用dd创建好镜像文件后,使用losetup /dev/loop0 /twoimg.img命令将创建的镜像文件映射成loop0。映射成功之后可以使用losetup –a命令查看映射关系。

要想挂载使用,需要格式化,命令为mkfs.ext4 /dev/loop0 。格式化完成之后在centos7系列的操作系统中,它会自动被挂载。我们也可以手动挂载到自己指定的目录中。

如下所示为手动挂载到自己指定的/mnt目录中:

[root@192 ~]# losetup /dev/loop0 /swaps

[root@192 ~]# losetup

NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE

/dev/loop0 0 0 0 0 /swaps

[root@192 ~]# mount /dev/loop0 /mnt/

[root@192 ~]# df -h /mnt/

文件系统 容量 已用 可用 已用% 挂载点

/dev/loop0 2.0G 6.1M 1.8G 1% /mnt

[root@192 ~]# umount /mnt/

[root@192 ~]# losetup

NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE

/dev/loop0 0 0 0 0 /swaps

[root@192 ~]# losetup -d /dev/loop0

[root@192 ~]# losetup

如果不使用了可以用umount /mnt (/mnt为挂载点) 卸载伪设备。然后用losetup -d /dev/loop0 命令关闭镜像映射。

2.8 dd命令详解

dd与cp的区别

dd:块界别拷贝

cp:文件目录界别拷贝

dd将原始数据(raw data)按照数据源的格式原封不动的拷贝到目的地;cp将文件和目录拷贝到目的地后按照目的地的格式排列新数据。注意:对于不能以文件或目录格式呈现的数据(如引导启动块的数据),cp无能为力。

2.8.dd命令选项注解

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2

参数:

1. if=文件名:输入文件名,缺省为标准输入。

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

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=次数:copy几次以bs为单位。

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)补齐

2.9 dd应用实例

1、将本地的/dev/sda整盘备份到/dev/sdb

dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror

noerror出错时不停止 notrunc:不间断输出文件

2、将/dev/sdb全盘数据备份到指定路径的image文件

dd if=/dev/sdb of=/root/image

3、将备份文件恢复到指定盘

dd if=/root/image of=/dev/sdb

4、备份/dev/sdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/sdb | gzip > /root/image.gz

5、将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/sdb

6、备份磁盘开始的512个字节大小的MBR信息到指定文件

dd if=/dev/sda of=/root/image count=1 bs=512

count=1指仅拷贝一个块bs=512指块大小为512个字节

恢复:dd if=/root/image of=/dev/sda

7、拷贝内存内容到硬盘

dd if=/dev/mem of=/root/mem.bin bs=1024(指定块大小为1 K)

8、拷贝光盘内容到指定文件夹,并保存为cd.iso文件

dd if=/dev/sr0 of=/root/cd.iso bs=1024

9、销毁磁盘数据

dd if=/dev/urandom of=/dev/sda1

注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

10、测试硬盘的读写速度

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/root/1Gb.file bs=64k | dd of=/dev/null

通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

14、修复硬盘:

dd if=/dev/sda of=/dev/sda

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

15、把分区制作成镜像裸设备予以KVM虚拟机转移

dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M

16、测试磁盘读能力

time dd if=/dev/sdb1 of=/dev/null bs=8k

因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备

相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1

上,也相当于测试磁盘的读写能力。

测试同时读写能力

time dd if=/dev/sdb1 of=/test1.dbf bs=8k

这个命令一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读。对/test1.db是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。

得到最恰当的block.size,通过比较dd指令输出中所显示的命令执行时间(选时间最少的那个),即可确定系统最佳的block.size大小

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

2.10 lusk加密卷

2.10.1 luks简介

LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准工具cryptsetup(centos与RHEL 默认已经安装。Debian/ubuntu 需另行安装,安装命令为aptitude install cryptsetup libcryptsetup-dev)

常用参数:luksFormat、luksOpen、luksClose、luksAddKey

使用cryptsetup对分区进行了加密后,这个分区就不再允许直接挂载。LUKS也是一种基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射,映射到/dev/mapper这个目录中,我们只能挂载这个映射设备才能使用。然而做映射的过程中需要输入解密密码。
首先,你将需要确认安装cryptsetup软件包,如果没有安装可以使用yum install cryptsetup命令进行安装。

配置实例1

使用ssm工具配置luks磁盘加密。在JUNXI卷组中创建一个大小为1G的luks加密卷组,并挂载到/opt下。

ssm create -s 1G -n luks -p junxi –fstype xfs –encrypt luks /opt/

C:\Users\李雪蕾\Documents\Tencent Files\1547462309\Image\C2C\{B4EE279B-4D69-1533-7360-2D9BA0AB9924}.png

也可以手动挂载luks加密设备,先把设备卸载,使用umount /opt

然后使用命令cryptsetup luksOpen /dev/JUNXI/luks open 映射加密设备为open。

然后挂载设备 mount /dev/mapper/open /opt

卸载加密设备的方法

[root@localhost ~]# umount /opt/

关闭映射设备

[root@localhost ~]# cryptsetup luksClose /dev/mapper/open

配置实例2

使用cryptsetup工具一步一步创建磁盘加密(这种方法适用于centos6之前版本的系统,centos7建议使用ssm创建磁盘加密)

必须首先对加密的卷进行解密,才能进行挂载文件系统
(1) dd if=/dev/zero of=/luks.img bs=1G count=1 #创建伪设备

losetup /dev/loop0 /luks.img #把镜像映射成块设备

(2)cryptsetup luksFormat /dev/loop0 #格式化加密层(提示大写的YES并输入密码)


(3) cryptsetup open /dev/loop0 junxi    #开启加密层(设置虚拟设备名为junxi)

(4)ll /dev/mapper/junxi #查看加密的虚拟设备
lrwxrwxrwx. 1 root root 7 4月 29 00:12 /dev/mapper/junxi -> ../dm-5

(5)mkfs.xfs /dev/mapper/junxi  #格式化虚拟设备

(6)mount /dev/mapper/junxi /opt/ #挂载虚拟加密设备

[root@node1 ~]# df -h /opt/

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/junxi 1019M 33M 987M 4% /opt


(7) touch /opt/files-{1..10} #使用加密设备
(8) umount /opt/ #卸载设备
(9) cryptsetup close junxi  #关闭加密虚拟设备(/dev/mapper/下不会查看到junxi虚拟设备)

(10)losetup -d /dev/loop0 #关闭映射
(11)
注意:以后使用就需要进行open打开进行读写操作,结束之后使用close进行关闭。

自动挂载加密设备,下例中是使用分区的方法创建加密分区。

例:

lvcreate -L 4G -n luks junxi #创建逻辑卷lusk

aptitude install cryptsetup libcryptsetup-dev #debian8安装cryptsetup

cryptsetup luksFormat /dev/junxi/luks #格式化成加密设备

WARNING!

========

This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): YES #此处必须为大写YES

Enter passphrase: #输入8位长度密码,密码无回显

Verify passphrase: #输入8位长度密码,密码无回显

Cannot format device /dev/loop0 which is still in use.

如果你的实验环境是centos7系统此处会弹出的密码框,如下图需要点击取消(Cancel)。否则centos7会自动挂载。

开启加密层(根据应用命名为web)

cryptsetup open /dev/junxi/luks web

格式化加密设备

mkfs.xfs /dev/mapper/web

格式化完成之后可以使用 mount /dev/mapper/web /mnt/命令挂载并访问加密设备

用touch命令创建文件进行测试touch /mnt/files{1..10}

最安全的密码是什么? 是连管理员自己都不知道的密码。使用/dev/random创建的随机密码是一个不错的选择。

/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。

首先生成一个4096比特的随机二进制密码并重复10次,文件名为/root/passwd

dd if=/dev/random of=/root/passwd bs=4096 count=10

编辑/etc/crypttab配置文件。
# vim /etc/crypttab

打开后的卷名 原设备名 密钥文件 加密选项

# <target name> <source device> <key file> <options>

web /dev/junxi/luks none #(注:none表示密码为空) luks

或者自动应答密码,none的部分添加密码文件绝对路径/root/passwd:

# <target name> <source device> <key file> <options>

web /dev/junxi/luks /root/passwd luks

调整密钥文件权限

chmod 600 /root/passwd

在设备中添加key文件,使用密码文件生效。

cryptsetup luksAddKey /dev/junxi/luks /root/passwd

下面设置开机自动挂载:

# vim /etc/fstab
/dev/mapper/web /mnt xfs defaults 0 0


#reboot #重新启动系统

cryptsetup status /dev/mapper/junxi #查看加密状态