Linux硬盤(pán)問(wèn)題的八種解決技巧

不能在Linux或者類(lèi)UNIX系統(tǒng)的硬盤(pán)上寫(xiě)入數(shù)據(jù)?想解決服務(wù)器上磁盤(pán)損壞的問(wèn)題嗎?想知道你為什么總是在屏幕上看到“磁盤(pán)已滿”的字眼嗎?想學(xué)習(xí)處理這些問(wèn)題的辦法嗎?試試一下這8個(gè)解決Linux及UNIX服務(wù)器硬盤(pán)問(wèn)題的小貼士吧。
#1 - 錯(cuò)誤: 設(shè)備上無(wú)剩余空間
當(dāng)你的類(lèi)UNIX系統(tǒng)磁盤(pán)寫(xiě)滿了時(shí)你會(huì)在屏幕上看到這樣的信息。本例中,我運(yùn)行fallocate命令然后我的系統(tǒng)就會(huì)提示磁盤(pán)空間已經(jīng)耗盡:
$ fallocate -l 1G test4.imgfallocate: test4.img: fallocate failed: No space left on device
第一步是運(yùn)行df命令來(lái)查看一個(gè)有分區(qū)的文件系統(tǒng)的總磁盤(pán)空間和可用空間的信息:
$ df
或者試試可讀性比較強(qiáng)的輸出格式:
$ df -h
部分輸出內(nèi)容:
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命令輸出可以清楚地發(fā)現(xiàn),在 /dev/sda10 分區(qū)下總共4.0Gb的空間被全部寫(xiě)滿了。
修復(fù)磁盤(pán)寫(xiě)滿的問(wèn)題
1.用gzip,bzip2或tar命令壓縮未壓縮的日志和其它文件:
gzip /ftpusers/tmp/*.logbzip2 /ftpusers/tmp/large.file.name
2.在類(lèi)UNIX系統(tǒng)中用rm命令刪除不想要的文件:
rm -rf /ftpusers/tmp/*.bmp
3.用rsync命令移動(dòng)文件至其它系統(tǒng)或外置硬盤(pán):
rsync --remove-source-files -azv /ftpusers/tmp/*.mov /mnt/usbdisk/rsync --remove-source-files -azv /ftpusers/tmp/*.mov server2:/path/to/dest/dir/
4.在類(lèi)UNIX系統(tǒng)中找出最占磁盤(pán)空間的目錄或文件:
du -a /ftpusers/tmp | sort -n -r | head -n 10du -cks * | sort -rn | head
5.清空指定文件。這招對(duì)日志文件很有效:
truncate -s 0 /ftpusers/ftp.upload.log### bash/sh等 ##>/ftpusers/ftp.upload.log## perl ##perl -e'truncate "filename", LENGTH'
6.在Linux和UNIX中找出并刪除顯示著但已經(jīng)被刪除的大文件:
## 基于Linux/Unix/OSX/BSD等系統(tǒng) ##lsof -nP | grep '(deleted)'## 只基于Linux ##find /proc/*/fd -ls | grep '(deleted)'
清空它:
## 基于Linux/Unix/OSX/BSD等所有系統(tǒng) ##> "/path/to/the/deleted/file.name"## 只基于Linux ##> "/proc/PID-HERE/fd/FD-HERE"
#2 - 文件系統(tǒng)是只讀模式嗎?
當(dāng)你嘗試新建或保存一個(gè)文件時(shí),你可能最終得到諸如以下的錯(cuò)誤:
$ cat > file-bash: file: Read-only file system
運(yùn)行mount命令來(lái)查看被掛載的文件系統(tǒng)是否處于只讀狀態(tài):
$ mount$ mount | grep '/ftpusers'
在基于Linux的系統(tǒng)中要修復(fù)這個(gè)問(wèn)題,只需將這個(gè)處于只讀狀態(tài)的文件系統(tǒng)重新掛載即可:
# mount -o remount,rw /ftpusers/tmp
(LCTT 譯注:如果硬盤(pán)由于硬件故障而 fallback 到只讀模式,建議不要強(qiáng)制變回讀寫(xiě)模式,而是趕快替換硬盤(pán))
另外,我是這樣用rw模式重新掛載FreeBSD 9.x服務(wù)器的根目錄的:
# mount -o rw /dev/ad0s1a /
#3 - Am I running out of inodes?
有時(shí)候,df命令能顯示出磁盤(pán)有空余的空間但是系統(tǒng)卻聲稱文件系統(tǒng)已經(jīng)寫(xiě)滿了。此時(shí)你需要用以下命令來(lái)檢查能在文件系統(tǒng)中識(shí)別文件及其屬性的索引節(jié)點(diǎn):
$ df -i$ df -i /ftpusers/
部分輸出內(nèi)容:
Filesystem Inodes IUsed IFree IUse% Mounted on/dev/sda8 6250496 11568 6238928 1% /ftpusers
如上 /ftpusers 下有總計(jì)62,50,496KB大小的索引節(jié)點(diǎn)但是只有11,568KB被使用。你可以在 /ftpusers 位置下另外創(chuàng)建62,38,928KB大小的文件。如果你的索引節(jié)點(diǎn)100%被使用了,試試看以下的選項(xiàng):
找出不想要的文件并刪除它,或者把它移動(dòng)到其它服務(wù)器上。找出不想要的大文件并刪除它,或者把它移動(dòng)到其它服務(wù)器上。(LCTT 譯注:如果一個(gè)分區(qū)存儲(chǔ)了太多的小文件,會(huì)出現(xiàn) inode 用完而存儲(chǔ)扇區(qū)還有空閑的情況,這種情況下要么清除小文件或在不需要獨(dú)立訪問(wèn)的情況下將它們打包成一個(gè)大文件;要么將數(shù)據(jù)保存好之后重新分區(qū),并設(shè)置分區(qū)的 -t news 屬性,增加 inode 分配)
#4 - 我的硬盤(pán)驅(qū)動(dòng)器宕了嗎?
日志文件中的輸入/輸出錯(cuò)誤(例如 /var/log/messages)說(shuō)明硬盤(pán)出了一些問(wèn)題并且可能已經(jīng)失效,你可以用smartctl命令來(lái)查看硬盤(pán)的錯(cuò)誤,這是一個(gè)在類(lèi)UNIX系統(tǒng)下控制和監(jiān)控硬盤(pán)狀態(tài)的一個(gè)命令。語(yǔ)法如下:
smartctl -a /dev/DEVICE# 在Linux服務(wù)器下檢查 /dev/sda smartctl -a /dev/sda
你也可以用"Disk Utility"這個(gè)軟件來(lái)獲得同樣的信息。
圖 01: Gnome磁盤(pán)工具(Applications > System Tools > Disk Utility)
注意: 不要對(duì)S.M.A.R.T.工具期望太高,它在某些狀況下無(wú)法工作,我們要定期做備份。
#5 - 我的硬盤(pán)驅(qū)動(dòng)器和服務(wù)器是不是太熱了?
高溫會(huì)引起服務(wù)器低效,所以你需要把服務(wù)器和磁盤(pán)維持在一個(gè)平穩(wěn)適當(dāng)?shù)臏囟?,高溫甚至能?dǎo)致服務(wù)器宕機(jī)或損壞文件系統(tǒng)和磁盤(pán)。用hddtemp或smartctl功能,通過(guò)從支持S.M.A.R.T.功能的硬盤(pán)上讀取數(shù)據(jù)的方式,從而查出你的Linux或基于UNIX系統(tǒng)上的硬盤(pán)溫度。只有現(xiàn)代硬驅(qū)動(dòng)器有溫度傳感器。hddtemp功能也支持從SCSI驅(qū)動(dòng)器讀取S.M.A.R.T.信息。hddtemp能作為一個(gè)簡(jiǎn)單的命令行工具或守護(hù)程序來(lái)從所有服務(wù)器中獲取信息:
hddtemp /dev/DISKhddtemp /dev/sg0
部分輸出內(nèi)容如下:
圖 02: hddtemp正在運(yùn)行
你也可以像下面顯示的那樣使用smartctl命令:
smartctl -d ata -A /dev/sda | grep -i temperature
我怎么獲取CPU的溫度
你可以使用Linux硬件監(jiān)控工具,例如像用基于Linux系統(tǒng)的lm_sensor功能來(lái)獲取CPU溫度:
sensors
Debian服務(wù)器的部分輸出內(nèi)容:
圖 03: sensors命令提供了一臺(tái)Linux計(jì)算機(jī)的CPU核心溫度和其它信息
#6 - 處理?yè)p壞的文件系統(tǒng)
服務(wù)器上的文件系統(tǒng)可能會(huì)因?yàn)橛布貑⒒蛞恍┢渌腻e(cuò)誤比如壞的扇區(qū)而損壞。你可以用fsck命令來(lái)修復(fù)損壞的文件系統(tǒng):
umount /ftpusersfsck -y /dev/sda8
來(lái)看看怎么應(yīng)對(duì)Linux文件系統(tǒng)故障的更多信息。
#7 - 處理Linux中的軟陣列
輸入以下命令來(lái)查看Linux軟陣列的最近狀態(tài):
## 獲得 /dev/md0 上磁盤(pán)陣列的具體內(nèi)容 ##mdadm --detail /dev/md0## 查看狀態(tài) ##cat /proc/mdstatwatch cat /proc/mdstat
部分輸出內(nèi)容:
圖 04: 查看Linux軟陣列狀態(tài)命令
你需要把有故障的硬件驅(qū)動(dòng)器更換掉,別刪錯(cuò)了。本例中,我更換了 /dev/sdb (RAID 6中的第二個(gè)硬件驅(qū)動(dòng)器)。沒(méi)必要依靠離線存儲(chǔ)文件來(lái)修復(fù)Linux上的磁盤(pán)陣列,因?yàn)檫@只在你的服務(wù)器支持熱插拔硬盤(pán)的情況下才能工作:
## 從一個(gè)md0陣列中刪除磁盤(pán) ##mdadm --manage /dev/md0 --fail /dev/sdb1mdadm --manage /dev/md0 --remove /dev/sdb1# 對(duì) /dev/sdbX 的剩余部分做相同操作 ### 如果不是熱插拔硬盤(pán)就執(zhí)行關(guān)機(jī)操作 ##shutdown -h now## 從 /dev/sda 復(fù)制分區(qū)表至新的 /dev/sdb 下 ##sfdisk -d /dev/sda | sfdisk /dev/sdbfdisk -l## 添加 ##mdadm --manage /dev/md0 --add /dev/sdb1# 對(duì) /dev/sdbX 的剩余部分做相同操作 ### 現(xiàn)在md0會(huì)再次同步,通過(guò)顯示屏查看 ## watch cat /proc/mdstat
來(lái)看看加快Linux磁盤(pán)陣列同步速度的小貼士來(lái)獲取更多信息。
#8 - 處理硬陣列
你可以用samrtctl命令或者供應(yīng)商特定的命令來(lái)查看磁盤(pán)陣列和你所管理的磁盤(pán)的狀態(tài):
## SCSI磁盤(pán) smartctl -d scsi --all /dev/sgX## Adaptec磁盤(pán)陣列/usr/StorMan/arcconf getconfig 1## 3ware磁盤(pán)陣列tw_cli /c0 show
對(duì)照供應(yīng)商特定文檔來(lái)更換你的故障磁盤(pán)。
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來(lái)大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開(kāi)發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤(pán)信息? 查看Linux硬盤(pán)大小類(lèi)型和硬件信息的5種方法
使用Linux系統(tǒng)的過(guò)程中,查看和了解硬盤(pán)信息是非常重要的工作,尤其是對(duì)于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤(pán)信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細(xì)信息? 3招輕松查看CPU型號(hào)、核心數(shù)和溫度
在日常運(yùn)維工作中,獲取 CPU 信息是系統(tǒng)運(yùn)維管理員常見(jiàn)的工作內(nèi)容,無(wú)論是為了性能調(diào)優(yōu)、硬件升級(jí)還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨(dú)樹(shù)一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡(jiǎn)化,優(yōu)化,現(xiàn)代化,實(shí)用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來(lái)簡(jiǎn)要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機(jī)U盤(pán)?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個(gè)win11裝機(jī)u盤(pán),詳細(xì)如下2025-02-17Rsnapshot怎么用? 基于Rsync的強(qiáng)大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過(guò) SSH 備份遠(yuǎn)程文件,接下來(lái)詳細(xì)介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時(shí)、每天、每周和每月的本地備份,以及如何進(jìn)2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡(jiǎn)化內(nèi)核搶占邏輯,通過(guò)減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運(yùn)行時(shí)表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來(lái)了諸多優(yōu)化和改進(jìn),進(jìn)一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來(lái)看看詳細(xì)安裝指南2025-01-16