11 SEP
15.3.5 LVM的系统快照
快照就是将当时的系统信息记录下来,就好像照相记录一样。
- LVM的系统快照只会备份有改动的数据,没有改动的数据依旧保持在原本的区块内。
- 由于快照去与原本的LV共享很多PE区块,因此快照去与被快照区的LV必须要在同一个VG里面。
快照区的新建
1 先查看VG还剩下多少剩余容量(红框表示没有多余的PE可以用)
2 将刚才删除的/dev/sda6加入这个VG
3 利用lvcreate新建系统快照区,取名为liangst-ss,给予6个PE。
-s
参数代表是snapshot快照功能之意
-l
参数后面则是接多少个PE来作为这个快照区使用
在liangst-ss中,LV size指被快照的原LV磁盘容量。COW-table size指快照区的实际容量,COW-table LE指快照区占用的PE数量。
4 挂载快照设备
可以看到liangst-vg/liangst-lv与liangst-vg/liangst-lv的容量相同。
- 利用快照区复原系统
注意: 要复原的数据量不能够高于快照区所能负载的实际容量。由于原始数据会被移到快照区,如果快照区不够大,原始数据比快照区大,那快照区就容纳不了。
Summary
如何删除LVM?
1 卸载umount系统上面的LVM文件系统(包括快照与所有LV)
1-1 如有必要,修改/etc/fstab里面的数据,让其开机不会自动挂载
2 使用lvremove删除LV
3 使用vgchange -an VGname 让VGname这个VG不具有Active的标志
4 使用vgremove删除VG
5 使用pvremove删除PV
6 最后,使用fdisk将ID修改回来(改回83)
顺序: PV—VG—LV
改好了:
例行性工作crontab
16.2 仅执行一次的工作调度
新建at工作,eg:
at [-mldv] TIME
at -c 工作号码
删除已设置好的at工作:
atrm [jobnumber]
eg. atrm 5batch: 系统有空时才进行后台任务(batch的命令与at相同)
batch 23:00 2009-3-17
16.3 循环执行的例行性工作调度
- 用户权限: cron.allow或cron.deny
用法:
crontab [-u username] [-l|-e|-r]
-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度
-e: 编辑crontab的工作内容
-l: 查阅crontab的工作内容
-r: 删除所有的crontab的工作内容,若仅要删除一项,就用-e去编辑
16.3.2 系统的配置文件: /etc/crontab
cron这个服务的最低监测限制是“分钟”,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容。因此,只要编辑完/etc/crontab这个文件,并保存,那么cron的设置就自动会执行了。
16.4 可唤醒停机期间的工作任务
anacron - 用来处理非24小时一直启动的Linux系统的crontab执行。所以anacron并不能指定何时执行某项任务,而是以天为单位或者是在开机后立刻进行anacron的操作。它会去监测停机期间应该进行但是没有进行的crontab任务,并将其执行一遍,然后anacron就会自动停止了。
18 Sep
第17章 程序管理与SELinux初探
17.1.1 进程与程序(process&program)
当我们登录并执行bash时,系统已经给我们一个PID了,这个PID是根据登录者的UID/GID(/etc/passwd)来的
- Fork and exec: 过程调用的流程(进程之互相之间的调用)
进程都会通过父进程以复制(fork)的方式产生一个一模一样的暂存进程(其实就是子进程),这个暂存进程与父进程唯一的区别就是PID不同。然后被复制出来的子进程再以exec的方式来执行实际要进行的进程,最终就成为一个子进程的存在。
- 系统或网络服务: 常驻在内存的进程
常驻在内存中的进程通常都是负责一些系统所提供的功能以及服务用户各项任务,因此这些常驻进程就会被我们称为服务(daemon)
17.1.2 Linux的多用户,多任务环境
其实在Linux下面执行一个命令时, 系统会将相关的权限、属性、程序代码与数据等均加载到内存,并给予这个单元一个进程标识符(PID),最终该命令可以进行的任务则与这个PID的权限有关。通过这个机制,Linux可以满足多用户、多环境。
- 多用户环境:每个用户进入Linux的环境设置可以随着每个人的喜好来设置(~/.bashrc)。因为每个人登陆后取得的shell的PID不同。
- 多任务行为:利用CPU切换进程的工作。
- 多重登录环境的七个基本终端窗口:包括6个命令行界面登录窗口以及一个图形界面。
- 特殊的进程管理行为:当一个进程卡住了,这个时候可以按Alt+F1~F7来切换到其他的终端机窗口,然后ps -aux找出刚才的错误进程,然后kill掉,再回到刚才的终端机窗口,一切恢复正常。
- Bash环境下的工作管理job control: 在单一的bash接口下,还可以同时进行多个工作。如
cp file1 file2 &
, 其中&
表示这个命令放置于后台执行,执行完毕后,系统将会在终端显示完成的消息。
17.2.1 JOB CONTROL
要进行bash的job control必须注意的限制:
1 这些工作所触发的进程必须来自于自己shell的子进程(只管理自己的bash)
2 前台:可以控制与执行命令的环境成为前台工作(foreground)
3 后台:可以自行运行的工作,无法用ctrl+c来终止它,可以使用bg/fg调用该工作
4 后来中“执行”的进程不能等待terminal/shell的输入(input)用
&
把命令丢到后台中执行
用 ctrl - z 把目前在前台的工作丢到后台中暂停。如正在使用vi, 却需要到bash环境下进行查找某文件。此时只需要将vi暂时丢到后台中等待即可。用
jobs [-lrs]
查看目前的后台工作状态。
1 -l 除了列出job number与命令串之外,同时列出PID的号码
2 -r 仅列出正在后台run的工作
3 -s 仅列出后台当中暂停(stop)的工作
屏幕出现的 [1] 代表这是第一个工作。将后台工作拿到前台来处理: fg
如果想把后台的工作拿出来处理时:fg %jobnumber
,
eg, 使用jobs
查看工作,再将工作取出
fg
默认取出那个+的工作,fg %1
取出特定工作号码的工作
21 Sep
- 让工作在后台的状态变成运行中: bg
我们看到,那个状态栏已经由Stopping变成了running.命令行后方多了一个&的符号,代表该工作被启动在后台当中啦。
- 管理后台当中的工作: kill
如果我们想直接删除掉在后台的工作,则可以用到kill命令,给该工作发送一个信号(signal)。
用法:kill -signal %jobnumber
kill -l
列出目前kill能够使用的信号(signal)有哪些。
signal 包括: - -1:重新读取一次参数的配置文件,类似reload
- -2:代表与由键盘输入ctrl -c同样的操作
- -9:立刻强制删除一个工作(通常用于一个不正常工作的进程)
- -15:以正常的程序方式终止一项工作。与-9是不一样的
17.2.3 脱机管理问题
上文提到的“后台”指的是在终端机模式下可以避免ctrl-c 中断的一个情景,并不是放到系统的后台去。所以工作管理的后台依旧与终端机有关。如果一个用户log off了或者是注销系统后,如何才能够让工作继续进行:
nohup [命令与参数]
#在终端机前台中工作
nohup [命令与参数] &
#在终端机后台中工作
Notes
nohup并不支持bash内置的命令,因为必须要是外部命令才行,比如:
vim sleep500.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo "I have slept 500 seconds"
修改权限chmod a+x sleep500.sh
然后把它丢到后台中执行,并且立刻注销系统:
17.3.1 进程的查看
ps: 将某个时间点的进程运行情况选取下来
eg.
ps aux
查看系统所有的进程数据
ps -lA
也是能够查看所有系统的数据
ps axjf
连同部分进程树状态
参数:
-A : 所有的进程均显示出来,与-e具有同样的作用
-a:不与terminal有关的所有进程
-u:有效用户(effective user)相关的进程
x:通常与a这个参数一起使用,可列出较完整信息
输出格式规划:
l:较长,较详细地将该PID的信息列出
j:工作的格式(jobs format)
-f:做一个更为完整的输出ps :将某个时间点的进程运行情况选取下来
- ps -l : 仅查看自己的bash相关进程,即最上层的父进程是你自己的bash
所以你看到的 ps -l 输出信息中,他说明的是:『bash 的程序属於 UID 为 0 的使用者,状态为睡眠 (sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此程序的 PID 为 13639,优先运行顺序为 75 , 下达 bash 所取得的终端介面为 pts/1 ,运行状态为等待 (wait) 。
ps aux:查看系统所有进程
ps axjf:列出类似进程树的程序显示
节选
找出与cron与syslog这两个服务有关的PID号码
僵尸(zombie)进程:一个进程本来应该已经执行完毕,或者是因故应该要终止了,但是该进程的父进程却无法完整地将该进程结束掉,于是该进程就变成了僵尸进程。这个将是进城一直存在内存当中。一般会在cmd后面还接上,就代表该进程是僵尸进程,例如
如果发现系统中有很多僵尸进程时,记得要找出该进程的父进程,做个跟踪,而不是只要直接把这僵尸进程杀掉而已,万一它被删掉之后一直产生就麻烦了。
一般僵尸进程直接交给init这个程序来负责了,然而init是系统第一个执行的程序,是所有进程的父进程。因此只能通过reboot的方式来将该僵尸进程抹去了。
- top:动态查看进程的变化(而ps是选取某个时间点的进程状态)
top [-d 数字] | top [-bnp]
选项与参数:
-d :后面可以接秒数,就是整个程序画面升级的秒数。默认是 5 秒;
-b :以批量的方式运行 top ,还有更多的参数可以使用喔!
通常会搭配数据流重导向来将批量的结果输出成为文件。
-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p :指定某些个 PID 来进行观察监测而已。
在 top 运行过程当中可以使用的按键命令:
? :显示在 top 当中可以输入的按键命令;
P :以 CPU 的使用资源排序显示;
M :以 Memory 的使用资源排序显示;
N :以 PID 来排序喔!
T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k :给予某个 PID 一个讯号 (signal)
r :给予某个 PID 重新制订一个 nice 值。
q :离开 top 软件的按键。
eg:
每两秒钟更新一次top,查看整体信息
如果我们只想看单一进程?
echo $$
可以得到我们bash的PID。
然后输入-p PID
指令,就只能看到指定的进程了。
如何修改NI这个数值?
(NI, Nice的简写,与Priority有关,越小越早被执行)
在top界面当中直接按下r键进行修改。
如果想要找出最损耗CPU资源的那个进程时,大多使用的就是top, 然后强制以CPU使用资源来排序(在top界面中按下P即可)
- 使用pstree列出目前系统上面所有进程树的相关性
pstree -A
各进程树之间的连接以ASCII字符来连接
pstree -Aup
列出进程树的相关性,同时显示出PID于users
注意:括号里面的就是PID以及该进程的owner。另外,如果是属于root的进程,就不会显示root这个名字(一般用户名就会显示出来-见红框)
这个pstree一般用来寻找父进程。
17.3.2 进程的管理
程序是如何互相管理的呢?其实就是通过给予该进程一个信号(signal)去告知该进程你想要让它做什么。
可以用kill -l
查询到到底有多少signal。
kill -singal PID
如果想要将某个莫名其妙的登陆者的连接删除的话,就可以通过使用pstree -p 找到相关进程,再以kill -9将该进程删除。
killall -signal 命令名称
由于kill后面必须要加上PID或者是job number, 所以还要首先ps查一下,造成一定麻烦。所以,killall提供了一种根据“执行命令的名称(command name)”来给予信号。比如:killall -1 syslogd
用法:killall [-iIe] [command name]
其中
-i :interactive交互式的意思,若需要删除时,会出现提示符给用户
-e:exact的意思,表示后面接的command name 要一致,但整个完整命令不能超过15个字符
-I :命令名称忽略大小写
eg:依次询问每个bash进程是否需要被终止运行
killall -i -9 bash
# 如果没有-i的参数,所有的bash都会被这个root给杀掉,包括root自己的bash。
Summary
总之,要删除某个进程,我们可以使用PID或者是启动该进程的命令名称;如果是要删除某个服务,就用killall, 它可以将系统当中所有以这个命令启动的进程全部删除。
17.3.3 关于进程的执行顺序
这里需要考虑到程序的优先执行序(Priority)与CPU调度。
Priority与Nice值
CPU的分时调度。
如果进程分了优先级,则优先级别较高的则运行次数可以较多次,而不需要与较低优先级别的进程抢位置:
这个PRI值越低代表越优先,但是这个PRI值是由内核动态调整的,用户无法直接调整PRI值的。如果我们想调整,就要通过Nice值(NI).一般来说:
PRI(new) = PRI(old) + nice
NI的取值范围:-20~19
如何调整nice值:
1 一开始执行程序就立即给予一个特定的nice值。用nice命令
nice [-n 数字] command
数字的取值范围 -20~19
eg:nice -n -5 vi &
给一个nice值为-5,用于执行vi,并查看该进程
2 调整某个已经存在的PID的nice值。用renice命令
renice [number] PID
eg. 先ps一下找出某个进程的ID, 然后renice 10 18625
如果修改的是一个bash进程,那么该进程触发的所有子进程的nice都会受到影响。因为nice值是可以在父进程->子进程之间传递的。
3 用Top命令里面的r也是可以调整nice值的
17.3.4 系统资源的查看
- free: 查看内存使用情况
free [-b|-k|-m|-g](显示的单位) [-t](显示物理内存与swap总量)
eg1: 显示目前系统的内存总量free -m
swap最好不要被使用。 - uname:查看系统与内核相关信息
常用:uname -a
- uptime:查看系统启动时间与工作负载
netstat:跟踪网络
netstat
列出目前系统已经新建的网络连接与unix socket状态.
netstat -tlnp
找出目前系统上已在监听的网络连接及其PID
如果我想终止上图的服务,只需要kill -9 1516
即可。或者killall -9 master
dmesg:分析内核产生的信息
eg.
输出所有的内核开机时的信息:dmesg | more
(使用more命令来使界面暂停)vmstat:监测系统资源变化
vmstat [-a] [延迟 [总计检测次数]]
<==CPU/内存等信息
vmstat [-fs]
<==内存相关
vmstat [-s 单位]
<==设置显示数据的单位
vmstat [-p 分区]
<==与磁盘有关
eg.vmstat 1 3
:统计目前主机CPU的状态,每秒一次,共计三次。