记录一次Centos服务器tmp目录满的问题排查处理....

记录一次Centos服务器tmp目录满的问题排查处理....,第1张

早上美编组突然反应账号登录不上,个别文件上传不上,本人非专业的服务器运维人员,第一反应是服务器磁盘空间满了,立即上去排查一圈,发现磁盘尚有剩余空间,所以进一步排查问题,现在讲相关过程记录下来备用。

问题发现:相关应用不能正常使用,系统有明显报错提示(如下):

bash: cannot create temp fileforhere-document: No space leftondevice

有过初步的运维知识,并经过度妈显示 这种情况应该是服务器tmp目录被占满的提示,因此开始排除问题:

一、查看服务器磁盘空间情况:

df -hl 命令显示 / 根目录40%空间已使用,尚有60%的空间未被使用,所以磁盘空间占满的情况给排除了(如果出现占用100%的问题,请自行度妈找解决问题办法,不在本篇讨论的范围之内;)

二、 找出问题原因所在并排除 (重点)

因为本人非专业的运维人员,所以并不知道接下来该怎么办(大佬可以无视),经过一番搜索及请教,得到一种提示: LINUX服务器也会因为小文件太多造成inode索引使用完,而报以上错误 ;  随即开始确认问题;

1、执行命令 df -i  得到如下图:

看到了 100%,感兴趣的人自行去百度,大致意思是LINUX写文件需要两个条件:01:磁盘有空间(文件大小占用容量);02:inode(类似于编号)之类的东东(存放文件数量),哪个有问题都会提示写入不了文件;病因找到,开始处理。

2、因为tmp目录一般在系统 / 根目录下,随即 cd / ,切换至系统根目录下执行如下命令  

for i in /; doecho$i;find$i| wc -l; done

大致意思是从 / 根目录开始逐级排查目录下文件的数量多少,一般会得到如下的图示;

经过层层定位,本人定位到如下目录:/var/spool/postfix/maildrop ,显示文件数量 200多万个,着实是有点大,封顶多少我也不知道,接下来就是删除文件了呗,执行如下命令:

ls | xargs rm -rf;

经过约10分钟左右的等待,命令执行完毕,通知美编组测试,一切恢复正常,特撰文记录。

三、为什么会出现这种情况,后续处理

 /var/spool/postfix/maildrop 这个目录好像是存放了类似于cron执行后邮件通知的内容信息文件,继续上网查资料,发现是crontab 每次执行任务后会发送邮件,接受者是在他的配置文件 “/etc/crontab” 通过 MAILTO=root’ 来设置的,默认是root,如果执行输出没有十分必要要用邮件发送的话,可以修改此处。

随修改如下:

执行命令  vi /etc/crontab;

将‘MAILTO=root’替换成‘MAILTO="",然后service crond restart即可。

===================================与本篇内容无关==================================

使用命令du -h –max-depth=1 / 查看/ 根路径下文件的大小

du -sh / 查看哪个目录最大,一步一步的查找大文件

使用du -h --max-depth=1查找最大的文件

1、若要查看硬盘剩余空间,首先要登录linux服务

2、打开系统的控制面板,然后输入系统命令“df”,如图所示

3、使用命令“df -lh”,可以更详细地显示磁盘使用情况

4、如果使用命令“df  -a ”,则是全部硬盘的使用与剩余情况,如图所示

