A-A+

企业级 Linux 系统运维及工具应用精要

2012年11月15日 综合技术 评论 14 条 阅读 584 次

企业级 Linux 系统运维概要

企业 Linux 系统的运维成为目前企业关注的重点。作为一种优秀的开源网络操作系统,如何充分利用 Linux 的工具并使用相应的方法来提高运维效率是非常重要的工作。本专题将详细介绍几个对系统管理员比较重要的工具和概念,它涵盖了操作硬盘分区、如何避免产生问题以及如何解决系统问题的内容,以为企业 Linux 的实际运维提供有益参考。

回页首

应用工具一:应用 parted 报告并分区硬盘

parted(分区编辑器)实用程序从命令行报告和操作硬盘分区。palimpsest 实用程序使用 GUI 执行相同的任务。此外,parted print 命令会显示 /dev/sda 驱动器上的分区信息:

 # parted /dev/sda print
 Model: ATA Hitachi HDS12345 (scsi)
 Disk /dev/sda: 165GB
 Sector size (logical/physical): 512B/512B
 Partition Table: msdos

 Number Start End Size Type File system Flags
 1 32kB 1045MB 1045MB primary ext4 boot
 2 1045MB 12GB 10GB primary ext4
 3 12GB 22GB 10GB primary ext4
 4 22GB 165GB 143GB extended
 5 22GB 23GB 1045MB logical linux-swap(v1)
 6 23GB 41GB 18GB logical ext4
 7 41GB 82GB 41GB logical ext4

 

在这个例子中,parted 显示的前几行表示型号名称、设备名称、设备容量以及设备上的分区表类型。在这些信息之后,print 命令还会显示一些列,用户可以根据提示来进行操作。

Number 列表示持有该分区的设备的次设备号。这个数字与设备名称中的最后的数字相同。在这个例子中,5 对应 /dev/sda5。

Start 列表示分区开始所在的磁盘位置。Parted 实用程序指定一个磁盘位置作为从磁盘开始到分区的距离(以字节为单位)。因此,分区 3 始自从磁盘开始的 12 GB 的位置。

End列表示分区结束所在的磁盘位置。虽然分区 2 结束自从磁盘开始的 12 GB 的位置,分区 3 始自同一位置,parted 需要注意的是单个字节不能在分区间重叠。

Size列表示分区以千字节(KB)、兆字节(MB)或千兆字节(GB)为单位的大小。

Type 列表示分区类型:主、扩展或逻辑。参见图 1 的分区信息。

File system 列表示文件系统类型:ext2、ext3、ext4、fat32、linux-swap 等等。

Flags 列是分区打开标志,包括 boot、raid和 lvm。在这个例子中,1 号分区是引导分区。
图 1. 例子中的主分区和扩展分区
图 1. 例子中的主分区和扩展分区

在前面的例子中,分区 4 定义了一个扩展分区,其中包含 165GB 磁盘中的 143 GB(如图 1)。使用时不能更改逻辑分区,否则会影响其中的所有逻辑分区。

除了报告硬盘的布局和大小,还可以采用交互式方式使用 parted 修改磁盘布局。当使用这种方式时要格外小心,开始使用此实用工具之前必需先备份系统。注意更改磁盘上的分区信息(分区表)会破坏磁盘上的信息。请先阅读 parted 信息页,然后再尝试修改分区表。值得注意的是:错误的 parted 使用可以摧毁磁盘上的一切数据。

使用 parted 要小心,因为你是在使用一个可以格式化硬盘的实用程序。使用 parted 所做的更改很容易导致大量数据的丢失。如果使用 parted 所做的事情有任何问题,在应用其更改之前使用 q 命令退出。输入命令后,parted 会立即依据要求进行更改。

