过期罐头电脑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8670|回复: 1
收起左侧

Linux系统下硬盘问题的一些解决方法汇总

[复制链接]
切月 2014-12-17 08:54:40 | 显示全部楼层

        #1 - 错误: 设备上无剩余空间
        当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中,我运行fallocate命令然后我的系统就会提示磁盘空间已经耗尽:
$ fallocate -l 1G test4.imgfallocate: test4.img: fallocate failed: No space left on device        第一步是运行df命令来查看一个有分区的文件系统的总磁盘空间和可用空间的信息:
$ df        或者试试可读性比较强的输出格式:
$ df -h        部分输出内容:
Filesystem Size Used Avail Use% Mounted on/dev/sda6 117G 54G 57G 49% /udev 993M 4.0K 993M 1% /devtmpfs 201M 264K 200M 1% /runnone 5.0M 0 5.0M 0% /run/locknone 1002M 0 1002M 0% /run/shm/dev/sda1 1.8G 115M 1.6G 7% /boot/dev/sda7 4.7G 145M 4.4G 4% /tmp/dev/sda9 9.4G 628M 8.3G 7% /var/dev/sda8 94G 579M 89G 1% /ftpusers/dev/sda10 4.0G 4.0G 0 100% /ftpusers/tmp        使用df命令输出可以清楚地发现,在 /dev/sda10 分区下总共4.0Gb的空间被全部写满了。
        修复磁盘写满的问题
        1.用gzip,bzip2或tar命令压缩未压缩的日志和其它文件:
gzip /ftpusers/tmp/*.logbzip2 /ftpusers/tmp/large.file.name        2.在类UNIX系统中用rm命令删除不想要的文件:
rm -rf /ftpusers/tmp/*.bmp        3.用rsync命令移动文件至其它系统或外置硬盘:
rsync --remove-source-files -azv /ftpusers/tmp/*.mov /mnt/usbdisk/rsync --remove-source-files -azv /ftpusers/tmp/*.mov server2:/path/to/dest/dir/        4.在类UNIX系统中找出最占磁盘空间的目录或文件:
du -a /ftpusers/tmp | sort -n -r | head -n 10du -cks * | sort -rn | head        5.清空指定文件。这招对日志文件很有效:
truncate -s 0 /ftpusers/ftp.upload.log### bash/sh等 ##>/ftpusers/ftp.upload.log## perl ##perl -e'truncate "filename", LENGTH'        6.在Linux和UNIX中找出并删除显示着但已经被删除的大文件:
## 基于Linux/Unix/OSX/BSD等系统 ##lsof -nP | grep '(deleted)'## 只基于Linux ##find /proc/*/fd -ls | grep '(deleted)'        清空它:
## 基于Linux/Unix/OSX/BSD等所有系统 ##> "/path/to/the/deleted/file.name"## 只基于Linux ##> "/proc/PID-HERE/fd/FD-HERE"        #2 - 文件系统是只读模式吗?
        当你尝试新建或保存一个文件时,你可能最终得到诸如以下的错误:
$ cat > file-bash: file: Read-only file system        运行mount命令来查看被挂载的文件系统是否处于只读状态:
$ mount$ mount | grep '/ftpusers'        在基于Linux的系统中要修复这个问题,只需将这个处于只读状态的文件系统重新挂载即可:
# mount -o remount,rw /ftpusers/tmp        (LCTT 译注:假如硬盘由于硬件故障而 fallback 到只读模式,建议不要强迫变回读写模式,而是赶快替换硬盘)
        另外,我是这样用rw模式重新挂载FreeBSD 9.x服务器的根目录的:
# mount -o rw /dev/ad0s1a /        #3 - Am I running out of inodes?
        有时候,df命令能显示出磁盘有空余的空间但是系统却宣称文件系统已经写满了。此时你需要.用以下命令来检查能在文件系统中识别文件及其属性的索引节点:
$ df -i$ df -i /ftpusers/        部分输出内容:
Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda8 6250496 11568 6238928 1% /ftpusers        如上 /ftpusers 下有合计62,50,496KB大小的索引节点但是只有11,568KB被使用。你可以在 /ftpusers 位置下另外创建62,38,928KB大小的文件。假如你的索引节点100%被使用了,试试看以下的选项:
找出不想要的文件并删除它,或者把它移动到其它服务器上。找出不想要的大文件并删除它,或者把它移动到其它服务器上。        (LCTT 译注:假如一个分区存储了太多的小文件,会出现 inode 用完而存储扇区还有空闲的状况,这种状况下要么清空小文件或在不需要.独立访问的状况下将它们打包成一个大文件;要么将数据保存好之后重新分区,并设置分区的 -t news 属性,增加 inode 分配)
        #4 - 我的硬盘驱动器宕了吗?
        日志文件中的输入/输出错误(例如 /var/log/messages)说明硬盘出了一些问题并且可能已经失效,你可以用smartctl命令来查看硬盘的错误,这是一个在类UNIX系统下控制和监控硬盘状态的一个命令。语法如下:
