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节点,再将文件复制回去。

相关文章
相关标签/搜索