如何查看Linux磁盘空间大小
一、df命令;
df是来自于coreutils软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;
举例:
[root@localhost beinan]# df -lh
Filesystem容量已用可用已用%挂载点
/dev/hda8 11G 60G 44G 58% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/sda1 56G 22G 35G 39% /mnt/sda1
我们从中可以看到,系统安装在/dev/hda8;还有一个56G的磁盘分区/dev/sda1挂载在/mnt/sda1中;
其它的参数请参考man df
二、fdsik
fdisk是一款强大的磁盘 *** 作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;参数-l,通过-l参数,能获得机器中所有的硬盘的分区情况;
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 800 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
在上面Blocks中,表示的是分区的大小,Blocks的单位是byte,我们可以换算成M,比如第一个分区/dev/hda1的大小如果换算成M,应该是6144831/1024=6000M,也就是6G左右,其实没有这么麻烦,粗略的看一下把小数点向前移动三位,就知道大约的体积有多大了;
System表示的文件系统,比如/dev/hda1是NTFS格式的;/dev/hda2表示是fat32格式的文件系统;
在此例中,我们要特别注意的是/dev/hda3分区,这是扩展分区;他下面包含着逻辑分区,其实这个分区相当于一个容器;从属于她的有hda5,hda6,hda7,hda8,hda9;
我们还注意到一点,怎么没有hda4呢?为什么hda4没有包含在扩展分区?一个磁盘最多有四个主分区;hda1-4算都是主分区;hda4不可能包含在扩展分区里,另外扩展分区也算主分区;在本例中,没有hda4这个分区,当然我们可以把其中的一个分区设置为主分区,只是我当时分区的时候没有这么做而已;
再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分区的体积,所以我们可以这样算hda1+hda2+hda3=6144831+16386300+39728745 =62259876 (b),换算成M单位,小数点向前移三位,所以目前已经划分好的分区大约占用体积是62259876(M),其实最精确的计算62259876/1024=6080067(M);而这个磁盘大小是800 GB(80026361856byte),其实实际大小也就是78150744(M);通过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大约还有18G未分区的空间;
fdisk -l能列出机器中所有磁盘的个数,也能列出所有磁盘分区情况;比如:
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 800 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
Disk /dev/sda: 600 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux
通过上面我们可以知道此机器有两块硬盘,我们也可以指定fdisk -l来查看其中一个硬盘的分区情况;
[root@localhost beinan]# fdisk -l /dev/sda
Disk /dev/sda: 600 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux
通过上面情况可以知道,在/dev/sda这个磁盘中,只有一个分区;使用量差不多是百分百了;
我们还可以来查看/dev/hda的
[root@localhost beinan]# fdisk -l /dev/hda
自己试试看?
三、cfdisk来自于util-linux的软件包;
cfdisk也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk简单易用是他的特点;和DOS中的fdisk相似;在本标题中,我们只来解说如何查看机器的中的磁盘分区状况及所用的文件系统等;
查看磁盘分区的用法cfdisk -Ps磁盘设备名;
比如
[root@localhost beinan]cfdisk -Ps
[root@localhost beinan]cfdisk -Ps /dev/hda
[root@localhost beinan]cfdisk -Ps
Partition Table for /dev/hda
First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- ------------------------
1 Primary 0 23438834 63 23438835 Linux (83) Boot
2 Primary 23438835 156296384 0 132857550 Extended (05) None
5 Logical 23438835 155268224 63 131829390 Linux (83) None
6 Logical 155268225 156296384 63 1028160 Linux swap (82) None
我们只用的参数-Ps,就列出了磁盘的分区情况;目前在Slackware DebianMandrake等主流发行版中存在cfdisk,而fedora 40把这个小工具剔除了;有点可惜;这是我在Slackware中 *** 作的;
如果您这样 *** 作,就更直观了;
[root@localhost beinan]cfdisk磁盘设备名
举例:
[root@localhost beinan]cfdisk /dev/hda
您所看到的是如下的模式:
cfdisk 212a
Disk Drive: /dev/hda
Size: 80026361856 bytes, 800 GB
Heads: 255 Sectors per Track: 63 Cylinders: 9729
Name Flags Part Type FS Type [Label] Size (MB)
-------------------------------------------------------------------------------------------
hda1 Boot Primary Linux ReiserFS 1200069
hda5 Logical Linux ReiserFS 6749665
hda6 Logical Linux swap 52642
[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]
[ Type ] [ Units ] [ Write ]
Toggle bootable flag of the current partition
您进入了cfdisk的 *** 作界面;用键盘移动指针到[Quit]就可以退出;
四、parted功能不错的分区工具;在Fedora 40中有带,可以自己安装上;在此主题中,我们只说如何查看磁盘的分区情况;
调用方法简单,parted默认是打开的设备是/dev/hda,也可以自己指定;比如parted /dev/hda或/dev/sda等;退出的方法是quit
[root@localhost beinan]# parted
使用/dev/hda
(parted) p
/dev/hda的磁盘几何结构:0000-76319085兆字节
磁盘标签类型:msdos
Minor起始点终止点类型文件系统标志
1 0031 6000842主分区ntfs启动
2 6000842 22003088主分区fat32 lba
3 22003088 60800690扩展分区
5 22003119 30004211逻辑分区reiserfs
6 30004242 40005615逻辑分区reiserfs
7 40005646 40774350逻辑分区linux-swap
8 40774381 52219094逻辑分区ext3
9 52219125 60800690逻辑分区reiserfs
我们在partd的 *** 作面上,用p就可以列出当前磁盘的分区情况,如果想要查看其它磁盘,可以用select功能,比如select /dev/sda;
五、qtparted,与parted相关的软件还有qtparted,也能查看到磁盘的结构和所用的文件系统,是图形化的;
[beinan@localhost ~]# qtparted
图形化的查看,一目了然;
六、sfdisk也是一个分区工具,功能也多多;我们在这里只说他的列磁盘分区情况的功能;
[root@localhost beinan]# sfdisk -l
自己看看吧;
sfdisk有几个很有用的功能;有兴趣的弟兄不妨看看;
七、partx也简要的说一说,有些系统自带了这个工具,功能也简单,和fdisk、parted、cfdisk来说不值一提;不用也罢;
用法:partx设备名
[root@localhost beinan]# partx /dev/hda
# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)
# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)
# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)
# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)
# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)
# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)
# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)
八、查看目前机器中的所有磁盘及分区情况:
[beinan@localhost ~]$ cat /proc/partitions
major minor #blocks name
3 0 78150744 hda
3 1 6144831 hda1
3 2 16386300 hda2
3 5 8193118 hda5
3 6 10241406 hda6
3 7 787153 hda7
3 8 11719386 hda8
3 9 8787523 hda9
8 0 58605120 sda
8 1 58604528sda1

1、先通过 df -h 查看是哪个磁盘空间满了,并看一下后面的挂载目录是哪个,比如说是>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13063181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存