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

linux删除文件后没有释放空间

2014-04-17 16:03 357 查看
linux下删除文件后没有释放空间
今天发现一台服务器的home 空间满了,于是要清空无用的文件,当我删除文件后,发现可用空间没有变化
OS :centos4.7
现象:
发现当前磁盘空间使用情况:
[根@ ticketb~]#df-h来
文件系统容量已用可用已用%挂载点
/ dev/sda1的9.81亿英镑203M 729M 22%/
无16G 16G 0 0%的/ dev / shm的
/ dev/sda9 2.9G 37M 2.7G 2%/ tmp目录
/ dev/sda7 4.9G 1.9G 2.7G 42%的/ usr
/ dev/sda8 2.9G 145M 2.6G 6%的/ var
的/ dev / mapper /下vghome-lvhome
20G 19G 11M 100%/家庭
/ dev/mapper/vgoradata- lvoradata
144G 48G 90G 35%/ u01/oradata
为/ dev / mapper /下vgbackup-lvbackup
193G 7.8G 175G 5%/ u01/backup
通过下面的命令找到无用的文件,然后删除
[根@ ticketb~]#查找/主页/甲骨文/管理/ dbticb / UDUMP /名称“dbticb_ * TRC。” - 的mtime +50 | xargs的RM-RF
然后在查看磁盘空间使用情况,发现没有/家居空间没有变化
[根@ ticketb~]#df-h来
文件系统容量已用可用已用%挂载点
/ dev/sda1的9.81亿英镑203M 729M 22%/
无16G 16G 0 0%的/ dev / shm的
/ dev/sda9 2.9G 37M 2.7G 2%/ tmp目录
/ dev/sda7 4.9G 1.9G 2.7G 42%的/ usr
/ dev/sda8 2.9G 145M 2.6G 6%的/ var
的/ dev / mapper /下vghome-lvhome
20G 19G 11M 100%/家庭
/ dev/mapper/vgoradata- lvoradata
144G 48G 90G 35%/ u01/oradata
为/ dev / mapper /下vgbackup-lvbackup
193G 7.8G 175G 5%/ u01/backup
这个郁闷啊,明明删除文件了,怎么空间没有被释放啊,rm 命令应该是直接删除啊,在查看下/home 下还有什么占用空间
[根@ ticketb~]#DU-H -最大深度= 1 /家居
16K /家/的lost + found
2.6G /家用/ oracle的
2.6G /家
可这里显示空间已经释放了啊,于是谷歌下,
未释放磁盘空间原因:
在Linux 或者Unix 系统中,通过rm 或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink). 然而如果文件是被
打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是oracle 的告警log 文件
删除的时候文件应该正在被使用
解决方法
首先获得一个已经被删除但是仍然被应用程序占用的文件列表,如下所示:
[根@ ticketb~]#lsof的| grep的删除
oracle的12639 oracle的5瓦特REG 253,0 648 215907 / home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc(删除)
甲骨文12639 oracle的6瓦特REG 253,0 16749822091 215748 /家/ ORACLE /管理/ dbticb / bdump / alert_dbticb.log(删除)
甲骨文12639 oracle的7U REG 253,0 0 36282 / home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb(删除)
甲骨文12639 oracle的8瓦特REG 253,0 16749822091 215748 /家居/ ORACLE /管理/ dbticb / bdump / alert_dbticb.log(删除)
甲骨文12641 oracle的5瓦特REG 253,0 648 215907 / home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc(删除)
oracle的12641 oracle的6瓦特REG 253,0 16749822091 215748 /家居/ ORACLE /管理/ dbticb / bdump / alert_dbticb.log(删除)



甲骨文23492 oracle的6瓦特REG 253,0 16749822091 215748 /家居/ ORACLE /管理/ dbticb / bdump / alert_dbticb.log(删除)
甲骨文23492 oracle的7U REG 253,0 0 36282 / home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb(删除)
甲骨文23492 oracle的8瓦特REG 253,0 16749822091 215748 /家/ ORACLE /管理/ dbticb / bdump / alert_dbticb.log(删除)
甲骨文23494 oracle的10U REG 253,0 0 36307 / home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb(删除)