要对磁盘进行分区时,在 parted 命令后需要加上要使用的设备名称。在下面的例子中,启动 parted 后,用户输入 help(或只是 h)命令,会显示 parted 命令列表:

 # parted /dev/sda
 GNU Parted 2.3
 Using /dev/sda
 Welcome to GNU Parted! Type 'help' to view a list of commands.
 (parted) help
 align-check TYPE N check partition N for TYPE(min|opt) alignment
 check NUMBER do a simple check on the file system
 cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition
 help [COMMAND] print general help, or help on COMMAND
 mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
 mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER
 mkpart PART-TYPE [FS-TYPE] START END make a partition
 mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system
 move NUMBER START END move partition NUMBER
 name NUMBER NAME name partition NUMBER as NAME
 print [devices|free|list,all|NUMBER] display the partition table,
  available devices, free ...
 quit exit program
 rescue START END rescue a lost partition near START and END
 resize NUMBER START END resize partition NUMBER and its file system
 rm NUMBER delete partition NUMBER
 select DEVICE choose the device to edit
 set NUMBER FLAG STATE change the FLAG on partition NUMBER
 toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
 unit UNIT set the default unit to UNIT
 version display the version number and copyright information of ...
 (parted)

Help 后边跟上一个 parted 命令参数的名称,则会显示该命令参数的更多信息。当输入 print(或只是 p)命令时,parted 显示当前分区信息,就像命令行上的 print 命令一样。

parted 实用程序不允许设置重叠分区(除逻辑分区可以重叠其包含的扩展分区外)。同样,也不允许创建一个正好始自磁盘开头(柱面 0)的分区。这些情况都会导致数据丢失。

定义一个磁盘分区表时,要记住一些基本的准则。首先,不要删除或修改定义扩展分区的分区,除非你愿意失去扩展分区内所有逻辑分区上的所有数据。其次,如果把 /boot 放在单独的分区上,最好放在驱动器开头的位置(分区 1),以便 Linux 可以从位于驱动器最近的分区引导。当磁盘空间的费用不是问题时,最好把每个主要文件系统放在单独的分区上。许多人选择把 /(根), /var 和 /usr 合放在一个单独的分区中,这通常会节省空间,但在偶尔情况下也会导致问题。最后,虽然 parted 可以创建某些类型的文件系统,但 parted 通常是用来创建分区,然后可使用 mkfs 和 mkswap 在分区上创建文件系统。

以下命令序列(图 2)在一个干净的磁盘上定义了一个 300 兆字节、可引导的 Linux 分区,并将其作为分区 1:

图 2. 定义可引导 Linux 分区的命令序列
图 2. 定义可引导 Linux 分区的命令序列

当在 parted 内指定大小时,可以使用后缀 k(千字节)、m(兆字节)或 g(千兆字节)。创建分区后,输入 print 命令来查看分区的结束位置。执行这个任务之前要先定义下一个相邻的分区,这样就不会浪费空间。设置所有分区后,使用 quit 命令可退出 parted。

接下来,在每个要包含文件系统(非交换)的分区上创建文件系统。除非有理由不这样做,否则除了交换分区外,请把所有分区设置为 ext4 类型。使用 mkswap 可在一个分区上设立一个交换区。此外,可以使用 e2label 标记一个分区。

回页首

应用工具二:应用 logrotate 管理日志文件

你可能想保留日志文件一段时间,而不是删除或截断这些文件,以防万一需要时进行参考。通过轮换、压缩、发邮件以及删除指定的每个文件,logrotate 实用工具可以自动管理系统日志(和其它)文件。logrotate 实用程序由 /etc/logrotate.conf 文件控制,该文件用于设置默认值,可以指定要轮换的文件。通常情况下,logrotate.conf 包含一个 include 语句,指向实用程序指定的 /etc/logrotate.d 中的规范文件。以下是默认的 logrotate.conf 文件:

 $ cat /etc/logrotate.conf
 # see "man logrotate" for details
 # rotate log files weekly
 weekly

 # keep 4 weeks worth of backlogs
 rotate 4

 # create new (empty) log files after rotating old ones
 create

 # use date as a suffix of the rotated file
 dateext

 # uncomment this if you want your log files compressed
 #compress

 # RPM packages drop log rotation information into this directory
 include /etc/logrotate.d
 # no packages own wtmp and btmp -- we'll rotate them here
 /var/log/wtmp {
 monthly
 create 0664 root utmp
 minsize 1M
 rotate 1
 }

 /var/log/btmp {
 missingok
 monthly
 create 0600 root utmp
 rotate 1
 }

 # system-specific logs may be also be configured here.

 

