免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3428 | 回复: 1
打印 上一主题 下一主题

磁盘空间满故障排除 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-03 14:39 |只看该作者 |倒序浏览
磁盘空间满故障排除

磁盘空间满一般情况下使用du可以快速定位到那个目录占用了大量的磁盘空间。
这里主要讲两个使用du无法查看的情况。

# 现象/mnt分区磁盘使用率达到100%
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              97G  1.5G   90G   2% /
/dev/sda1             190M   12M  169M   7% /boot
none                  2.0G     0  2.0G   0% /dev/shm
/dev/sda3              97G  6.3G   85G   7% /usr
/dev/sda6             191G  408M  181G   1% /var
tmpfs                 300M  300M     0 100% /mnt
/dev/loop0            190M  106M   74M  60% /mnt/foo
# 进入/mnt目录使用du查看/mnt下的磁盘使用率
# cd /mnt
# du -sh *
101M    bar
101M    foo

# troubleshooting
# 解决思路
# 有两种情况会干扰du查看磁盘空间使用率
# 1、删除的文件使用du无法查看
# 2、磁盘分区的某一个目录挂载了另外一个分区时,du查看到的磁盘空间为挂载分区后的目录空间。
# 在了解上面两种情况后,解决这个问题会比较简单。
# 在生产环境中某一程序的日志文件被删除这一情况发生的几率会大些。

# 故障排除
# 1、查找被删除文件
# 被删除文件,在写程序未退出的情况下,被删除文件同样会占用磁盘空间。

# lsof -n | head -1
COMMAND     PID     USER   FD      TYPE     DEVICE     SIZE       NODE NAME
# lsof -n /mnt | grep deleted
foo.sh  32593 root    1w   REG   0,18 104538112 981982 /mnt/test.out (deleted)
foo.sh  32593 root    2w   REG   0,18 104538112 981982 /mnt/test.out (deleted)

# 杀掉写文件的程序,磁盘空间会自然释放
# kill 32593
# df -h /mnt
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 300M  201M  100M  67% /mnt

# 2、查看分区挂载情况
# 因为分区的目录下挂载有其它分区,被挂载分区的目录本身容量无法被查看,所以umount掉挂载分区的目录后将可正常查看此目录下文件所占用的容量。
# cd /mnt
# du -sh *
101M    bar
101M    foo #此容量为目录挂载分区后的新分区容量
# umount /mnt/foo
# du -sh *
21M     bar
201M    foo #此容量为目录所占用磁盘满分区的容量

---------------------------------------------------------------------------

测试环境搭建过程

# 挂载300M的内存tmpfs到/mnt目录
# mount -t tmpfs -o size=300m tmpfs /mnt
# cd /mnt && mkdir foo bar
# 先生成两个文件到foo bar下,占用一定的磁盘空间
# dd if=/dev/zero of=foo/file.out bs=1M count=100
# dd if=/dev/zero of=bar/file.out bs=1M count=100   
# 查看磁盘当时的使用情况
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              97G  1.5G   90G   2% /
/dev/sda1             190M   12M  169M   7% /boot
none                  2.0G     0  2.0G   0% /dev/shm
/dev/sda3              97G  6.3G   85G   7% /usr
/dev/sda6             191G  408M  181G   1% /var
tmpfs                 300M  201M  100M  67% /mnt
# 使用空文件建立一个文件系统
# cd /root/shell
# 生成200M的空文件
# dd if=/dev/zero of=foo.img bs=1M count=200
# 建立一个loop devices
# losetup /dev/loop0 foo.img
# 在loop devices上创建一个ext3文件系统
# mke2fs -j -c /dev/loop0 200000
# 使用/mnt/foo目录挂载/dev/loop0
# mount -t ext3 /dev/loop0 /mnt/foo
# 在/mnt/foo/目录产生一个测试文件file.out
# dd if=/dev/zero of=/mnt/foo/file.out bs=1M count=100
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              97G  1.5G   90G   2% /
/dev/sda1             190M   12M  169M   7% /boot
none                  2.0G     0  2.0G   0% /dev/shm
/dev/sda3              97G  6.3G   85G   7% /usr
/dev/sda6             191G  408M  181G   1% /var
tmpfs                 300M  201M  100M  67% /mnt
/dev/loop0            190M  106M   74M  60% /mnt/foo
# /mnt/foo目录挂载方式伪装已经完成

# 删除文件伪装
# 编写一个死循环产生测试文件
# cat /root/shell/foo.sh
#!/bin/bash
# set -x
foo=$(seq 1 500)

while :
do
    echo $foo
done
# 生成一个测试文件test.out占用/mnt目录的空间
# nohup /root/shell/foo.sh >/mnt/test.out 2>&1 &
# 删除测试文件
# \rm /mnt/test.out
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              97G  1.5G   90G   2% /
/dev/sda1             190M   12M  169M   7% /boot
none                  2.0G     0  2.0G   0% /dev/shm
/dev/sda3              97G  6.3G   85G   7% /usr
/dev/sda6             191G  408M  181G   1% /var
tmpfs                 300M  300M     0 100% /mnt
/dev/loop0            190M  106M   74M  60% /mnt/foo

论坛徽章:
0
2 [报告]
发表于 2008-11-03 18:58 |只看该作者
学习了谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP