|
谢谢你的指点。
最初由 Yong Huang 发布
After the file is removed while the file is held open by a process, lsof -p should still show the file with a word 'deleted' beside it. Just try
touch qq
perl -e 'while(<> {sleep 1000}' qq &
lsof -p $!
rm qq
lsof -p $!
做了测试稍微改写了一下
- tune2fs -l /dev/hda1
- echo 1 > qq
- tune2fs -l /dev/hda1
- perl -e 'while(<>){sleep 100;}' qq &
- lsof -p $!
- \rm qq
- tune2fs -l /dev/hda1
- lsof -p $!
- ls -l qq
复制代码
tune2fs -l /dev/hda1
tune2fs 1.32 (09-Nov-2002)
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: 16169f50-17e7-42f5-a4a0-72311f6a0e3b
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 26104
Block count: 104391
Reserved block count: 5219
Free blocks: 91898
Free inodes: 26066
First block: 1
Block size: 1024
Fragment size: 1024
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
Filesystem created: Tue Jul 13 00:51:55 2004
Last mount time: Tue Jul 19 08:59:20 2005
Last write time: Tue Jul 19 08:59:20 2005
Mount count: 13
Maximum mount count: -1
Last checked: Tue Jul 13 00:51:55 2004
Check interval: 0 (<none>
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal UUID: <none>
Journal inode: 8
Journal device: 0x0000
First orphan inode: 0
[root@ta-ntmadm root]# echo 1 > qq
[root@ta-ntmadm root]# tune2fs -l /dev/hda1
tune2fs 1.32 (09-Nov-2002)
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: 16169f50-17e7-42f5-a4a0-72311f6a0e3b
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 26104
Block count: 104391
Reserved block count: 5219
Free blocks: 91898
Free inodes: 26066
First block: 1
Block size: 1024
Fragment size: 1024
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
Filesystem created: Tue Jul 13 00:51:55 2004
Last mount time: Tue Jul 19 08:59:20 2005
Last write time: Tue Jul 19 08:59:20 2005
Mount count: 13
Maximum mount count: -1
Last checked: Tue Jul 13 00:51:55 2004
Check interval: 0 (<none>
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal UUID: <none>
Journal inode: 8
Journal device: 0x0000
First orphan inode: 0
[root@ta-ntmadm root]# perl -e 'while(<> {sleep 100;}' qq &
[3] 1614
[root@ta-ntmadm root]# lsof -p $!
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 1614 root cwd DIR 3,3 4096 294337 /root
perl 1614 root rtd DIR 3,3 4096 2 /
perl 1614 root txt REG 3,3 12700 1128557 /usr/bin/perl
perl 1614 root mem REG 3,3 12544 523319 /lib/libutil-2.3.2.so
perl 1614 root mem REG 3,3 23388 523279 /lib/libcrypt-2.3.2.so
perl 1614 root mem REG 3,3 1567768 964778 /lib/tls/libc-2.3.2.so
perl 1614 root mem REG 3,3 97424 964782 /lib/tls/libpthread-0.60.so
perl 1614 root mem REG 3,3 212884 964780 /lib/tls/libm-2.3.2.so
perl 1614 root mem REG 3,3 14868 523281 /lib/libdl-2.3.2.so
perl 1614 root mem REG 3,3 90924 523285 /lib/libnsl-2.3.2.so
perl 1614 root mem REG 3,3 2524941 2730864 /usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
perl 1614 root mem REG 3,3 4431 229832 /etc/libcwait.so
perl 1614 root mem REG 3,3 103840 523268 /lib/ld-2.3.2.so
perl 1614 root 0u CHR 136,0 2 /dev/pts/0
perl 1614 root 1u CHR 136,0 2 /dev/pts/0
perl 1614 root 2u CHR 136,0 2 /dev/pts/0
perl 1614 root 3r REG 3,3 2 295569 /root/qq
[root@ta-ntmadm root]# \rm qq
[root@ta-ntmadm root]# tune2fs -l /dev/hda1
tune2fs 1.32 (09-Nov-2002)
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: 16169f50-17e7-42f5-a4a0-72311f6a0e3b
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 26104
Block count: 104391
Reserved block count: 5219
Free blocks: 91898
Free inodes: 26066
First block: 1
Block size: 1024
Fragment size: 1024
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
Filesystem created: Tue Jul 13 00:51:55 2004
Last mount time: Tue Jul 19 08:59:20 2005
Last write time: Tue Jul 19 08:59:20 2005
Mount count: 13
Maximum mount count: -1
Last checked: Tue Jul 13 00:51:55 2004
Check interval: 0 (<none>
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal UUID: <none>
Journal inode: 8
Journal device: 0x0000
First orphan inode: 0
[root@ta-ntmadm root]# lsof -p $!
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 1614 root cwd DIR 3,3 4096 294337 /root
perl 1614 root rtd DIR 3,3 4096 2 /
perl 1614 root txt REG 3,3 12700 1128557 /usr/bin/perl
perl 1614 root mem REG 3,3 12544 523319 /lib/libutil-2.3.2.so
perl 1614 root mem REG 3,3 23388 523279 /lib/libcrypt-2.3.2.so
perl 1614 root mem REG 3,3 1567768 964778 /lib/tls/libc-2.3.2.so
perl 1614 root mem REG 3,3 97424 964782 /lib/tls/libpthread-0.60.so
perl 1614 root mem REG 3,3 212884 964780 /lib/tls/libm-2.3.2.so
perl 1614 root mem REG 3,3 14868 523281 /lib/libdl-2.3.2.so
perl 1614 root mem REG 3,3 90924 523285 /lib/libnsl-2.3.2.so
perl 1614 root mem REG 3,3 2524941 2730864 /usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
perl 1614 root mem REG 3,3 4431 229832 /etc/libcwait.so
perl 1614 root mem REG 3,3 103840 523268 /lib/ld-2.3.2.so
perl 1614 root 0u CHR 136,0 2 /dev/pts/0
perl 1614 root 1u CHR 136,0 2 /dev/pts/0
perl 1614 root 2u CHR 136,0 2 /dev/pts/0
perl 1614 root 3r REG 3,3 2 295569 /root/qq (deleted)
[root@ta-ntmadm root]# ls -l qq
ls: qq: No such file or directory
[root@ta-ntmadm root]#
ls reads inodes while df and du read filesystem superblock. That's the reason why there's space usage discrepancy.
Others already explained how a process continues to read/write on a deleted file.
[quote]
下面的还没有试验,抽空试试看。
I don't have lsof to test with for now. But I think you can always find the process that opens a deleted file by: lsof | grep deleted. If it shows SMON, then consider doing something about SMON, such as setting an event to prevent SMON from cleaning up temporary segment (if you really think it's necessary). But waking it up probably does nothing, since SMON is already awake.
You can always monitor the activity of a process including SMON by looking at v$session_wait. If it's rolling back transactions, you can predict how long it will take by looking at v$transaction.
Yong Huang [/QUOTE] |
|