从输出结果可以看到/home/oracle/admin/dbticb/bdump/alert_dbticb.log 还被使用,未被释放空间
如何让进程释放呢?
一种方法是kill 掉相应的进程,或者停掉使用这个文件的应用,让os 自动回收磁盘空间我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大
当linux 打开一个文件的时候,Linux 内核会为每一个进程在/proc/ 『/proc/nnnn/fd/ 目录(nnnn 为pid )』建立一个以其pid
为名的目录用来保存进程的相关信息,而其子目录fd 保存的是该进程打开的所有文件的fd (fd :file描述符)。kill 进程是通过截断proc 文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方
式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题
所以我还是采用停应用来解决
重启oracle的数据库,发现的/ home / oracle的/管理/ dbticb / bdump / alert_dbticb.log 对应的空间被释放
在查看磁盘空间的使用情况,发现空间已经回收了
[根@ ticketb~]#df-h来
文件系统容量已用可用已用%挂载点
/ dev/sda1的9.81亿英镑203M 729M 22%/
无16G 16G 0 0%的/ dev / shm的
/ dev/sda9 2.9G 37M 2.7G 2%/ tmp目录
/ dev/sda7 4.9G 1.9G 2.7G 42%的/ usr
/ dev/sda8 2.9G 145M 2.6G 6%的/ var
的/ dev / mapper /下vghome-lvhome
20G 16G 2.6G 15%/家
的/ dev / mapper /下vgoradata - lvoradata
144G 48G 90G 35%/ u01/oradata
为/ dev / mapper /下vgbackup-lvbackup
193G 7.8G 175G 5%/ u01/backup
OK,问题解决,然后做下收尾工作即可
-------------------------------------------------- -----------------------------------------------
学习下lsof的命令
lsof的全名打开的列表files ,也就是列举系统中已经被打开的文件。我们都知道,linux 环境中,任何事物都是文件,
设备是文件,目录是文件,甚至sockets 也是文件。所以,用好lsof 命令,对日常的linux 管理非常有帮助。
lsof的是linux下最常用的命令之一,通常的输出格式为:
引用
COMMAND PID USER FD型器件尺寸的节点名称
常见包括如下几个字段:更多的可见说明书。1 、COMMAND
默认以9 个字符长度显示的命令名称。可使用+c 参数指定显示的宽度,若+c 后跟的参数为零,则显示命令的全名
2、PID :进程的ID 号
3、PPID
父进程的IP 号,默认不显示,当使用-R 参数可打开。
4、PGID
进程组的ID 编号,默认也不会显示,当使用-g 参数时可打开。
5、USER
命令的执行UID 或系统中登陆的用户名称。默认显示为用户名,当使用-l 参数时,可显示UID 。
6、FD
是文件的File描述符的数量,或者如下的内容:
(这里很难翻译对应的意思,保留英文)
引用
CWD当前的工作目录;
LNN库引用(AIX);
JLD监狱目录(FreeBSD的);
LTX共享库文本(代码和数据);
。MXX十六进制内存映射型号码xx
M86 DOS合并映射文件;
MEM内存映射文件;
mmap的内存映射设备;
PD父目录;
RTD根目录;
TR内核跟踪文件(OpenBSD的);
TXT文本的程序(代码和数据);
8086 VP /九映射文件;

文件的文件描述符数显示模式有:
引用
R表示读访问;
w代表写访问;
u代表读写访问;
N代表未知类型的的Solaris NFS锁;
r代表对文件的一部分读锁,
R表示整个文件的读锁;
w代表对文件的一部分的写锁,
W为整个文件的写锁,
U代表一个读写任意长度的锁;
U表示未知类型的锁,
x表示该文件的一部分在SCO OpenServer Xenix的锁,
X,支持整个文件上的SCO OpenServer Xenix的锁;
空间,如果没有锁。

