Linux硬盘问题的八种解决技巧

不能在Linux或者类UNIX系统的硬盘上写入数据?想解决服务器上磁盘损坏的问题吗?想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗?想学习处理这些问题的办法吗?试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。

#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"这个软件来获得同样的信息。

图 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

部分输出内容如下:

图 02: hddtemp正在运行

你也可以像下面显示的那样使用smartctl命令:

smartctl -d ata -A /dev/sda | grep -i temperature

我怎么获取CPU的温度

你可以使用Linux硬件监控工具,例如像用基于Linux系统的lm_sensor功能来获取CPU温度:

sensors

Debian服务器的部分输出内容:

图 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

部分输出内容:

图 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

对照供应商特定文档来更换你的故障磁盘。

(0)

相关推荐

  • win8系统电脑打开Cbox提示很抱歉未能连接到网络的8种解决方法图文教程

    win8系统打开Cbox提示“很抱歉,未能连接到网络”怎么回事?接下来我们的小编和大家分享win8电脑打开Cbox提示“很抱歉,未能连接到网络”的解决方法. win8打开Cbox提示“很抱歉,未能连接 ...

  • 深度解析win7旗舰版下鼠标的五种常见问题已经解决技巧

    鼠标:计算机的繁琐的指令英文名,鼠标的使用是为了使计算机的操作更加简便"Mouse"滑鼠).鼠标的标准称呼应该是"鼠标器"一种输入设备,分有线和无线两种,也是计 ...

  • win7系统突然重启的八种原因和解决方法

    win7系统突然重启的八种原因和解决方法 1.病毒 ,解决方法:清除病毒,木马. 2.电压不稳,当市电电压低于170V时,计算机就会自动重启或关机,机箱电源功率不足,当运行占用CPU资源较大的大型的3 ...

  • 八种常见Excel错误提示及问题解决方法

    八种常见Excel错误提示及问题解决方法 1.#####! 原因:如果单元格所含的数字.日期或时间比单元格宽,或者单元格的日期时间公式产生了一个负值,就会产生#####!错误. 解决方法:如果单元格所 ...

  • 八招解决笔记本电脑不能正常关机问题

    笔记本电脑无法关机,造成这个故障的原因很多,解决方法有以下八种: 1. 电脑硬件的原因造成的。 主板BIOS不能很好支持ACPI,建议升级主板的BIOS,一般就可以解决。 2. 电脑软件的原因造成的。 ...

  • 揭开八种热点路由技术的神秘面纱

    让我们揭开八种路由技术的神秘面纱,大家对于路由器很熟悉,但对于路由技术应该还不是很熟悉吧。Q:解读热点路由技术,A:路由器在因特网中起着枢纽的作用,但随着因特网应用的普及,网络带宽的迅速增加,用户对服 ...

  • Linux软件安装之RPM的安装技巧

    Linux软件安装之RPM的安装技巧

  • U盘变成文件夹图标的三种解决策略

    朋友说他的U盘插入电脑后却显示文件夹的图标,推出再重新插入依旧如此,这是怎么回事?为何好好的U盘却显示的是文件夹的图案呢?其实要想解决这个问题也是很简单的,三种解决策略分享给大家。 第一种解决策略: ...

  • 大华硬盘录像机密码忘记怎么解决?解决方法介绍

    大华硬盘录像机密码忘记怎么办?一般为了防止自己财产的损失,或防止被盗很多的家庭都在家门口安装了录像机,很多人安装的是大华硬盘录像机。但是,经常会出现有人忘记了大华硬盘录像机密码,下面为大家介绍两种解决 ...