logrotate.conf 文件为常用的参数设置默认值。每当 logro-tate 读取这些参数的另一个值时,则会重置默认值。可以选择 daily(每天)、weekly(每周)或 monthly(每月)轮换文件。rotate关键字后面的数字指定要保留的被轮换日志文件数量。create 关键字会使 logrotate 创建一个新的日志文件,并与新轮换的日志文件具有相同的名称和属性。dateext 关键字导致 logrotate 使用日期作为文件扩展名。compress 关键字(默认文件中被注释掉)导致日志文件由 gzip 压缩。include 关键字为具体程序的 logrotate 规范文件指定标准 /etc/logrotate.d 目录。当使用 rpm 或基于 rpm 的实用程序安装一个程序时,rpm 把 logrotate 规范文件放在该目录中。

logrotate.conf 中的最后指令集会处理 /var/log/wtmp 和 /var/log/btmp 日志文件(wtmp 保存登录记录,而 btmp 保存失败的登录尝试记录);可以查看这些使用 who 的文件。missingok 关键字只覆盖这个文件的隐含默认值 nomissingok,此关键字导致 logrotate 继续运行,即使日志文件丢失也不会发出错误消息。关键字 monthly 只覆盖这个文件的默认值 weekly。create 关键字后面紧跟为新文件建立权限、所有者和组的参数。最后的 rotate则建立应保留的轮换日志文件。

