不能在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
部分輸出內容:
- FilesystemSizeUsedAvailUse%Mounted on
- /dev/sda6 117G54G57G49%/
- udev 993M4.0K993M1%/dev
- tmpfs 201M264K200M1%/run
- none 5.0M05.0M0%/run/lock
- none 1002M01002M0%/run/shm
- /dev/sda1 1.8G115M1.6G7%/boot
- /dev/sda7 4.7G145M4.4G4%/tmp
- /dev/sda9 9.4G628M8.3G7%/var
- /dev/sda8 94G579M89G1%/ftpusers
- /dev/sda10 4.0G4.0G0100%/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
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 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/
部分輸出內容:
- FilesystemInodesIUsedIFreeIUse%Mounted on
- /dev/sda8 62504961156862389281%/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.工具期望太高,它在某些狀況下無法工作,我們要定期做備份。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-12/110060p2.htm