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


  當磁盤無法寫入的時候,一般有以下可能:

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

 

一、 遇到只讀的文件系統

  文件系統自動設置成只讀可能是系統自我保護的一種機制,因此需要實現弄清究竟是什么原因造成了文件系統的只讀。如果想要改變文件系統的只讀屬性,重新掛載目標分區即可。

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

# mount -o remount, rw /home

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

 

二、 磁盤滿

  磁盤使用率、剩余空間等可以使用 df 命令查看,

例2. 查看當前已掛載的所有分區及使用情況

 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 自動以適合閱讀的單位顯示,該例子的磁盤空間顯然還很充分。

  有時候會發現,df 結果中的使用空間 "Used" 和容量 "Size" 存在一定的差距,但是可用空間 "Avail" 卻所剩無幾,同時使用率 “Use %”居高不下,甚至達到100%。這種情況並不奇怪,因為Linux為了避免系統存儲空間完全占用導致的root用戶無法登陸,為root用戶保留了一塊保留區塊,供磁盤使用率過高時root用戶登陸系統完成必要的清理操作。僅有root用戶可以在這些保留塊中寫入數據,可以通過 tune2fs 工具查看保留塊的大小。

例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文件截斷,實際上就是刪除指定日志文件的內容。當然也可以直接刪除對應的日志文件。

 

三、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節點,再將文件復制回去。

 

  

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM