Linux系統排查3——I/O篇

  當磁盤沒法寫入的時候,通常有如下可能:node

  • 文件系統只讀
  • 磁盤已滿
  • I節點使用完

 

1、 遇到只讀的文件系統mongodb

  文件系統自動設置成只讀多是系統自我保護的一種機制,所以須要實現弄清到底是什麼緣由形成了文件系統的只讀。若是想要改變文件系統的只讀屬性,從新掛載目標分區便可。bash

例1. 從新掛載改變/home分區的讀寫屬性工具

# mount -o remount, rw /home

   -o 選項後面接了兩個mount 命令的專有選項,remount是指從新掛載指定文件系統,rw指定從新掛載時的讀寫屬性,該命令不改變掛載點,只是改變指定分區的讀寫屬性。ui

 

2、 磁盤滿spa

  磁盤使用率、剩餘空間等可使用 df 命令查看,日誌

例2. 查看當前已掛載的全部分區及使用狀況code

 1 # df -h
 2 Filesystem      Size  Used Avail Use% Mounted on
 3 /dev/sda2       133G  8.6G  118G   7% /
 4 none            4.0K     0  4.0K   0% /sys/fs/cgroup
 5 udev            5.9G  4.0K  5.9G   1% /dev
 6 tmpfs           1.2G  868K  1.2G   1% /run
 7 none            5.0M     0  5.0M   0% /run/lock
 8 none            5.9G     0  5.9G   0% /run/shm
 9 none            100M     0  100M   0% /run/user
10 /dev/sda1        93M  3.4M   90M   4% /boot/efi

 

   -h 自動以適合閱讀的單位顯示,該例子的磁盤空間顯然還很充分。blog

  有時候會發現,df 結果中的使用空間 "Used" 和容量 "Size" 存在必定的差距,可是可用空間 "Avail" 卻所剩無幾,同時使用率 「Use %」居高不下,甚至達到100%。這種狀況並不奇怪,由於Linux爲了不繫統存儲空間徹底佔用致使的root用戶沒法登錄,爲root用戶保留了一塊保留區塊,供磁盤使用率太高時root用戶登錄系統完成必要的清理操做。僅有root用戶能夠在這些保留塊中寫入數據,能夠經過 tune2fs 工具查看保留塊的大小。rem

例3. 使用tune2fs查看系統保留塊

 1 # tune2fs -l /dev/sda2 | grep -i "block"
 2 Block count:              35400448
 3 Reserved block count:     1770022
 4 Free blocks:              33183919
 5 First block:              0
 6 Block size:               4096
 7 Reserved GDT blocks:      1015
 8 Blocks per group:         32768
 9 Inode blocks per group:   512
10 Flex block group size:    16
11 Reserved blocks uid:      0 (user root)
12 Reserved blocks gid:      0 (group root)
13 Journal backup:           inode blocks

  其中,第3行顯示系統保留塊的數量,第6行顯示每塊的大小(4KB),兩者相乘能夠計算保留區塊的總大小;

  第11, 12行顯示能對保留區塊執行寫入操做的用戶和用戶組編號,這裏都是root;

  上面只是查看某個文件系統的佔用,如何知道這個文件系統中相關目錄的空間佔用狀況呢?du命令能夠查看文件系統上全部目錄的大小。

例4. 使用du查看目錄佔用的空間

1 # cd /
2 # du -ckx | sort -n > /tmp/dir_space

  使用 tail 查看保存的/tmp/dir_space文件能夠看到根文件系統下最大的10個目錄:

 1 674236    ./var/log
 2 904232    ./usr/lib
 3 1372776    ./var/lib/glance/images
 4 1372868    ./var/lib/glance
 5 1523512    ./var/lib/mongodb
 6 2082052    ./usr
 7 4003024    ./var/lib
 8 4878944    ./var
 9 8798036    .
10 8798036    total

 

  這裏能夠看到/var/log目錄是很大的,因爲/var/log/目錄存放的是一些日誌文件,日誌文件一般也是佔用系統空間的源泉,能夠經過釋放日誌文件空間來得到存儲空間:

1 # ls -lhs /var/log/syslog.1
2 1.3M -rw-r----- 1 syslog adm 1.3M Aug 12 06:34 syslog.1
3 # bash -c "> /var/log/syslog.1"
4 # ls -lhs /var/log/syslog.1
5 0 -rw-r----- 1 syslog adm 0 Aug 12 15:16 syslog.1

  該例子將分卷後的syslog文件截斷,實際上就是刪除指定日誌文件的內容。固然也能夠直接刪除對應的日誌文件。

 

3、I節點不足

  當df顯示磁盤空間充足,但文件系統卻報錯本身已滿,沒法寫入時,須要檢查是否耗盡了I節點。

  在系統中建立一個新文件將會得到一個惟一的I節點,一旦把I節點用光,就沒法再建立新的文件了,這在系統建立大量文件時纔有可能發生,使用 df -i 命令能夠查看I節點的使用狀況。

例5. 查看I節點的使用狀況

 1 # df -i
 2 Filesystem      Inodes  IUsed   IFree IUse% Mounted on
 3 /dev/sda2      8855552 219633 8635919    3% /
 4 none           1532516      2 1532514    1% /sys/fs/cgroup
 5 udev           1529802    463 1529339    1% /dev
 6 tmpfs          1532516    523 1531993    1% /run
 7 none           1532516     12 1532504    1% /run/lock
 8 none           1532516      1 1532515    1% /run/shm
 9 none           1532516      3 1532513    1% /run/user
10 /dev/sda1            0      0       0     - /boot/efi

  能夠看到當前各個文件系統的I節點充足。

  一旦遇到I節點用光的情形,有如下幾種選擇:

  1. 刪除大量文件

  2. 將大量文件移動到其餘的文件系統中;

  3. 將大量的文件壓縮成一個文件;

  4. 備份當前文件系統中的全部文件,從新格式化以前的硬盤,得到更多的I節點,再將文件複製回去。

相關文章
相關標籤/搜索