smartctl -a /dev/DEVICE# 在Linux服务器下检查 /dev/sda smartctl -a /dev/sda        你也可以用"Disk Utility"这个软件来取得同样的信息。
         1J1131048-0.jpg
        图 01: Gnome磁盘工具(Applications > System Tools > Disk Utility)
        注意: 不要对S.M.A.R.T.工具希冀太高,它在某些情况下无法工作,我们要定期做备份。
        #5 - 我的硬盘驱动器和服务器是不是太热了?
        高温会惹起服务器低效,所以你需要.把服务器和磁盘维持在一个平稳恰当的温度,高温甚至能导致服务器宕机或损坏文件系统和磁盘。用hddtemp或smartctl功能,通过从支持S.M.A.R.T.功能的硬盘上读取数据的方式,从而查出你的Linux或基于UNIX系统上的硬盘温度。只有现代硬驱动器有温度传感器。hddtemp功能也支持从SCSI驱动器读取S.M.A.R.T.信息。hddtemp能作为一个简单的命令行工具或守护程序来从所有服务器中获取信息:
hddtemp /dev/DISKhddtemp /dev/sg0        部分输出内容如下:
         1J1135Z6-1.jpg
        图 02: hddtemp正在运行
        你也可以像下面显示的那样使用smartctl命令:
smartctl -d ata -A /dev/sda | grep -i temperature        我怎么获取CPU的温度
        你可以使用Linux硬件监控工具,例如像用基于Linux系统的lm_sensor功能来获取CPU温度:
sensors        Debian服务器的部分输出内容:
         1J11314N-2.jpg
        图 03: sensors命令提供了一台Linux计算机的CPU中心温度和其它信息
        #6 - 处理损坏的文件系统
        服务器上的文件系统可能会由于硬件重启或一些其它的错误比方坏的扇区而损坏。你可以用fsck命令来修复损坏的文件系统:
umount /ftpusersfsck -y /dev/sda8        来看看怎么应对Linux文件系统故障的更多信息。
        #7 - 处理Linux中的软阵列
        输入以下命令来查看Linux软阵列的最近状态:
## 取得 /dev/md0 上磁盘阵列的具体内容 ##mdadm --detail /dev/md0## 查看状态 ##cat /proc/mdstatwatch cat /proc/mdstat        部分输出内容:
         1J1132I8-3.jpg
        图 04: 查看Linux软阵列状态命令
        你需要.把有故障的硬件驱动器改换掉,别删错了。本例中,我改换了 /dev/sdb (RAID 6中的第二个硬件驱动器)。没必要依托离线存储文件来修复Linux上的磁盘阵列,由于这只在你的服务器支持热插拔硬盘的状况下才能工作:
## 从一个md0阵列中删除磁盘 ##mdadm --manage /dev/md0 --fail /dev/sdb1mdadm --manage /dev/md0 --remove /dev/sdb1# 对 /dev/sdbX 的剩余部分做相同操作 ### 假如不是热插拔硬盘就执行关机操作 ##shutdown -h now## 从 /dev/sda 复制分区表至新的 /dev/sdb 下 ##sfdisk -d /dev/sda | sfdisk /dev/sdbfdisk -l## 添加 ##mdadm --manage /dev/md0 --add /dev/sdb1# 对 /dev/sdbX 的剩余部分做相同操作 ### 现在md0会再次同步,通过显示屏查看 ## watch cat /proc/mdstat        来看看加快Linux磁盘阵列同步速度的小贴士来获取更多信息。
        #8 - 处理硬阵列
        你可以用samrtctl命令或者供给商特定的命令来查看磁盘阵列和你所管理的磁盘的状态:
## SCSI磁盘 smartctl -d scsi --all /dev/sgX## Adaptec磁盘阵列/usr/StorMan/arcconf getconfig 1## 3ware磁盘阵列tw_cli /c0 show        对照供给商特定文档来改换你的故障磁盘。
            
fgsfdtf 2019-12-2 22:48:41 | 显示全部楼层
谢谢楼主分享~
过期面包 2021-5-8 09:47:33 | 显示全部楼层
来学习学习,看能不能学会
您需要登录后才可以回帖 登录 | 注册

本版积分规则

一键重装系统|雨人系统下载|联系我们|网站地图|过期罐头电脑论坛

GMT+8, 2024-4-17 03:41 , Processed in 0.038779 second(s), 28 queries .

官方免责声明:本站内容来自网友和互联网.若侵犯到您的版权.请致信联系,我们将第一时间删除相关内容!

Powered by Discuz!

专注于win7_win10_win11系统下载装机

© 2010-2023 GQGTPC.Com

快速回复 返回顶部 返回列表