Linux系統運維應用工具的使用和實戰

企業 Linux 系統的運維成爲目前企業關注的重點。做爲一種優秀的開源網絡操做系統,如何充分利用 Linux 的工具並使用相應的方法來提升運維效率是很是重要的工做。本專題將詳細介紹幾個對系統管理員比較重要的工具和概念,它涵蓋了操做硬盤分區、如何避免產生問題以及如何解決系統問題的內容,覺得企業 Linux 的實際運維提供有益參考。linux

應用工具一:應用parted 報告並分區硬盤ios

parted(分區編輯器)實用程序從命令行報告和操做硬盤分區。palimpsest 實用程序使用 GUI 執行相同的任務。此外,parted print 命令會顯示 /dev/sda 驅動器上的分區信息:緩存

  
  
  
  
  1. # parted /dev/sda print   網絡

  2. Model: ATA Hitachi HDS12345 (scsi)   運維

  3. Disk /dev/sda: 165GB   tcp

  4. Sector size (logical/physical): 512B/512B   編輯器

  5. Partition Table: msdos   ide

  6. Number Start End Size Type File system Flags   工具

  7. 1 32kB 1045MB 1045MB primary ext4 boot   佈局

  8. 2 1045MB 12GB 10GB primary ext4   

  9. 3 12GB 22GB 10GB primary ext4   

  10. 4 22GB 165GB 143GB extended   

  11. 5 22GB 23GB 1045MB logical linux-swap(v1)   

  12. 6 23GB 41GB 18GB logical ext4   

  13. 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 列表示文件系統類型:ext二、ext三、ext四、fat3二、linux-swap 等等。

Flags 列是分區打開標誌,包括 boot、raid和 lvm。在這個例子中,1 號分區是引導分區。

圖 1. 例子中的主分區和擴展分區

在前面的例子中,分區 4 定義了一個擴展分區,其中包含 165GB 磁盤中的 143 GB(如圖 1)。使用時不能更改邏輯分區,不然會影響其中的全部邏輯分區。

除了報告硬盤的佈局和大小,還能夠採用交互式方式使用 parted 修改磁盤佈局。當使用這種方式時要格外當心,開始使用此實用工具以前必需先備份系統。注意更改磁盤上的分區信息(分區表)會破壞磁盤上的信息。請先閱讀 parted 信息頁,而後再嘗試修改分區表。值得注意的是:錯誤的 parted 使用能夠摧毀磁盤上的一切數據。

使用 parted 要當心,由於你是在使用一個能夠格式化硬盤的實用程序。使用 parted 所作的更改很容易致使大量數據的丟失。若是使用 parted 所作的事情有任何問題,在應用其更改以前使用 q 命令退出。輸入命令後,parted 會當即依據要求進行更改。

要對磁盤進行分區時,在 parted 命令後須要加上要使用的設備名稱。在下面的例子中,啓動 parted 後,用戶輸入 help(或只是 h)命令,會顯示 parted 命令列表:

  
  
  
  
  1. # parted /dev/sda  

  2. GNU Parted 2.3  

  3. Using /dev/sda  

  4. Welcome to GNU Parted! Type 'help' to view a list of commands.  

  5. (parted) help  

  6. align-check TYPE N check partition N for TYPE(min|opt) alignment  

  7. check NUMBER do a simple check on the file system  

  8. cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another partition  

  9. help [COMMAND] print general help, or help on COMMAND  

  10. mklabel,mktable LABEL-TYPE create a new disklabel (partition table)  

  11. mkfs NUMBER FS-TYPE make a FS-TYPE file system on partition NUMBER  

  12. mkpart PART-TYPE [FS-TYPE] START END make a partition  

  13. mkpartfs PART-TYPE FS-TYPE START END make a partition with a file system  

  14. move NUMBER START END move partition NUMBER  

  15. name NUMBER NAME name partition NUMBER as NAME  

  16. print [devices|free|list,all|NUMBER] display the partition table,  

  17. available devices, free ...  

  18. quit exit program  

  19. rescue START END rescue a lost partition near START and END  

  20. resize NUMBER START END resize partition NUMBER and its file system  

  21. rm NUMBER delete partition NUMBER  

  22. select DEVICE choose the device to edit  

  23. set NUMBER FLAG STATE change the FLAG on partition NUMBER  

  24. toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER  

  25. unit UNIT set the default unit to UNIT  

  26. version display the version number and copyright information of ...  

  27. (parted) 

Help 後邊跟上一個 parted 命令參數的名稱,則會顯示該命令參數的更多信息。當輸入 print(或只是 p)命令時,parted 顯示當前分區信息,就像命令行上的 print 命令同樣。

parted 實用程序不容許設置重疊分區(除邏輯分區能夠重疊其包含的擴展分區外)。一樣,也不容許建立一個正好始自磁盤開頭(柱面 0)的分區。這些狀況都會致使數據丟失。

