您的位置:首页 > 运维架构 > Linux

Linux 文件删除

2015-11-25 11:58 711 查看
         在工作中我们经常会遇见磁盘达到警戒线,提示报警之类的信息。然后我们进入系统对不必要的文件进行删除。但是我们发现有些时候我们删除了文件但是磁盘空间资源却没有被释放,这是什么原因呢?

      提前准备

(本机环境CeontOS 6.5 64 bit    IP:10.1.38.20

1、linux httpd 安装

[root@zhang~]# yum installhttpd -y
………………        #省略安装详情
[root@mode-6conf]# ll/etc/init.d/httpd    #
如果安装成功,那么会正常显示

-rwxr-xr-x1 root root 3371 Aug 25 01:53
/etc/init.d/httpd

2、启动httpd web 服务

[root@mode-6conf]# /etc/init.d/httpd start
Startinghttpd: httpd: Could not reliably determine the server's fully qualified domainname, using mode-6.5 for ServerName
                                                          [  OK  ]
         浏览器正常访问:



3、创建一个小的文件系统用于存放日志

 

[root@mode-6~]# dd if=/dev/zero of=/dev/sdc bs=8k count=10     #80k
大小

10+0records in
10+0records out
81920bytes (82 kB) copied, 0.00104354 s, 78.5 MB/s
[root@mode-6~]# ls -l/dev/sdc      #
查看是否创建成功

-rw-r--r--1 root root 81920 Nov 25 09:23 /dev/sdc
[root@mode-6~]# mkfs -t ext3/dev/sdc     #
文件系统格式化

mke2fs1.41.12 (17-May-2010)
/dev/sdcis not a block special device.
Proceedanyway? (y,n) y   #
选择是

Filesystemlabel=
OStype: Linux
Blocksize=1024 (log=0)
Fragmentsize=1024 (log=0)
Stride=0blocks, Stripe width=0 blocks
16inodes, 80 blocks
4blocks (5.00%) reserved for the super user
Firstdata block=1
1block group
8192blocks per group, 8192 fragments per group
16inodes per group
 
Writinginode tables: done                           
 
Filesystemtoo small for a journal
Writingsuperblocks and filesystem accounting information: done
 
Thisfilesystem will be automatically checked every 37 mounts or
180days, whichever comes first.  Use tune2fs-c or -i to override.
[root@mode-6~]# mkdir/app/log -p      #
创建新的目录用于存放httpd日志

[root@mode-6~]# mount/dev/sdc /app/log#
设备挂载

mount:/dev/sdc is not a block device (maybe try `-o loop'?)
[root@mode-6~]# mount-o loop  /dev/sdc /app/log/
#失败,再次挂载

[root@mode-6~]# df -h    #
查看磁盘使用率信息

Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       7.2G 2.9G  4.0G  42% /
tmpfs           242M     0 242M   0% /dev/shm
/dev/sda1       194M  34M  151M  19% /boot
/dev/sdc         73K  14K   55K  21% /app/log
 

4、修改httpd 的日志路径 

         注意:修改前备份(必须的),以免造成文件损坏

[root@mode-6conf]# cd/etc/httpd/conf
[root@mode-6conf]# ll
total88
-rw-r--r--1 root root 34467 Nov 25 09:34 httpd.conf
-rw-r--r--1 root root 13139 Aug 25 01:53 magic
[root@mode-6conf]# cp  httpd.conf  httpd.conf.ori
[root@mode-6conf]# vimhttpd.conf
         修改前



         修改后



5、重启httpd 服务

[root@mode-6log]# pwd     #
已经在 /app/log 目录

/app/log
[root@mode-6log]# ll      #
日志路径已修改,但服务未重启

total12
drwx------2 root root 12288 Nov 25 09:25 lost+found
[root@mode-6~]# /etc/init.d/httpd restart     #
重启服务

Stoppinghttpd:                                            [  OK  ]
Startinghttpd: httpd: Could not reliably determine the server's fully qualified domainname, using mode-6.5 for ServerName
                                                          [  OK  ]
[root@mode-6log]# ll                      #
重启后查看,存在日志信息

total12
-rw-r--r--1 root root     0 Nov 25 10:23
access_log
drwx------2 root root 12288 Nov 25 09:25 lost+found

6、写满日志信息

         可以通过前台不断的访问,或者使用程序脚本访问

         1、前台访问,后台的日志信息

[oldboy@mode-6log]$ tail -Faccess_log



         2、写脚本自己访问【可以快速占满磁盘空间】

[oldboy@mode-6~]$ for n in`seq 100000`; do curl -s 10.1.38.20 > /dev/null ; done
         3、查看磁盘信息

[root@mode-6log]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       7.2G 2.9G  4.0G  42% /
tmpfs           242M     0 242M   0% /dev/shm
/dev/sda1       194M  34M  151M  19% /boot
/dev/sdc         73K  73K     0 100% /app/log
 

文件删除原理



         上图就是文件删除原理。总的来说需要满足以下条件。

         1、文件硬链接数为0。    就是删除文件源文件和硬链接文件

         2、没有进程占用该文件。        引用计数为0

         这样就可说你已经删除了文件,但是可以恢复。如果是彻底删除的话那么要满足:

         3、删除的文件被覆盖或者文件系统回收。   这是就彻底删除了,怎么也找不回来了。

 

 

文件删除1

         第一种文件删除是大家都知道的,就是直接删除。

[root@mode-6log]# ll
total71
-rw-r--r--1 root root 59316 Nov 25 11:09 access_log
drwx------2 root root 12288 Nov 25 09:25 lost+found
[root@mode-6log]# rm -f  access_log
[root@mode-6log]# ll
total12
drwx------2 root root 12288 Nov 25 09:25 lost+found
[root@mode-6log]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       7.2G 2.9G  4.0G  42% /
tmpfs           242M     0 242M   0% /dev/shm
/dev/sda1       194M  34M  151M  19% /boot
/dev/sdc         73K  73K     0 100% /app/log
         很明显,虽然文件删了但是磁盘空间却没有被释放。

         根据上述原因得出:有进程正在读取该文件。

         这时你只需要重启服务即可,如果重启服务还没有释放磁盘空间资源,那么就可能是你有进程正在读取这文件。如使用了如下命令。

[oldboy@mode-6log]$ tail -f  access_log
 

 

文件删除2

         第一种方法虽然简单,但是如果是在生产环境,并且当时还是白天。这时你不可能顺便重启服务,因为后果可能会很严重。

         那么这时我们应该如果清除这些日志信息呢。不停止服务,并且清除这些文件信息,释放磁盘空间资源。操作如下:

 

[root@mode-6log]# ll
total12
-rw-r--r--1 root root 59316 Nov 25 11:19 access_log
drwx------2 root root 12288 Nov 25 09:25 lost+found
[root@mode-6log]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       7.2G 2.9G  4.0G  42% /
tmpfs           242M     0 242M   0% /dev/shm
/dev/sda1       194M  34M  151M  19% /boot
/dev/sdc         73K  73K     0 100% /app/log
         其实也简单,只需要一个命令即可

[root@mode-6log]# > access_log  或者 echo '' >access_log
   ★★★★★
[root@mode-6log]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       7.2G 2.9G  4.0G  42% /
tmpfs           242M     0 242M   0% /dev/shm
/dev/sda1       194M  34M  151M  19% /boot
/dev/sdc         73K  15K   54K  22% /app/log
         这样就行了。简单吧!这样也不用重启服务。

 

         所以遇见这种问题,不要先想着直接删除,先看看有没有服务会使用这个文件。

         删除原则,如果文件修改日期是在今天之前的可以直接删除;如果修改日期是今天,那么最好使用  第二种删除方法。防止出现删除后没有释放空间资源,到时候就只有重启服务了。

 

 

         没想到写了用了两个半小时才搞定。超出预计时间啊!

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: