磁盘简介:磁盘存储器(magnetic disk storage),以磁盘为存储介质的存储器。它是利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器;具有存储容量大、数据传输率高、存储数据可长期保存等特点。
磁盘物理组成:盘片(Platters)、轴(Spindle)、读写头(Read/Write Head)、读写头激励器(Actuator)、控制器(Controller)和电路板(a printed circuit board)。
“巨磁电阻”效应:非常弱小的磁性变化就能导致巨大电阻变化。
磁盘类型:
存储类型:
网络化存储根据传输协议又分为:
df:检查文件系统的磁盘空间占用情况
语法:df [-ahikHTm] [目录或文件名]
选项与参数:
du:查看文件和目录磁盘使用的空间,直接到文件系统内去搜寻所有的文件数据
语法:du [-ahskm] 文件或目录名称
选项与参数:
ln:为某一个文件在另外一个位置建立一个同步的链接
语法:ln [参数][源文件或目录][目标文件或目录]
选项与参数:
fdisk:是Linux 磁盘分区表操作工具
语法:fdisk [参数]
必要参数:
菜单操作说明:
重启系统或在/sys下扫描SCSI:
fdisk–l查看新加的磁盘,如果没有则把host0换成host1或者host2尝试一下
创建分割槽的形式:
1)1-4 号尚有剩余,且系统未有extended:此时会出现让你挑选Primary / Extended 的项目,且你可以指定1~4 号间的号码;
2)1-4 号尚有剩余,且系统有extended:此时会出现让你挑选Primary / Logical 的项目;若选择p 则你还需要指定1~4 号间的号码;若选择l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分割槽的文件名号码;
3)1-4 没有剩余,且系统有extended:此时不会让你挑选分割槽类型,直接会进入logical 的分割槽形式。
mkfs:在特定的分区上建立 linux 文件系统
语法:mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
选项与参数:
超过16T硬盘分区和格式化:传统fdisk分区不支持2T以上的磁盘分区,而parted分区可以支持;ext4格式不支持16T以上的磁盘空间分区,必须使用xfs系统类型。
parted:对大容量硬盘进行分区
语法:parted [选项]... [设备 [命令 [参数]...]...]
选项与参数:
对大容量硬盘进行格式化:mkfs.xfs [设备]
check NUMBER | 做一次简单的文件系统检测 |
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER | 复制文件系统到另一个分区 |
help [COMMAND] | 显示所有的命令帮助 |
mklabel,mktable LABEL-TYPE gpt | 创建新的磁盘卷标(分区表) |
mkfs NUMBER FS-TYPE | 在分区上建立文件系统 |
mkpart PART-TYPE [FS-TYPE] START END | 创建一个分区 |
mkpartfs PART-TYPE FS-TYPE START END | 创建分区,并建立文件系统 |
move NUMBER START END | 移动分区 |
name NUMBER NAME | 给分区命名 |
print [devices|free|list,all|NUMBER] | 显示分区表、活动设备、空闲空间、所有分区 |
quit | 退出 |
rescue START END | 修复丢失的分区 |
resize NUMBER START END | 修改分区大小 |
rm NUMBER | 删除分区 |
select DEVICE | 选择需要编辑的设备 |
set NUMBER FLAG STATE | 改变分区标记 |
toggle [NUMBER [FLAG]] | 切换分区表的状态 |
unit UNIT | 设置默认的单位 |
Version | 显示版本 |
fsck:用来检查和维护不一致的文件系统
语法:fsck [-t 文件系统] [-ACay] 装置名称
选项与参数:
mount:挂载Linux系统外的文件
语法:mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
选项与参数:
umount:卸除目前挂在Linux目录中的文件系统
语法:umount [-fn] 装置文件名或挂载点
选项与参数:
挂载前注意的事情:
1)单一文件系统不应该被重复挂载在不同的挂载点(目录)中
2)单一目录不应该重复挂载多个文件系统;
3)要作为挂载点的目录,理论上应该都是空目录才是。
mtab文件和 fstab文件区别:它们结构和内容基本相同,一样在 /etc 文件下,但是不同的是,mtab文件记录的是,当前已挂载的分区信息。
1)/etc/fstab文件作用:文件/etc/fstab存放的系统启动时需要挂载的文件系信息。系统启动时会读该文件,当需要启动时挂载时,系统就自动挂载;
2)/etc/mtab文件作用:动态的记录现在系统已经挂载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是为系统启动挂载文件系统准备的。每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。
进入单人维护模式,在/目录只有read only的状态,需要修改/etc/fstab
RAID:(Redundant Arrays of Inexpensive Disks, RAID)容错式廉价磁盘阵列,RAID 可以透过一个软件或硬件,将多个较小的磁盘整合成为一个较大的磁盘装置。
RAID level:
项目 |
RAID0 | RAID1 | RAID10 | RAID5 | RAID6 |
---|---|---|---|---|---|
最少磁盘数 | 2 | 2 | 4 | 3 | 4 |
最大容错磁盘数 | 无 | n-1 | n/2 | 1 | 2 |
资料安全性 | 完全沒有 | 最佳 | 最佳 | 好 | 比RAID5好 |
理论写入效能 | n | 1 | n/2 | ||
理论读出效能 | n | n | n | ||
可用容量 | n | 1 | n/2 | n-1 | n-2 |
一般应用 | 强调效能但资料不重要的环境 | 资料与备份 | 服务器、云系统常用 | 资料与备份 | 资料与备份 |
1)新建分区:创建RAID0 需要两块硬盘,所以我们拿/dev/sdb和/dev/sdc来实验。输入"n" 新建分区,这里我们将整个磁盘都划分成一个分区,然后输入"p" 查看分区情况。
2)修改分区类型:默认新建分区的类型是Linux,代号83,我们需要将其修改为raid 类型。输入"t",然后输入"L" 列出所有的文件格式,这里选择"fdLinux raid auto", 输入"fd",然后再输入"p" 查看分区情况,这是分区格式已经变成了Linux raid autodetect;输入"w" 保存分区。
3)同步分区:使用“partprobe”命令同步分区情况,保存完后查看/proc/partitions是否存在。此命令在物理机管用,在虚拟机不行,只能重启或“partx -a /dev/sdb1 /dev/sdb”
4)创建RAID0:mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd{b,c}1
mdadm:用于建设、管理和监控RAID阵列
语法:mdadm [mode] [options]
选项与参数:
5)查看RAID0状态:cat /proc/mdstat; mdadm -D /dev/md0
6)创建配置文件/etc/mdadm.conf:mdadm --detail --scan --verbose >>/etc/mdadm.conf
7)格式化磁盘阵列:mkfs.ext4 /dev/md0
8)建立挂载点并挂载:mkdir /mnt/raid0; mount /dev/md0 /mnt/raid0
9)开机挂载:vi /etc/fstab
和创建raid0类似,我们拿/dev/sdd和/dev/sde这两块硬盘来做演示。重复创建raid0前三个步骤。
4)创建RAID1:mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]1
5)查看RAID1状态:cat /proc/mdstat; mdadm -D /dev/md1
6)创建配置文件/etc/mdadm.conf:mdadm --detail --scan --verbose >>/etc/mdadm.conf
7)格式化磁盘阵列:mkfs.ext4 /dev/md1
8)建立挂载点并挂载:mkdir /mnt/raid1; mount /dev/md1 /mnt/raid1
9)开机挂载:vi /etc/fstab
raid10就是由两个raid1组成raid0的级别,raid0、raid1各需要两块磁盘,所以创建raid10就需要四块磁盘。重复创建raid0前三个步骤。
4)创建2个raid1:mdadm -C /dev/md3 -ayes -l1 -n2 /dev/sd[f,g]1; mdadm -C /dev/md4 -a yes -l1 -n2 /dev/sd{h,i}1
5)创建raid0:mdadm -C /dev/md10 -ayes -l0 -n2 /dev/md{3,4}
或以上2步骤化简为:mdadm -C /dev/md10 -ayes -l10 -n4 /dev/sd{f,g,h,i}1
6)查看RAID10状态:cat /proc/mdstat; mdadm -D /dev/md10
7)创建配置文件/etc/mdadm.conf:mdadm -Dsv >/etc/mdadm.conf
8)格式化磁盘阵列:mkfs -t xfs -f /dev/md10
9)建立挂载点并挂载:mkdir /mnt/raid10; mount /dev/md10 /mnt/raid10
10)开机挂载:vi /etc/fstab
RAID5 至少需要三块硬盘,我们拿/dev/sdf, /dev/sdg, /dev/sdh, /dev/sdi这四块硬盘来做实验,三块做为活动盘,另一块做为热备盘。重复创建raid0前三个步骤。
4)创建RAID5:mdadm -C /dev/md5 -ayes -l5 –n3 -x1 /dev/sd[j,k,l,m]1
5)查看raid5 状态:cat /proc/mdstat; mdadm -D /dev/md5
6)创建配置文件/etc/mdadm.conf:mdadm --detail --scan --verbose >>/etc/mdadm.conf
7)格式化磁盘阵列:mkfs.ext4 /dev/md5
8)建立挂载点并挂载:mkdir /mnt/raid5; mount /dev/md0 /mnt/raid5
9)开机挂载:vi /etc/fstab
1)模拟磁盘损坏:mdadm /dev/md5 -f /dev/sdm1
2)查看重建状态:cat /proc/mdstat; mdadm -D /dev/md5
3)移除损坏磁盘:mdadm /dev/md5 -r /dev/sdm1
4)再次查看状态:cat /proc/mdstat; mdadm -D /dev/md5
5)新加热备磁盘:mdadm /dev/md5 -a /dev/sdm1
6)再次查看状态:cat /proc/mdstat; mdadm -D /dev/md5
4)新加硬盘:mdadm /dev/md5 -a /dev/sdn1
5)查看raid5 状态:cat /proc/mdstat; mdadm -D /dev/md5
6)热备盘转换成活动盘:mdadm -G /dev/md5 -n4
7)扩容文件系统:resize2fs /dev/md5; df -TH
8)创建配置文件/etc/mdadm.conf:mdadm --detail --scan --verbose >>/etc/mdadm.conf
1)卸载阵列:umount /dev/md0
2)停止RAID阵列:
3)防止开机启动RAID:把该设备相关的配置信息删除 vim /etc/mdadm.conf;删除开机启动信息 vim /etc/fstab
LVM:(Logical Volume Manager)逻辑盘卷管理的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。、
工作原理:通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。
逻辑卷管理:
我们将模拟raid5、分区、物理硬盘三种类型设备创建VG,raid5需要四块硬盘,分区和物理硬盘各一块硬盘,还有扩容时需要至少一块硬盘,所以在虚拟机里添加八块硬盘,每块5GB.
1)安装LVM管理工具
检查系统中是否安装了LVM管理工具:rpm -qa | grep lvm
如果未安装,则使用yum 方式安装:yum install lvm*; rpm -qa | grep lvm
2)新建raid5设备:使用/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde四块物理硬盘做软raid模拟。重复创建raid0前三个步骤。
3)创建配置文件/etc/mdadm.conf:mdadm -Dsv >/etc/mdadm.conf
4)新建分区:使用/dev/sdf硬盘进行分割和格式化为/dev/sdf1
5)创建PV:pvcreate /dev/md5 /dev/sdf1 /dev/sdg
6)查看PV:pvdisplay; pvs; pvscan
7)创建VG:vgcreate vg0 /dev/md5 /dev/sdf1 /dev/sdg
8)查看VG:vgdisplay; vgs; vgscan
9)创建LV:lvcreate -L 5G -n lv1 vg0
10)查看LV:lvdisplay
11)再看VG:vgs
12)格式化LV:mkfs.ext4 /dev/vg0/lv1
13)挂载LV:mkdir/mnt/lv1; mount /dev/vg0/lv1 /mnt/lv1/; df -TH
14)开机挂载:vi /etc/fstab
1)查看vg0:vgs
2)扩容lv1:lvextend -L +1G /dev/vg0/lv1
3)查看lv1:lvs
4)扩容文件系统:resize2fs /dev/vg0/lv1; df -TH
5)扩容VG:pvcreate /dev/sdh; vgextend vg0 /dev/sdh
或 mdadm /dev/md5 -a /dev/sdj1; mdadm -G /dev/md5 -n4; pvresize /dev/md5
1)卸载挂载点:umount /mnt/lv1/
2)缩减文件系统:resize2fs /dev/vg0/lv1 4G
3)检查磁盘:e2fsck -f /dev/vg0/lv1
4)再次执行缩减:resize2fs /dev/vg0/lv1 4G
5)缩减LV:lvreduce /dev/vg0/lv1 -L 4G (缩减到的大小)
6)挂载查看:mount /dev/vg0/lv1 /mnt/lv1; df -TH
7)卸载挂载点:umount /mnt/lv1/
8)查看PV:pvs
9)移除硬盘:vgreduce vg0 /dev/sdg
10)查看vg0:vgs
1)卸载挂载点:umount /mnt/lv1/
2)移除LV:lvremove /dev/vg0/lv1
3)移除VG:vgremove vg0; vgs
4)移除PV:pvremove /dev/md5 /dev/sdf1 /dev/sdg /dev/sdh
snapshot:快照就是将当时的系统信息记录下来,就好像照相一样,未来若有任何资料变动了,则原始资料会被移动到快照区,没有被改动的区域则由快照区与档案系统共享。
1)建立LV:lvcreate -L 100M -n lv2 vg0
2)格式化LV:mkfs.ext4 /dev/vg0/lv2
3)挂载LV:mkdir /mnt/lv2; mount /dev/vg0/lv2 /mnt/lv2 (对 /mnt/lv2 挂载点写入测试数据)
4)创建快照:lvcreate -L 80M -s -n lv2snap /dev/vg0/lv2
5)查看快照:lvdisplay
6)挂载查看:mkdir /mnt/snapshot; mount /dev/vg0/lv2snap /mnt/snapshot (对 /mnt/lv2 挂载点文档进行修改操作)
7)打包备份:cd /mnt/snapshot; tar cjf /tmp/lvm.tar.bz2 *
8)卸载并移除snapshot:umount /mnt/snapshot; lvremove /dev/vg0/lv2snap
9)卸载并格式化/mnt/lv1:umount /mnt/lv2; mkfs.ext4 /dev/vg0/lv2
10)恢复数据:mount /dev/vg0/lv2 /mnt/lv2; tar xjf /tmp/lvm.tar.bz2 -C /mnt/lv2
11)查看挂载:ll /mnt/lv2/
进程:是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
进程和程序区别:
ps:显示当前进程的状态
语法:ps [options] [--help]
选项与参数:
ps配合watch使用,每秒中进行刷新显示:
pstree:以树状图的方式展现进程之间的派生关系
语法:pstree [选项]
选项与参数:
top:实时显示进程的动态
语法:top [选项]
选项与参数:
交互式命令:
pidof:查找指定名称的进程的进程号id号
语法:pidof [option] [command]
选项与参数:
nice:指定程序的运行优先级
语法:nice [option] [command]
选项与参数:
renice:改变一个或多个行程的优先级
语法:renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
选项与参数:
-n,--priority :指定标识符的计划优先级
-g,--pgrp :标识符指定为进程组ID
-u,--user :标识符指定为用户名或用户ID
-p,--pid :标识符指定为进程ID(默认)
-h,--help :显示帮助信息
-V,--version :显示版本信息
killall:杀死指定进程名
语法:kill [参数] [进程号]
选项与参数:
kill:删除执行中的程序或工作
语法:kill [参数] [进程id]
选项与参数:
信号代号 | 信号名称 | 说 明 |
---|---|---|
1 | SIGHUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
2 | SIGINT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键 |
8 | SIGFPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断 |
pkill:控制同名程序的所有进程
语法:pkill [选项] [信号] 进程名
选项与参数:
pgrep:查看当前正在运行的进程
语法:pgrep [选项] 进程名
选项与参数:
w:显示目前登入系统的用户信息
语法:w [选项] [用户名]
选项与参数:
at:一次性计划任务,在某一固定的时间执行特定命令
语法:at [选项] [时间参数]
选项与参数:
TIME格式:
atd服务暂时启动:systemctl start atd; service atd restart
atd服务开机启动:systemctl enable atd; chkconfig --level 345 atd on
chkconfig:更新(启动或停止)和查询系统服务的运行级信息
语法:chkconfig [--add] [--del] [--list] [系统服务] 或 chkconfig [--level <等级代号>] [系统服务] [on/off/reset]
选项与参数:
需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
crontab:周期性计划任务,定期执行程序命令
语法:crontab [-u user] [-l | -r | -e] [-i]
选项与参数:
crontab服务暂时启动:systemctl start crond; systemctl status crond; service cron start; service crond status
crontab服务开机启动:systemctl enable crond; chkconfig –level 345 crond on
分钟 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-7 command (取值范围,0和7表示周日,周与日月不可同时并存)
使用以下特殊字符:
at控制文件分别为 /etc/at.allow; /etc/at.deny
crontab控制文件分别为 /etc/cron.allow; /etc/cron.deny
crontab不执行问题总结
日志:记录系统活动信息文件
重要性:日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹.
常见日志文件:
日志格式:
日志级别:
日志类型:
连接符号:
logger:通过shell命令接口使用Syslog的系统日志模块
语法:logger [options] [messages]
选项与参数:
清空防火墙规则:/etc/init.d/iptables stop;
临时关闭Sselinux:setenforce 0; getenforce
开机关闭selinux:vi /etc/selinux/config,将SELINUX的值设置为disabled
临时关闭防火墙:systemctl stop firewalld; systemctl status firewalld; service iptables stop; service iptables status
开机自关闭防火墙:systemctl disable firewalld.service; chkconfig iptables off
1)打开TCP端口:vim /etc/rsylog.conf
$ModLoad imtcp
$InputTCPServerRun 514
@表示udp协议发送,@@表示tcp协议发送
2)编写配置文件:在GLOBAL DIRECTIVE块前追加以下三行
#按照主机名区分目录
#按照ip地址区分目录
3)重启服务:systemctl restart rsyslog; service rsyslog restart
1)编辑配置文件:vim /etc/rsylog.conf
2)重启服务:systemctl restart rsyslog; service rsyslog restart
cron.* @@192.168.12.40:514
3)执行任务:crontab -e
*/1 * * * * echo “nihao”>>/tmp/file.log
客户端查看:tail -f /var/log/cron
服务端查看:tail -f /var/log/['hostname']/CROND.log or tail -f /var/log/[‘address’]/['address_date'].log
logrotate的配置文件:/etc/logrotate.conf; /etc/logrotate.d/,logrotate.conf是主要参数文件,logrotate.d目录里面的所有文件都会被主动读入/etc/logrotate.conf当中来进行!另外在/etc/logrotate.d/文件中,如果没有规定到的细部配置,则以/etc/logrotate.conf文件的规定来指定默认值。
logrotate:管理记录文件
语法:logrotate [-vf] logfile
选项与参数:
参数 | 说明 |
---|---|
daily | 指定转储周期为每天 |
weekly | 指定转储周期为每周 |
monthly | 指定转储周期为每月 |
create mode owner group | 在轮替动作之后,postrotate脚本执行之前,立即使用刚轮替的日志文件名创建日志文件。MODE 指定日志文件的权限(0660之类),OWNER 指定日志文件的属主,GROUP 指定日志文件的属组 |
rotate count | 轮替最多保留之前的数据几次,超出的将被删除或邮件接收,设0则不保存 |
compress | 通过gzip压缩转储以后的日志 |
nocompress | 不需要压缩转储 |
nodelaycompress | 转储同时压缩 |
delaycompress | 指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行 |
dateext | 使用日期作为日志轮替文件的后缀 |
start count | 轮替文件名基于这个数字 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
sharedscripts | 在此关键字之后的脚本只执行一次 |
minsize | 大小日志轮替的最小值。日志达到最小值才会轮替,否则就算时间达到也不轮替 |
size Size | 当日志增长到指定大小的时候开始轮替,Size 可以指定 bytes(缺省)以及KB(sizek)或者MB (sizem) |
nomail | 不发送邮件到任何地址 |
mail address | 将轮替后的文件发送到指定E-mail地址 |
errors address | 专储时的错误信息发送到指定的Email 地址 |
mailfirst/maillast | 向邮件发送轮替文件/轮替后历史文件,默认 |
notifempty | 若日志为空文件,则不进行日志轮替 |
ifempty | 即使日志文件是空的也轮替 |
noolddir | 转储后的日志文件和当前日志文件放在同一个目录下,默认 |
olddir directory | 轮替后日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断,开始轮替 |
postrotate/endscript | 在日志轮替之后执行脚本命令,endscript标示postrotate脚本结束;这两个关键字必须单独成行,注意使用外部指令时要用绝对路径 |
prerotate/endscript | 在日志轮替之前执行脚本命令,endscript标示prerotate脚本结束 |