定義一個磁盤分區表時,要記住一些基本的準則。首先,不要刪除或修改定義擴展分區的分區,除非你願意失去擴展分區內全部邏輯分區上的全部數據。其次,若是把 /boot 放在單獨的分區上,最好放在驅動器開頭的位置(分區 1),以便 Linux 能夠從位於驅動器最近的分區引導。當磁盤空間的費用不是問題時,最好把每一個主要文件系統放在單獨的分區上。許多人選擇把 /(根), /var 和 /usr 合放在一個單獨的分區中,這一般會節省空間,但在偶爾狀況下也會致使問題。最後,雖然 parted 能夠建立某些類型的文件系統,但 parted 一般是用來建立分區,而後可以使用 mkfs 和 mkswap 在分區上建立文件系統。

如下命令序列(圖 2)在一個乾淨的磁盤上定義了一個 300 兆字節、可引導的 Linux 分區,並將其做爲分區 1:

圖 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 文件:

  
  
  
  
  1. $ cat /etc/logrotate.conf  

  2. # see "man logrotate" for details  

  3. # rotate log files weekly  

  4. weekly  

  5. # keep 4 weeks worth of backlogs  

  6. rotate 4  

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

  8. create  

  9. # use date as a suffix of the rotated file  

  10. dateext  

  11. # uncomment this if you want your log files compressed  

  12. #compress  

  13. # RPM packages drop log rotation information into this directory  

  14. include /etc/logrotate.d  

  15. # no packages own wtmp and btmp -- we'll rotate them here  

  16. /var/log/wtmp {  

  17. monthly  

  18. create 0664 root utmp  

  19. minsize 1M  

  20. rotate 1  

  21. }  

  22. /var/log/btmp {  

  23. missingok  

  24. monthly  

  25. create 0600 root utmp  

  26. rotate 1  

  27. }  

  28. # 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 規格文件的一個例子:

  
  
  
  
  1. $ cat /etc/logrotate.d/httpd  

  2. /var/log/httpd/*log {  

  3. missingok  

  4. notifempty  

  5. sharedscripts  

  6. delaycompress  

  7. postrotate  

  8. /sbin/service httpd reload > /dev/null 2>/dev/null || true  

  9. 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 示例行以下(# 開始一個註釋):

  
  
  
  
  1. # Log all kernel messages to the console.  

  2. kern.* /dev/console  

  3. # Log all the mail messages in one place.  

  4. mail.* /var/log/maillog  

  5. # Log cron stuff  

  6. cron.* /var/log/cron  

  7. # Everybody gets emergency messages  

  8. *.emerg *  

  9. # Save boot messages also to boot.log  

  10. local7.* /var/log/boot.log 

選擇器

選擇器分爲設施和優先級兩部分,並由句點分隔。設施表示消息的來源。例如 kern 消息來自內核,mail 消息來自郵件子系統。

圖 3 是 rsyslogd 使用的設施名稱列表以及生成這些消息的系統:

優先級表示消息的嚴重程度。圖 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 守護進程。

  
  
  
  
  1. # Provides UDP syslog reception  

  2. #$ModLoad imudp  

  3. #$UDPServerRun 514  

  4. # Provides TCP syslog reception  

  5. #$ModLoad imtcp  

  6. #$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)的虛擬內存統計信息。第一行包括自系統啓動以來的時間,後續每行包括自上一行以來的時間間隔。

  
  
  
  
  1. $ vmstat 3 7  

  2. procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----  

  3. r b swpd free buff cache si so bi bo in cs us sy id wa  

  4. 0 2 0 684328 33924 219916 0 0 430 105 1052 134 2 4 86 8  

  5. 0 2 0 654632 34160 248840 0 0 4897 7683 1142 237 0 5 0 95  

  6. 0 3 0 623528 34224 279080 0 0 5056 8237 1094 178 0 4 0 95  

  7. 0 2 0 603176 34576 298936 0 0 3416 141 1161 255 0 4 0 96  

  8. 0 2 0 575912 34792 325616 0 0 4516 7267 1147 231 0 4 0 96  

  9. 1 2 0 549032 35164 351464 0 0 4429 77 1120 210 0 4 0 96  

  10. 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 交互式命令

  
  
  
  
  1. $ top  

  2. top - 17:58:53 up 3 days, 4:20, 1 user, load average: 2.16, 1.61, 0.83  

  3. Tasks: 167 total, 5 running, 162 sleeping, 0 stopped, 0 zombie  

  4. 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  

  5. Mem: 2076092k total, 1990652k used, 85440k free, 18416k buffers  

  6. Swap: 7815580k total, 34908k used, 7780672k free, 1330008k cached  

  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

  8. 31323 zach 25 0 9020 6960 396 R 63 0.3 0:17.58 bzip2  

  9. 31327 zach 18 0 2092 596 492 R 57 0.0 0:00.92 cp  

  10. 31311 root 15 0 0 0 0 S 16 0.0 0:00.38 pdflush  

  11. 6870 zach 27 12 331m 190m 37m R 2 9.4 198:42.98 firefox-bin  

  12. 31303 root 15 0 0 0 0 S 2 0.0 0:00.42 pdflush  

  13. 1 root 15 0 2912 1808 488 S 0 0.1 0:01.55 init 

總結

出自http://os.51cto.com/art/201211/364750_3.htm

相關文章
相關標籤/搜索