/etc/logrotate.d/httpd 文件是实用程序 logrotate 规格文件的一个例子:

 $ cat /etc/logrotate.d/httpd
 /var/log/httpd/*log {
 missingok
 notifempty
 sharedscripts
 delaycompress
 postrotate
 /sbin/service httpd reload > /dev/null 2>/dev/null || true
 endscript
 }

 

这个文件由 httpd 软件包安装脚本安装,通过 logrotate.conf 中的 include 语句放入 /etc/logrotate.d 中,并使用 /var/log/httpd 中文件名以 log (*log) 结尾的每个文件。如果日志文件是空的,notifempty 关键字导致 logrotate 不轮换日志文件,而是重写空的日志文件。sharedscripts 关键字导致 logrotate 仅执行一次 prerotate 和 postrotate 节的命令,而不是为每个轮换的日志文件执行一次。delaycompress 关键字会导致 logrotate 延迟一个周期压缩。copytruncate 关键字没有出现在这个例子中,它会导致 logrotate 复制后立即截断原来的日志文件,这个关键字对于无法关闭并重新打开日志文件的程序非常有用,因为这些程序可能会在原始文件已被移动的情况下,继续写入原始文件。在轮换开始前,logrotate 实用工具会执行 prerotate 和 endscript 之间的命令。同样,轮换完成后,会执行 postrotate 和 endscript 之间的命令。

logrotate 实用工具使用很多关键字,其中许多带有参数,而且有其它作用。详细信息请参阅 logrotate 手册页。

回页首

应用工具三:应用 rsyslogd 记录系统消息

传统上,UNIX 程序会发送日志消息到标准错误。如果需要更永久的日志,则会把输出重定向到一个文件。为了克服上述方法的局限性,4.3BSD 引进了目前 Linux 使用的系统日志守护进程(rsyslogd; www.rsyslog.com)。这个守护进程负责监听日志消息,并把它们存储在 /var/log 目录中。除了提供日志记录功能,rsyslogd 还允许一台机器作为日志库服务于网络,并允许其它程序来处理特定的日志消息。

/etc/rsyslog.conf 文件存储 rsyslogd 的配置信息。这个文件中的每一行都包含一个或多个由空格分隔的选择器(selector)和一个动作(action)。选择器定义消息的来源和类型,动作(action)则指定 rsyslogd 如何处理消息。rsyslog.conf 示例行如下(# 开始一个注释):

 # Log all kernel messages to the console.
 kern.* /dev/console
 # Log all the mail messages in one place.
 mail.* /var/log/maillog
 # Log cron stuff
 cron.* /var/log/cron
 # Everybody gets emergency messages
 *.emerg *
 # Save boot messages also to boot.log
 local7.* /var/log/boot.log

 

选择器

选择器分为设施和优先级两部分,并由句点分隔。设施表示消息的来源。例如 kern 消息来自内核,mail 消息来自邮件子系统。

图 3 是 rsyslogd 使用的设施名称列表以及生成这些消息的系统:
图 3. rsyslogd 使用的设施名称列表以及生成这些消息的系统
图 3. rsyslogd 使用的设施名称列表以及生成这些消息的系统

优先级表示消息的严重程度。图 4 为优先级的名字列表及其所表示的条件,按优先级顺序升序列出:
图 4. 优先级示意
图 4. 优先级示意

一个选择器由单个设施和优先级组成,如 kern.info 会导致相应的动作应用到来自该设施具有该优先级或更高优先级(更迫切)的每条消息。使用 .= 指定单个优先级事项 ; 例如,kern.=info 表示把该动作应用到具有 info 优先级的内核消息。一个惊叹号指定一个不匹配的优先级。因此 kern.!info 将匹配比 info 优先级低的内核消息,kern.!=info 匹配非 info 优先级的内核消息。

 

一个由分号分隔且包含多个选择器的行,只要有匹配的选择器就执行该动作,该行每个选择器都会约束该匹配,后续选择器通常会收紧该约束。例如,mail.info;mail.!err 选择器匹配具有 debug、info、notice 或 warning 优先级的邮件子系统消息。

可以用星号替换该选择器的每部分以匹配任何内容。该选择器每部分的 none 关键字表示不可能匹配。*.crit;kern.none 选择器会匹配所有关键或更高优先级的消息,来自内核的消息除外。

动作

动作指定 rsyslogd 如何处理一条匹配该选择器的消息。最简单的动作是由其绝对路径指定的普通文件,rsyslogd 对这些文件追加消息。指定 /dev/console 将消息发送到系统控制台。如果想硬拷贝一条消息记录,需要指定一个代表专用打印机的设备文件。在文件名前面加上一个连字符(–)以防止将每条消息写入该文件。这样做可能会提高性能,但如果系统崩溃可能会丢失数据,以至于产生的消息没能来得及写入到一个文件中。

通过指定一个或多个由逗号分隔的用户名,可以将重要消息写入用户终端。通过使用一个星号可以将非常重要的信息写入每个登录的终端。

要将消息转发到远程系统上的 rsyslogd,通过在前面加上一个 @(将消息发送到 UDP 端口 514)或 @@(将消息发送到 TCP 端口 514)以指定系统的名字或 IP 地址。最好将来自内核的关键信息转发到另一个系统,因为这些消息通常在系统崩溃之前,可能来不及保存到本地磁盘上。以下 rsyslog.conf 中的行将关键内核消息发送到 plum:

kern.crit @plum

在远程系统上编辑 /etc/rsyslog.conf,以下两部分命令行是否运行,取决于是否要使用 UDP 或 TCP。不要删除注释中的哈希标记。编辑这个文件后,使用 rsyslog.service 来重新启动 rsyslogd 守护进程。

 # Provides UDP syslog reception
 #$ModLoad imudp
 #$UDPServerRun 514

 # Provides TCP syslog reception
 #$ModLoad imtcp
 #$InputTCPServerRun 514

 

回页首

应用工具四:掌握系统报告

许多实用程序可以对事项进行报告。例如,who、finger、ls、ps 以及其它实用程序可以生成简单的最终用户报告。在某些情况下,这些报告有助于系统管理。本节介绍的实用程序可以产生更多的详细报告,可以为系统管理任务提供更多的帮助。Linux 还有许多其它报告实用程序,比如 sysstat 包中的 sar(系统活动报告)、iostat(输入 / 输出和 CPU 统计)和 mpstat(处理器统计),netstat(网络报告,位于 net-tools 包)和 nfsstat(NFS 统计,位于 nfs-utils 包)。

使用 vmstat 掌握虚拟内存统计信息

vmstat 实用程序(虚拟内存统计,位于 procps 包)生成包含磁盘和 CPU 活动数据的虚拟内存信息。以下示例显示了每隔 3 秒的 7 个迭代(参数 3 7)的虚拟内存统计信息。第一行包括自系统启动以来的时间,后续每行包括自上一行以来的时间间隔。

 $ vmstat 3 7
 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r b swpd free buff cache si so bi bo in cs us sy id wa 0 2 0 684328 33924 219916 0 0 430 105 1052 134 2 4 86 8 0 2 0 654632 34160 248840 0 0 4897 7683 1142 237 0 5 0 95 0 3 0 623528 34224 279080 0 0 5056 8237 1094 178 0 4 0 95 0 2 0 603176 34576 298936 0 0 3416 141 1161 255 0 4 0 96 0 2 0 575912 34792 325616 0 0 4516 7267 1147 231 0 4 0 96 1 2 0 549032 35164 351464 0 0 4429 77 1120 210 0 4 0 96 0 2 0 523432 35448 376376 0 0 4173 6577 1135 234 0 4 0 95

 

以下列表解释了由 vmstat 显示的字段:

  • procs 进程信息
  • r 等待中可运行的进程数
  • b 阻塞的进程数 ( 不间断睡眠中 )
  • memory内存信息(以千字节为单位)
  • swpd 使用的虚拟内存
  • free 空闲内存
  • buff 用作缓冲区的内存
  • cache用作高速缓存的内存
  • swap系统分页活动(每秒千字节)
  • si 从磁盘交换到内存
  • so 使内存换出到磁盘
  • io 系统 I/O 活动(每秒块)
  • bi 从块设备接收的块
  • bo 发送到块设备的块
  • system(单位是每秒)
  • in 中断(包括时钟)
  • cs 上下文开关
  • cpu每个状态所耗费的总 CPU 时间的百分比
  • us 用户 ( 非内核 )
  • sy 系统(内核)
  • id 空闲
  • wa 等待 I/O
  • st 从虚拟机提取(仅在虚拟机上)

使用 top 列出使用资源最多的进程

top 实用程序是 ps 的有益补充。最起码,top 显示的系统信息包括使用 CPU 密集的进程。 top 实用程序可以定期自我更新,输入 q 即可退出。虽然可以使用命令行选项,但使用交互式命令往往更有帮助。
表 1. top 交互式命令

命令 功能
hor ? 显示帮助画面。
k (kill) 提示 PID 号和信号类型,并发送 signal.Defaults 进程到信号 15(SIGTERM),只有当 15 不起作用时才指定 9 (SIGKILL)。
F 显示一个页面,允许指定一个排序字段。
f 显示一个页面,允许指定 top 显示的字段。
o 显示一个页面,允许指定字段的显示顺序。
q 退出 top。
s 以秒为单位提示更新间隔时间。使用 0(零)表示持续更新。
SPACE. 立即更新显示。
W 编写名为 ~/.toprc的启动文件,以便在下一次启动 top,它使用与当前相同的参数。

 

 $ top
 top - 17:58:53 up 3 days, 4:20, 1 user, load average: 2.16, 1.61, 0.83
 Tasks: 167 total, 5 running, 162 sleeping, 0 stopped, 0 zombie
 Cpu(s): 1.5%us, 0.5%sy, 1.3%ni, 96.0%id, 0.2%wa, 0.6%hi, 0.0%si, 0.0%st
 Mem: 2076092k total, 1990652k used, 85440k free, 18416k buffers
 Swap: 7815580k total, 34908k used, 7780672k free, 1330008k cached

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 31323 zach 25 0 9020 6960 396 R 63 0.3 0:17.58 bzip2
 31327 zach 18 0 2092 596 492 R 57 0.0 0:00.92 cp
 31311 root 15 0 0 0 0 S 16 0.0 0:00.38 pdflush
 6870 zach 27 12 331m 190m 37m R 2 9.4 198:42.98 firefox-bin
 31303 root 15 0 0 0 0 S 2 0.0 0:00.42 pdflush
 1 root 15 0 2912 1808 488 S 0 0.1 0:01.55 init

 

回页首

总结

本文着重介绍企业 Linux 系统运维四个重要应用工具的使用和实战,在下一篇文章里面,将介绍企业 Linux 系统运维的重要原则和方法,给企业管理员提供有益参考。

 

参考资料

学习

讨论

关于作者

李洋,博士,现任某大型金融公司信息安全顾问,多年来一直从事信息安全方面的研发和管理工作,具有丰富的互联网、电信网和金融行业信息安全管理、咨询和研发经验。目前关注开源系统安全、云安全、虚拟化安全等。

给我留言

Copyright © 2011-2016 零下二十四度Theme By  Ality  京ICP备16007547号   关于本站

用户登录