磁盘空间已满的解决方法

问题现象:

远程服务器上写入文件或者日志写满时,提示no space left on device(磁盘空间不足)

问题原因:

  1. block 满了

  2. inode用光了

解决思路:

  1. 针对block满了的问题,通常的解决方法是删除较大文件以释放磁盘空间,但是删除数据要慎重;
  2. 针对inode用光的情况,是小文件占用较多的inode,通常会有定时任务创建占用一个inode的文件或目录,删除时要注意这些定时任务,谨防误删。
    涉及linux命令:
    df -h  -->查看磁盘使用情况;
    df -i --> 查看inode使用情况;
    
    删除文件成功:
    硬链接数为0+进程调用数为0

解决过程演示:

1. 查看磁盘使用情况
[root@db-test ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   40G   20M 100% /
2、删除日志文件(可以被删除的大文件)

1 )找到占用空间较大且无用的文件,一般是过期的log文件,进入存放log的目录下,查找哪个文件夹占用空间最大

du -h --max-depth=1

2)进入最大的文件夹,查找最大的文件

ls -lhS
[root@db-test ~]# cd /var/log
[root@db-test log]# du -h --max-depth=1
17M        ./sa
17M        ./audit
44K        ./tuned
0        ./chrony
2.1M        ./anaconda
0        ./rhsm
0        ./ntpstats
69M        ./jcloud
8.8G        .
[root@db-test log]# ls -lhS
total 8.7G
-rw-r--r--  1 root   root   8.6G May  7 16:15 messages
-rw-rw-rw-  1 root   root    11M May  3 11:43 AgentMonitor.log.1
-rw-rw-rw-  1 root   root    11M Apr 30 05:14 CloudAgent.log.1

3)删除最大的文件

rm -rf /var/log/messages

4)查看空间是否被释放

df -h

注:当使用rm删除被进程打开的大文件时,rm执行后仅仅是删除了文件,而对应的文件句柄没被程序关闭,则会导致linux内核无法回收被占用的磁盘空间

3、查看文件是否依然被进程调用

lsof |grep delete

若存在调用关系,重启对应进程,比如日志服务或者关闭进程

/etc/init.d/rsyslog restart
kill -9 31871

4、再次查看磁盘使用情况

[root@db-test /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  2.7G   38G   7% /
devtmpfs        1.9G     0  1.9G   0% /dev

linux操作磁盘命令

磁盘分区:fdisk

磁盘信息:df、du

  • df 命令

    功能: 检查文件系统的磁盘空间占用情况
    语法: df [-a/-k/-h/-T]

    • -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,/proc文件系统;
    • -k 以k字节为单位显示;
    • -h 以可读性较好的方式显示;
    • -T 显示文件系统类型。
      常用: df -ah; df -h
  • du 命令

    功能: 统计目录(或文件)所占磁盘空间的大小
    语法: du [-s/-k/-h/-T]

    • -s 对每个Names参数只给出占用的数据块总数;
    • -a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数;
    • -b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位);
    • -k 以1024字节为单位列出磁盘空间使用情况;
    • -c 最后再加上一个总计(系统缺省设置);
    • -l 计算所有的文件大小,对硬链接文件,则计算多次。
      常用: du -sh /etc;du -h /etc

磁盘加载:mount、unmount

1、磁盘

mount /dev/floppy /media/floppy
umount /dev/floppy

2、光盘

mount /dev/cdrom /media/cdrom
umount /dev/cdrom

3、USB

fdisk -l /dev/sda (USB设备名,不同机器上显示可能不一样)
mkdir /mnt/usb
mount -t vfat /dev/sda2 /mnt/usb
ls /mnt/usb
umount /dev/sda2

猜你喜欢

转载自blog.csdn.net/ccccsy99/article/details/105976835