前面的两个月我们基本的学习了关于shell中的基本命令和脚本的编写等基本知识,虽说有所掌握,但是并不能熟悉良好的运用,还需大量的练习来掌握。接下来我们进入linux系统管理的学习!
Linux系统管理
在系统学习的过程中,我们主要会涉及到下面的几个知识点:
1.存储管理
传统的磁盘分区
RAID技术,软RAID的实现
LVM
文件系统管理
ext,xfs,btrfs(了解)
2.程序包管理
rpm、yum、dnf
3.sed、gawk
4.进程管理
5.网络管理
网络基础知识(Cisco CCNA+CCNP)
网络属性管理
网络参数监测
6.Linux内核管理
内核编译和安装
内核的裁剪
定制内核
7.Linux系统启动流程
CentOS5、6、7
8.系统安装
kickstart、dhcp、pxe
9.shell脚本的完善
首先我们介绍Linux的存储管理:
磁盘的接口类型:
IDE:并口,来源于ATA,133Mbps
SCSI:并口,
UltraSCSI320:320Mbps
UltraSCSI640:640Mbps
窄带:7 14
宽带:15 30
SATA:Serial ATA,串口
SATA1 2 3 6Gbps
SAS:串口
6Gbps
USB:
1.0 1.1 2.0 3.0:480Mbps 3.1:10Gbps
双通道:160MBps
IOPS:每秒IO次数
IDE:机械硬盘,50IOPS
SCSI:机械硬盘,100-200IOPS
固态硬盘,400左右
SATA:机械硬盘:100左右
固态硬盘,400
SAS:机械硬盘,200左右
固态硬盘,800左右
PCI-E固态硬盘:100000+ ES3000 DEC
IDE:主板上两个接口,4块IDE硬盘
SATA:4-6接口,4-6块硬盘
SCSI:7 15
SAS:16384块硬盘
接下来我们来介绍一下硬盘的知识:
机械硬盘:在这里我们要了解几个专业名词
track:磁道,
sector:扇区,512Bytes,现在所说的扇区,实际上是平均值;
cylinder:柱面,从磁道向所有盘片做投影
partition:分区,分区就是基于柱面来划分的存储空间
head:磁头,每个磁盘表面都有一个磁头;
设备文件:/dev
设备文件是关联到硬件设备的驱动程序和设备的访问入口;
设备号:
major:主设备号,区分设备的类型,用于标明设备所需的驱动程序;
minor:次设备号,区分同种类型下的不同设备,是特定设备的访问入口;
设备类型:
块设备:用于随机访问的设备,数据存储和交换的单位是块;
字符设备:用于线性访问的设备,数据的交换单位一般是字符;
设备文件名:IANA-->ICANN
/dev/
IDE:hd[a-d]
SCSI/SATA/SAS/USB:sd[a-z]
mknod命令:
使用块和字符类文件
mknod - make block or character special files
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
硬件设备的命名:RHEL6、CentOS6开始,所有的接口类型的硬盘设备统一命名为sd[a-z]
设备的引用方式分为:
设备文件名
卷标(Volume Lable)
link
UUID:全局唯一标识符,128bit
下面我们学习使用新硬盘的三个步骤:
1.分区
2.创建文件系统——格式化
3.挂载
一、分区:
(下面的内容摘借于前辈的博客内容)
然后在根目录上建立一系列的空目录,接着把硬盘分区挂载到相应目录上。这种完全陌生的分区方式常常导致我们安装linux系统或者虚拟机的时候出现“卡壳”现象,
常见的硬盘一般分为三类。IDE硬盘,SCSI硬盘和SATA硬盘。通常我们电脑上的硬盘都是IDE和SATA,而服务器一般用SCSI硬盘。SCSI的硬盘接口设备叫sd,第一块硬盘就是sda,第二块硬盘是sdb...以此类推。Linux规定,一块硬盘上最多存在四个主分区。命名方式分别是sd1,sd2,sd3,sd4。而逻辑分区从sd5开始,没有数量限制,命名方式为sd5,sd6...sd无穷大。主分区可以简单的理解为windows下的C盘,也就是系统分区,是引导操作系统必要的分区。而逻辑分区可以简单的理解为windows下的CDE盘等等。
说完硬盘分区,我们再回头说一下目录,很多朋友一键安装完linux系统,看着种类繁多的目录可能头疼异常,每个目录看起来都不明觉厉的样子。下面我们就简单的看一下Linux系统的主要目录及其内容。常见的目录有,
/bin ##存放系统的核心最常用的命令
/boot ##内核与启动文件
/dev ##各种设备文件
/etc ##系统软件的配置文件
/home ##用户的主目录,比如你新建一个用户zhang,home下一般自动生成zhang目录,用来记录zhang的一些操作和内容
/lib ## C编译器的库
/root ##超级用户root的目录
/proc ##进程的映像
/tmp ##临时文件存放点
/usr ##非系统的程序和命令
/var ##数据目录,一般数据库文件也存放在此目录下
使用一个新的硬盘设备方法
分区
创建文件系统(格式化)
挂载分区
为何分区?
1.优化I/O性能
2.实现磁盘空间的配额限制
3.进行高速修复
4.隔离系统文件和其他程序文件
5.安装多个操作系统
如何分区?
首先我们来介绍两种不同的磁盘空间类型:
1)MBR:硬盘空间小于2TB
MBR:Master(Main) Boot Record, 主引导记录,起源于1982年,
0磁道0扇区:
512Byte
446Bytes:boot loader,引导加载程序,GRUB
64Bytes:partition table,分区表,每16Bytes表明一个分区的内容;因此一共有四个主分区;
////注意:
1.主分区+扩展分区,最多可以有4个,其分区表位的编号依次为:1,2,3,4
2.逻辑分区的编号从5开始,不管前面的四个数字编号是否被占用;
2Bytes:结束标记,55AA
2)GPT:硬盘空间大于2TB
GUID Partition Table,GUID分区表,支持128个分区
UEFI(统一扩展固件接口)的硬件可以支持GPT Boot Legacy
通常使用的分区工具:
1)fdisk:
用于创建和管理MBR分区,对于一块硬盘,最多只能管理15个分区;
2)gdisk:GNU disk
用于创建和管理GPT分区,
3)parted:GNU
高级分区工具,实时生效;
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
////注意:
如果使用fdisk或gdisk命令对于已经有分区并挂载的磁盘的剩余空间进行再次分区,分区的信息即便是保存了,也不会被内核重新读取;如果要让内核识别此类分区:
1.重启计算机;
2.partprobe命令或者partx命令,强制内核重读分区表;
CentOS5/7:partprobe -a [device] 如果省略了设备名,则表示重读所有磁盘的分区表
CentOS6/7:partx -a [device]
kpartx -af [device]
fdisk分区示例:
fdisk - Partition table manipulator for Linux
fdisk -l [device...]
查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表;
fdisk device
对于指定设备进行分区管理;
fdisk命令
p、打印分区表。
n、新建一个新分区。
d、删除一个分区。
q、退出不保存。
w、把分区写进分区表,保存并退出。
二、创建文件系统——格式化:
为什么要创建文件系统?
创建文件系统实际上就是给分区进行存储空间的逻辑编址;创建文件系统是为了让计算机更加高效的查询、调用系统的文件
格式化分为低级格式化和高级格式化:
低级格式化:物理层面完成格式化,在磁盘设备出厂时,通过低级格式化来创建磁道;它的主要作用:划分磁道
高级格式化:分区之后进行,主要作用:用来创建文件系统,为分区构建逻辑编址单元,簇,块
无论是簇还是块,都是将一个或多个扇区组织在一起,共同完成数据存储;
簇:512B 1024 2048 4096 8192 16384 32768 65536
块:1024 2048 4096
/////注意:
1.一个块只能放置一个文件的内容,一个文件可以占用多个块;
2.如果在某个分区中,将创建大量的小文件,把块划分的小一些;反之,块就大些
3.如果分区空间比较大,块也应该大一些;
在一个分区中创建了文件系统:首先,会将分区划分成大小相等的若干块;
1)元数据块:元数据——inode(index node),其包含的内容主要是:文件的属性,文件大小,文件权限,文件所有者,文件时间戳,数据块指针;存放元数据的固定的存储空间,称为inode;每个inode都有其对应的inode编号
2)数据块
存放文件中所包含的流式数据
特殊文件:
设备文件:block special 或 character special
仅仅是将元数据中的数据块指针换成了设备号
符号链接文件:symbolic link
仅仅是将元数据中的数据块指针换成了另一个文件的访问路径;
这类文件只占据元数据区域,没有数据块占用;
但是随着磁盘空间越来越大,划分的块的数量也越来越多,管理起来很不方便;划分块组可以解决该问题
块组:
每个块组中有独立的元数据块和数据块;存放数据的时候,以块组内的数据块优先选择,如果块组内的数据块不够,可以通过存储策略来请多个块组协同存储;主要有下面的几种类型
1)超级块:
主要定义了有多少个块组,以及每个块组的边界。为了防止超级块发生故障倒置整个文件系统崩溃,对超级块进行冗余备份。
2)日志块:
对于数据的写入操作做记录的块;防止数据不一致;数据不一致通常都是由不洁关机,不洁断电导致;
一个完整的文件系统:
超级块,inode,inode bitmap,block bitmap,data block,journal block
想要查找/var/log/messages文件的内容,是怎样的过程?
首先查找/目录inode编号,从元数据区域中找到对应inode,再读取inode中的数据块指针,找到存放/目录内容的数据块;
然后,在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块;
再然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存log目录内容的数据块;
之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对银的数据块,就可以读取数据;
三、系统调用
Linux支持的文件系统:
位于内核空间中的文件系统驱动:1.内核一部分2.内核模块
位于用户空间中的文件系统管理应用程序:管理命令
Linux自己的文件系统:
ext ext2 ext3 ext4(最大分区50TB,可以做根分区,可以做启动分区)
xfs(企业级64位文件系统,最大分区500TB,可以做根和启动分区)
reiserfs(良好的反删除功能)
btrfs(技术预览版)
光盘文件系统:iso9660
网络文件系统:NFS、CIFS
集群文件系统:gfs2、ocfs2
内核级的分布式文件系统:ceph
伪文件系统:proc、sysfs、tmpfs、hugepagefs
windows的文件系统:vfat,ntfs
Unix的文件系统:ufs,FFS,JFS,zfs
交换分区文件系统:swap
用户空间中的分布式文件系统:mogilefs,moosefs,glusterfs
对于不同的发行版的Linux,都有其默认的文件系统选择:
RHEL、CentOS
5:ext3
6:ext4
7:xfs
文件系统的管理工具:
管理文件系统:
创建文件系统:
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs, ...
文件系统检测和修复工具
fsck
fsck.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...
文件系统属性查看工具
dumpe2fs
文件系统的属性调整工具
tune2fs
创建文件系统工具:
mkfs命令:
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs -t ext2 /dev/sdb1
注意:
1.不要使用磁盘设备名称和扩展分区设备名称作为mkfs命令的参数;
如果使用磁盘设备作为mkfs的参数,所有的分区都将被删除
如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除
2.能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备;
如果只是计划创建ext系列文件系统的话,可以使用mke2fs命令:
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
常用选项:
-b block-size:在创建文件系统时,调整块大小;
-i bytes-per-inode:指明inode与字节的比率,即:多少个字节可以建一个inode,默认值为16384;
-j:创建有日志功能的文件系统,就是ext3
-N number-of-inodes:直接指明要给此文件系统创建的inode的数量;
-m reserved-blocks-percentage:指定为超级用户root预留的磁盘空间的百分比;默认是5;
-t fstype:指定文件系统类型,ext2 ext3 ext4,默认是ext2
-O [^]feature[,...]:关闭或开启文件系统的特性
-L volume-label:为文件系统指定卷标
如果只计划修改ext系列文件系统的卷标,可以使用e2label命令:
e2label:
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
注意:如果不加卷标信息,表示查看指定设备的卷标;
如果添加了卷标信息, 表示修改指定设备的卷标;
如果想要修改ext系列文件系统的属性,可以使用tune2fs命令:
tune2fs:
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
调整那些在ext2,3,4文件系统上的可修改的参数;
常用选项:
-j:将ext2文件系统修改为ext3;
-m reserved-blocks-percentage:修改为超级用户预留的磁盘空间的百分比;
-o [^]mount-options[,...]:修改文件系统的默认挂载选项;
-r reserved-blocks-count:修改为超级用户预留的磁盘空间的块的数量;
-L volume-name:修改文件系统的卷标
-O [^]feature[,...]:修改文件系统的特性,将其关闭或启用;
-l:显示超级块的内容 相当于dumpe2fs -h
文件系统的检测修改工具:
fsck
-t fstype:指定要检测的文件系统类型;
-a:无需交互,自动修复所有问题
-r:交互式修复问题
ext系列文件系统专门的检测修复工具:
e2fsck
-y:在交互过程的所有的问题,都以"yes"回答;
-f:强制检测修复;即使文件系统处于clean状态;
blkid:
blkid - command-line utility to locate/print block device attributes
blkid -L label:根据卷标进行查找
blkid -U uuid:根据UUID进行查找
findfs:
findfs - Find a filesystem by label or UUID
findfs LABEL=label
findfs UUID=uuid
创建swap文件系统
前提:分区类型必须是swap类型
修改的方法是:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可;
mkswap
mkswap - set up a Linux swap area
-L LABEL:设置交互分区的卷标
-f:强制执行
使用文件系统——挂载
FHS
根文件系统之外的其他文件系统如果想要被访问;都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根文件系统中的某个目录之中;这个过程称为"挂载";用于关联其他文件系统的那个目录,称为挂载点;
挂载点:mount point,也是其他文件系统的访问入口;例如:/boot
要求:
1.作为挂载点的目录必须事先存在;
2.作为挂载点的目录应该是没有被使用或不能被其他进程使用的目录;
3.作为挂载点的目录一旦挂载文件系统,其内原有的文件将被隐藏;
完成挂载操作,使用mount命令:
mount
mount - mount a filesystem
mount [-fnrsvw] [-t vfstype] [-o options] device dir
常用选项:
-r:readonly,以只读的方式挂载目标文件系统;光盘
-w:read and write,以读写的方式挂载目标文件系统;
-n:默认情况下,设备挂载或卸载的操作会同步更新到/etc/mtab中,如果在挂载时使用了-n选项,则表示我们要禁用此特性,即便挂载成功,也不会更新到/etc/mtab中。
-t vsftype:指明要挂载的设备上创建的文件系统类型;如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件系统类型;
-L LABEL:挂载文件系统时,使用卷标代替设备名称
-U UUID:挂载文件系统时,使用UUID代替设备名称
-a:mount -a:按照/etc/fstab文件中填写的设备进行自动挂载;
-o option:
sync/nosync:同步/异步操作
atime/noatime:文件或目录被读取访问时,是否更新访问时间戳;
diratime/nodiratime:目录被读取访问时,是否更新访问时间戳;
ro/rw:是以只读/读写的方式挂载文件系统;
dev/nodev:在此文件系统中是否允许创建设备文件;
exec/noexec:在此文件系统中是否允许运行程序文件;
auto/noauto:是否允许使用mount -a方式挂载/etc/fstab中的文件系统;
user/nouser:是否允许普通用户挂载此文件系统;
suid/nosuid:是否允许程序文件上的SUID和SGID特殊权限生效;
relatime/norelatime:是否参考inode访问时间来修改其修改时间和改变时间
remount:不经卸载实现重新挂载,可以应用新的挂载选项;
acl:可以使文件系统支持facl功能;
defaults:默认选项;包括:rw, suid, dev, exec, auto, nouser, async, and relatime
loop:使用环回设备;将镜像文件挂载到挂载点;
defaults,ro,nosuid
-B, --bind:将某个目录绑定至另一个目录;
mount --bind|-B 源目录 目标目录
卸载文件系统:
umount mount_point|device
挂载光盘:
1.保证光盘镜像文件放入虚拟机光驱
2.保证光驱处于"已连接"状态
3.创建光盘挂载点,mount -r /dev/sr0 mount_point
挂载U盘:
需要事先让系统识别U盘设备,然后根据设备名进行挂载;/dev/sdc1
挂载交互分区:
swapon, swapoff
swapon, swapoff - enable/disable devices and files for paging and swapping
-a:自动挂载存储于/etc/fstab文件中的交互分区设备;
df
-h -T -P
free
-k -m -g
/etc/fstab文件的格式:
共6个字段,使用空白字符分隔:
1.要挂载的设备
设备文件名
LABEL
UUID
伪文件系统
2.挂载点
swap设备无需挂载点,指定swap即可;
3.文件系统类型
4.挂载选项:defaults
5.转储频率:
使用dump命令备份分区的频率
0:表示不备份
1:每天备份一次
2:每隔一天备份一次
6.自检次序
0:不自检
1:优先自检,通常只设置在根文件系统上;
2:次级自检
...
9:最低优先级自检