IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),因而在跟有关同事确认后rm -f果断删除该文件。可是发现删除该文件后,/分区的磁盘空间压根没有释放出来,使用率仍是100%!这是为何呢??node
[root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 58G 7.8G 47G 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vda1 190M 72M 108M 40% /boot
在Linux系统中,经过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除连接(unlink),也就是说只是删除了文件和系统目录结构的连接;若是文件在删除时是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程将仍然能够读取该文件,也就是说没有删除掉文件在读取的状态,因此磁盘空间也就会一直被占用。 linux
一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就能够被覆盖并写入新的内容,之因此出现删除文件后,空间还没释放,就是由于有进程还在一直向这个文件写入内容,致使虽然删除了文件,但文件对应的指针部分因为进程锁定,并未从meta-data中清除,而因为指针并未被删除,那么系统内核就认为文件并未被删除,所以经过df命令查询空间并未释放也就不足为奇了。数据库
在线清空文件(好比/home/wangshibo.log)的方式:安全
a)# echo " " > /home/wangshibo.log b)# cat /dev/null > /home/wangshibo.log c)# > /home/wangshibo.log
还有一种磁盘空间使用问题的现象:明明使用df -h命令查看磁盘空间使用率不算高,还有不少空余空间,可是建立文件或写入数据时一直报错磁盘写满:" no space left on device"!bash
通常这种问题都是因为分区目录下deleted删除后的资源空间没有真正释放出来致使的, 具体处理流程以下:服务器
大多数文件系统都会保留一部分空间留做紧急状况时用(好比硬盘空间满了),这样能保证有些关键应用(好比数据库)在硬盘满的时候有点余地,不致于立刻就 crash,给监控系统和管理员一点时间去察觉。不过有时候这部分预留的硬盘空间不用的话有点浪费。app
在Linux系统中,ext二、ext三、ext4文件系统上一般会默认预留5%的磁盘空间,好比磁盘若是是2TB,这就意味着有100GB的空间会被预留下来,这样的话会不会显得有点浪费了。能够经过"tune2fs"命令来改变5%的默认设置,好比只预留2%的空间。可是不建议设成0%,现实环境中这样作不安全。工具
[root@ss-server ~]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/vda1 ext4 41151808 4962148 34076228 13% / devtmpfs devtmpfs 1931468 0 1931468 0% /dev tmpfs tmpfs 1941204 0 1941204 0% /dev/shm tmpfs tmpfs 1941204 652 1940552 1% /run tmpfs tmpfs 1941204 0 1941204 0% /sys/fs/cgroup tmpfs tmpfs 388244 0 388244 0% /run/user/0 [root@ss-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 4.8G 33G 13% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 620K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 380M 0 380M 0% /run/user/0
好比上面"/"分区是ext4文件系统,默认系统预留了5%也就是2G的空间。
如今能够经过"tune2fs"命令将系统预留空间改成2%。学习
[root@ss-server ~]# tune2fs -m 2 /dev/vda1 tune2fs 1.42.9 (28-Dec-2013) Setting reserved blocks percentage to 2% (209704 blocks)
执行后,发现"/"分区腾出了1G的空间,这时系统预留空间也就是2%了。spa
[root@ss-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 4.8G 34G 13% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 620K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 380M 0 380M 0% /run/user/0
注意:
Linux下只有ext二、ext三、ext4文件系统时,系统才会默认预留5%的磁盘空间。
若是文件系统是xfs、tmpfs、devtmpfs、overlay等,则系统默认不会预留磁盘空间。
有段时间没跟你们分享资源福利了,看了下本身的资料夹,整理了一些我认为比较好的Python学习资料了。相信这套资料能够对你进阶高级工程师有帮助
学习工具
大厂实战手册
自学视频(部分)
【资料免费领取方式】:点这里:2020Python高薪实战学习大合集