解決八種Linux硬碟問題的技巧
不能在Linux或者類UNIX系統的硬碟上寫入資料?想解決伺服器上磁碟損壞的問題嗎?想知道你為什麼總是在螢幕上看到“磁碟已滿”的字眼嗎?想學習處理這些問題的辦法嗎?試試一下這8個解決Linux及UNIX伺服器硬碟問題的小貼士吧。
#1 - 錯誤: 裝置上無剩餘空間
當你的類UNIX系統磁碟寫滿了時你會在螢幕上看到這樣的資訊。本例中,我執行fallocate命令然後我的系統就會提示磁碟空間已經耗盡:
$ fallocate -l 1G test4.img fallocate: 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% /dev tmpfs 201M 264K 200M 1% /run none 5.0M 0 5.0M 0% /run/lock none 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/*.log bzip2 /ftpusers/tmp/large.file.name
2.在類UNIX系統中用rm命令刪除不想要的檔案:
rm -rf /ftpusers/tmp/*.bmp
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 10 du -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/DISK hddtemp /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 /ftpusers fsck -y /dev/sda8
來看看怎麼應對Linux檔案系統故障的更多資訊。
#7 - 處理Linux中的軟陣列
輸入以下命令來檢視Linux軟陣列的最近狀態:
## 獲得 /dev/md0 上磁碟陣列的具體內容 ## mdadm --detail /dev/md0 ## 檢視狀態 ## cat /proc/mdstat watch cat /proc/mdstat
部分輸出內容:
圖 04: 檢視Linux軟陣列狀態命令
你需要把有故障的硬體驅動器更換掉,別刪錯了。本例中,我更換了 /dev/sdb (RAID 6中的第二個硬體驅動器)。沒必要依靠離線儲存檔案來修復Linux上的磁碟陣列,因為這隻在你的伺服器支援熱插拔硬碟的情況下才能工作:
## 從一個md0陣列中刪除磁碟 ## mdadm --manage /dev/md0 --fail /dev/sdb1 mdadm --manage /dev/md0 --remove /dev/sdb1 # 對 /dev/sdbX 的剩餘部分做相同操作 ## # 如果不是熱插拔硬碟就執行關機操作 ## shutdown -h now ## 從 /dev/sda 複製分割槽表至新的 /dev/sdb 下 ## sfdisk -d /dev/sda | sfdisk /dev/sdb fdisk -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
對照供應商特定文件來更換你的故障磁碟。
監控磁碟的健康狀況
來看看我們先前的教程:
- Monitoring hard disk health with smartd under Linux or UNIX operating systems
- Shell script to watch the disk space
- UNIX get an alert when disk is full
- Monitor UNIX / Linux server disk space with a shell scrip
- Perl script to monitor disk space and send an email
- NAS backup server disk monitoring shell script
結論
我希望以上這些小貼士會幫助你改善在基於Linux/Unix伺服器上的系統磁碟問題。我還建議執行一個好的備份計劃從而有能力從磁碟故障、意外的檔案刪除操作、檔案損壞和伺服器完全被破壞等意外情況中恢復:
- Debian / Ubuntu: Install Duplicity for encrypted backup in cloud
- HowTo: Backup MySQL databases, web server files to a FTP server automatically
- How To Set Red hat & CentOS Linux remote backup / snapshot server
- Debian / Ubuntu Linux install and configure remote filesystem snapshot with rsnapshot incremental backup utility
- Linux Tape backup with mt And tar command tutorial
via: http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/
相關文章
- 【ubuntu】解決行動硬碟掛載不上的問題Ubuntu硬碟
- 回溯法(排列樹)解決八(N)皇后問題
- CodeMan的Linux問題解決與技巧集錦:Linux Shell下命令su出現authentication failure解決方法...LinuxAI
- 解決ajax跨域問題的多種方法跨域
- 解決代理超時問題的三種方法
- 前端解決跨域問題的8種方案前端跨域
- 在linux字型下的顯示問題及幾種解決辦法Linux
- Linux基礎之CodeMan問題解決與技巧集錦:Linux中PDF閱讀亂碼問題Linux
- 機器學習 | 八大步驟解決90%的NLP問題機器學習
- 解決WordPress頁面錯位問題的實用技巧
- 解決「問題」,不要解決問題
- Linux基礎之CodeMan問題解決與技巧集錦:Linux中“Networking Disabled”問題(解決Ubuntu等OS無法上網)...LinuxUbuntu
- 【SpringMVC】解決跨域問題的兩種方式SpringMVC跨域
- PHP程式設計師解決問題能力的八個級別PHP程式設計師
- linux sed 命令引起的^M問題解決Linux
- 解決linux不能上外網的問題Linux
- linux下安裝mysql的問題解決LinuxMySql
- iOS八種記憶體洩漏問題iOS記憶體
- 解決ASP.NET中的各種亂碼問題ASP.NET
- Spring Boot幾種啟動問題的解決方案Spring Boot
- windows 7常見的三種字型問題的解決方法Windows
- 問題解決:嘗試解決maven依賴找不到的n種姿勢Maven
- 使員工快速上手CRM 八大問題需解決
- linux kernel引發的oracle問題及解決LinuxOracle
- 用linux man命令,自己解決問題Linux
- LINUX 解決時間同步問題(NTP)Linux
- Linux rpm安裝問題解決Linux
- 紅旗linux 雙機問題解決Linux
- Linux啟動問題解決方法(轉)Linux
- Java技巧-解決JAVA_HOME變數無效問題Java變數
- 解決問題
- 幾種解決“藍芽不可用”問題的辦法藍芽
- 解決問題是一種通用技能 ——《諮詢的奧祕》
- 解決IP盜用問題的三種技術手段 (轉)
- 這種錯誤怎麼解決??pojoService問題,反射機制問題嗎?POJO反射
- 完美解決jspdf各種中文亂碼問題JS
- 四種方案解決ScrollView巢狀ListView問題View巢狀
- 解決linux crontab備份mysql失敗的問題LinuxMySql