7 ,TYPE引用
的IPv4 IPv4 的包;
IPv6 使用IPv6 格式的包,即使地址是IPv4 的,也会显示为IPv6 ,而映射到IPv6 的地址;
DIR 目录
LINK 链接文件详情请看说明书中更多的注释。
8 ,设备
使用特殊字符,块special 表示的设备号
9、SIZE
文件的大小,如果不能用大小表示的,会留空。使用-s 参数控制。
10、NODE
本地文件的node 码,或者协议,如TCP 等
11、NAME
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等
常用示例:
1,显示开启文件/ home/oracle/10.2.0/db_1/bin/tnslsnr 的进程
[根@ SVR-DB-测试~]#lsof的/ home/oracle/10.2.0/db_1/bin/tnslsnr
COMMAND PID USER FD型器件尺寸的节点名称
TNSLSNR 3520甲骨文TXT REG 253,5 431062 11408866 /家居/ ORACLE / 10.2.0/db_1/bin/tnslsnr
2,知道22 端口现在运行什么程序
[根@ SVR-DB-测试~]#lsof的-I:22
COMMAND PID USER FD型器件尺寸的节点名称
sshd的3101根3U IPv6的8670 TCP *:SSH(LISTEN)
sshd的4545根3U的IPv6 4237972 TCP 203.aibo.com :SSH->双赢avbmq9e8ka7.gdgg.local:nsjtp-CTRL(ESTABLISHED)
3,显示的init 进程现在打开的文件
[根@ SVR-DB-测试~]#lsof的-C初始化
命令的PID USER FD型器件尺寸节点名称
的init 1根CWD DIR 253,0 4096 2 /
初始化1根RTD DIR 253,0 4096 2 /
初始化1根TXT REG 253,0 43496 524446 / sbin目录/ init的
初始化1根灰熊REG 253,0 130448 917826 / lib64/ld-2.5.so
的init 1根灰熊REG 253,0 1678480 917827 / lib64/libc-2.5.so
的init 1根纪念品REG 253,0 23520 917686 / lib64/libdl-2.5.so
的init 1根灰熊REG 253,0 247528 917844 / lib64/libsepol.so.1
的init 1根灰熊REG 253,0 95480 917845 / lib64/libselinux.so.1
初始化1根10U FIFO 0,16 2311的/ dev / initctl的
4, 看进程号为1 的进程打开了哪些文件
[根@ SVR-DB-测试~]#lsof的-P 1
COMMAND PID USER FD型器件尺寸节点名称
的init 1根CWD DIR 253,0 4096 2 /
初始化1根RTD DIR 253,0 4096 2 /
初始化1根TXT REG 253,0 43496 524446 / sbin目录/ init的
初始化1根灰熊REG 253,0 130448 917826 / lib64/ld-2.5.so
的init 1根灰熊REG 253,0 1678480 917827 / lib64/libc-2.5.so
的init 1根纪念品REG 253,0 23520 917686 / lib64/libdl-2.5.so
的init 1根灰熊REG 253,0 247528 917844 / lib64/libsepol.so.1
的init 1根灰熊REG 253,0 95480 917845 / lib64/libselinux.so.1
初始化1根10U FIFO 0,16 2311的/ dev / initctl的
5, 显示归属3520 的进程情况
[根@ SVR-DB-测试~]#lsof的-G 3520
COMMAND PID PGID用户FD型器件尺寸的节点名称
TNSLSNR 3520 3520甲骨文CWD DIR 253,5 4096 11059201 /家庭/ oracle的
TNSLSNR 3520 3520甲骨文RTD DIR 253,0 4096 2 /
TNSLSNR 3520 3520甲骨文TXT REG 253,5 431062 11408866 / home/oracle/10.2.0/db_1/bin/tnslsnr
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 130448 917826 / lib64/ld-2.5.so
TNSLSNR 3520 3520预言灰熊REG 253,0 1678480 917827 / lib64/libc-2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 23520 917686 / lib64/libdl-2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 615136 917834 / lib64/libm- 2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 141208 917829 / lib64/libpthread-2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 109824 917839 / lib64/libnsl-2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 20706622 11405436 / home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 3803097 11410641 / home/oracle/10.2.0/db_1/lib/libnnz10.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 83493 11407251 / home/oracle/10.2.0/db_1/lib/libons.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,0 53880 917532 / lib64/libnss_files-2.5.so
TNSLSNR 3520 3520甲骨文纪念品REG 253 5 8545 11407615 / home/oracle/10.2.0/db_1/lib/libskgxn2.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 513705 11410332 / home/oracle/10.2.0/db_1/lib/libocrutl10.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 636161 11410330 / home/oracle/10.2.0/db_1/lib/libocr10.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 657825 11410331 / home/oracle/10.2.0/db_1/lib/libocrb10。所以
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 1745769 11410365 / home/oracle/10.2.0/db_1/lib/libhasgen10.so
TNSLSNR 3520 3520甲骨文纪念品REG 253,5 61985 11410366 / home/oracle/10.2.0/db_1 / lib/libclsra10.so
TNSLSNR 3520 3520甲骨文0U CHR 1,3 2553 / dev / null的
TNSLSNR 3520 3520甲骨文1U CHR 1,3 2553 / dev / null的
TNSLSNR 3520 3520甲骨文2U CHR 1,3 2553 / dev / null的
TNSLSNR 3520 3520甲骨文3瓦特REG 253,5 318853012 11633459 / home/oracle/10.2.0/db_1/network/log/listener.log
TNSLSNR 3520 3520甲骨文4R FIFO 0,6 15661管
TNSLSNR 3520 3520甲骨文5R REG 253,5 11776 11410579 /家/ oracle/10.2.0/db_1/network/mesg/nlus.msb
TNSLSNR 3520 3520甲骨文6R REG 253,5 46592 11407160 / home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
TNSLSNR 3520 3520甲骨文7瓦特FIFO 0,6 15662管
TNSLSNR 3520 3520甲骨文8U的IPv4 15665 TCP 203.aibo.com:恩库贝-LM(LISTEN)
TNSLSNR 3520 3520甲骨文9U UNIX 0xffff81021b7d6980 15666 / var / tmp中/ .oracle /秒#3520.1
TNSLSNR 3520 3520甲骨文10U UNIX 0xffff81021b7d66c0 15668 / var / tmp中/ .oracle /秒#3520.2
6.依照文件夹/home/oracle 来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件
[根@ SVR-DB-测试~]#lsof的+ D的/ home / oracle的
命令的PID USER FD型器件尺寸的节点名称
TNSLSNR 3520甲骨文CWD DIR 253,5 4096 11059201 /家庭/甲骨文
7. 打开/home/oracle 文件夹以及其子目录搜寻,用来显示目录下被进程开启的文件
[根@ SVR-DB-测试~]#lsof的+ D的/ home / oracle的
显示内容太多了,不显示了
8,lsof的,我 用以显示符合条件的进程情况
语法:lsof的-I [46] [协议] [@主机|地址hostaddr] [:服务|口]
46 - > IPv4或IPv6协议 - > TCP或UDP主机名 - > Internet主机名地址hostaddr - > IPv4的位置服务- >在/ etc /服务中的 服务名称(可以不只一个)端口- > 端口号 (可以不只一个)
例:
[根@ SVR-DB-测试~]#lsof的,我 tcp@192.168.2.245:1521 -n的
命令的PID USER FD型器件尺寸的节点名称
oracle的15633 oracle的16U的IPv4 4069605 TCP 192.168.2.203:31580 - > 192.168.2.245:恩库贝-LM(ESTABLISHED)

[根@ SVR-DB-测试~]#lsof的,我 tcp@192.168.2.245:1521
COMMAND PID USER FD型器件尺寸的节点名称
oracle的15633 oracle的16U的IPv4 4069605 TCP 203.aibo.com:31580 - > 192.168.2.245:恩库贝-LM(ESTABLISHED)
lsof的-N 不将IP 转换为主机名,缺省是不加上-n的参数
9。 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)
[根@ SVR-DB-测试~]#lsof的-U甲骨文

[根@ SVR-DB-测试~]#lsof的-U 0
10。 仅打印进程,方便外壳脚本调用[根@ SVR-DB-测试~]#lsof的-TC的sshd
3101
4545

关注:
进程调试命令:桁架,使用strace 和ltrace
进程无法启动,软件运行速度突然变慢,程序的"SegmentFault" 等等都是让每个Unix 系统用户头痛的问题,而这些问题都可以通过使用truss 、strace 和ltrace 这三个常用的调试工具来快速诊断软件的" 疑难杂症" 。

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