C您想在 Linux 或類 Unix 系統上寫入硬盤嗎? 你的 Linux 硬盤有問題嗎?想要診斷壞的服務器磁盤問題嗎?為什麼我會在屏幕上收到“磁盤已滿”消息?我想學習如何解決磁盤已滿/損壞和故障問題。 試試這八個技巧來診斷 Linux 和 Unix 服務器上的硬盤驅動器問題。

各種Linux硬盤問題

作為開發人員或系統管理員,您可能會遇到以下問題:

  • Linux 或 Unix 機器上的磁盤空間不足
  • 磁盤損壞
  • 文件系統損壞
  • 磁盤配額
  • RAID卡故障
  • 由於軟件/硬件 RAID 等導致的 SSD/HDD 故障。

請參閱有關如何解決 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 的空間,其中使用了 4.0Gb。您還可以使用提供服務器或桌面磁盤使用信息的 duf、ncdu 或 pydf 命令工具。但是,這些工具必須預先安裝在盒子中。

運行中的 Dufcomand

在 Linux 或 Unix 上使用 ncdu 命令檢查磁盤佔用情況

pydf 是解決 Linux 和 Unix 硬盤問題的另一個豐富多彩且有用的視覺輔助工具。例如,您的磁盤空間是否不足?

修復磁盤已滿時的問題

  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
    # check for the whole disk #
    du -cks / | sort -rn | head
  5. 截斷特定文件。這對日誌文件很有用。
    truncate -s 0 /ftpusers/ftp.upload.log
    ### bash/sh etc ##
    >/ftpusers/ftp.upload.log
    ## perl ##
    perl -e'truncate "filename", LENGTH'
  6. 查找和刪除在 Linux 或 Unix 上打開但已刪除的大文件。
    ## Works on Linux/Unix/OSX/BSD etc ##
    lsof -nP | grep '(deleted)'
     
    ## Only works on Linux ##
    find /proc/*/fd -ls | grep  '(deleted)'

    截斷:

     ## works on Linux/Unix/BSD/OSX etc all ##
    > "/path/to/the/deleted/file.name"
    ## works on Linux only ##
    > "/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

另一個例子,從我的 FreeBSD 9.x 服務器以 rw 模式重新安裝:
# mount -o rw /dev/ad0s1a /

當檢測到磁盤或文件系統問題時,Linux 文件系統進入只讀模式。因此,建議檢查磁盤是否發生嚴重故障。檢查磁盤的整體狀況。
$ sudo smartctl -d ata -H /dev/sda

測試完成後,運行以下命令查看磁盤是否出現故障:
$ sudo smartctl --attributes --log=selftest /dev/sda

有關 smartctl 命令的更多信息,請參閱在 Linux 服務器上測試 SCSI / SATA / SSD 硬盤驅動器的壞頁。

3-i 節點是否短缺?

df 命令報告有足夠的可用空間,但係統可能會聲稱文件系統已滿。您需要使用以下命令查看在文件系統上標識文件及其屬性的 inode:
$ df -i
$ df -i /ftpusers/

樣本輸出:

Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda8      6250496 11568 6238928    1% /ftpusers

所以 /ftpuusers 一共有 62,50,496 個 inode,但只有 11,568 個。 您可以在 /ftpuusers 分區中自由創建另外 62,38,928 個文件。 如果您想使用 100% inode,請嘗試以下選項。

  • 找到您不需要的文件並刪除它們或將它們移動到另一台服務器。
  • 找到您不需要的大文件並刪除它們或將它們移動到另一台服務器。

4-我的硬盤快死了嗎?

日誌文件中的 I/O 錯誤(例如 /var/log/messages)表明您的硬盤有問題,可能是故障。 您可以使用 smartctl 命令檢查硬盤錯誤,該命令是 Linux 和 UNIX 等操作系統上的 SMART 磁盤控制和監視實用程序。語法如下:

smartctl -a /dev/DEVICE
# check for /dev/sda on a Linux server
smartctl -a /dev/sda

您還可以使用磁盤工具獲得相同的信息

Linux 磁盤工具

筆記: 不要對 SMART 工具抱有太多期望。它可能不起作用。進行定期備份。

5-您的硬盤和服務器是否太熱?

高溫會使服務器變慢。因此,有必要保持服務器和磁盤的適當溫度。高溫會導致服務器關閉或損壞文件系統或磁盤。 通過使用 hddtemp 或 smartctl 實用程序從支持此功能的驅動器上的 SMART 讀取數據,檢查基於 Linux 或 Unix 系統的硬盤溫度。只有現代硬盤驅動器具有溫度傳感器。 hddtemp 還支持從 SCSI 驅動器讀取 SMART 信息。 hddtemp 充當簡單的命令行工具或從所有服務器獲取信息的守護程序。

hddtemp /dev/DISK
hddtemp /dev/sg0

圖 02:運行中的 hddtemp

您還可以使用 smartctl 命令,如下所示:

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

在 Linux 上,您可以使用 nvme 命令查找 NVMe SSD 溫度。
$ sudo nvme smart-log /dev/nvme1n1

Linux 搜索 NVMe SSD 溫度命令

如何獲得CPU溫度?

您可以使用 lm_sensor 等 Linux 硬件監控工具來獲取基於 Linux 的系統的 CPU 溫度。

sensors

Debian Linux 服務器的示例輸出:

圖 03:在 Linux 上提供 CPU 核心溫度和其他信息的傳感器命令

6 – 處理損壞的文件系統

服務器上的文件系統可能會因其他錯誤(例如硬重啟或壞塊)而損壞。您可以使用以下 fsck 命令修復損壞的文件系統。

umount /ftpusers
fsck -y /dev/sda8

有關更多信息,請參閱如何容忍 Linux 文件系統故障。 您在 Linux 或 FreeBSD 上使用 ZFS?嘗試以下命令檢查 ZFS 文件系統的完整性

# Step 1. Get pool list 
sudo zpool list
 
# Step 2. No fsck utility equivalent exists for ZFS. Instead we use the following
sudo zpool scrub rpool
 
# Step 3. Check pool status for errors
sudo zpool status -v rpool
 
# Step 4. Replace disk if you see error reported by above commands.

解決 Linux 硬盤問題的 8 個技巧:磁盤已滿或無法寫入磁盤等

7 – 在 Linux 上處理軟件 RAID

要檢查 Linux 軟件 RAID 的當前狀態,請輸入以下命令:

 ## get detail on /dev/md0 raid ##
mdadm --detail /dev/md0
 
## Find status ##
cat /proc/mdstat
watch cat /proc/mdstat

圖 04:在 Linux 軟件中檢查 RAID 命令的狀態

故障硬盤需要更換。您需要刪除發生故障的正確驅動器。此示例替換 /dev/sdb(RAID 6 中的第二個硬盤)。在不使存儲脫機的情況下修復 Linux 上的 RAID。這僅適用於服務器支持熱插拔硬盤驅動器的情況。

## remove disk from an array md0 ##
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdb1
 
# Do the same steps again for rest of /dev/sdbX ##
# Power down if not hot-swappable hard disk: ##
shutdown -h now
 
## copy partition table from /dev/sda to newly replaced /dev/sdb ##
sfdisk -d /dev/sda | sfdisk /dev/sdb
fdisk -l
 
## Add it ##
mdadm --manage /dev/md0 --add /dev/sdb1
# do the same steps again for rest of /dev/sdbX ##
 
# Now md0 will sync again. See it on screen ## 
watch cat /proc/mdstat

有關更多信息,請參閱在 Linux 上提高 RAID 同步速度的技巧。

8 – 硬件 RAID 處理

您可以使用 samrtctl 命令或供應商特定的命令來檢查控制器中 RAID 和磁盤的狀態。

## SCSI disk 
smartctl -d scsi --all /dev/sgX
 
## Adaptec RAID array
/usr/StorMan/arcconf getconfig 1
 
## 3ware RAID Array
tw_cli /c0 show

請參閱特定於供應商的文檔以更換故障磁盤。

監控磁盤狀態

請參閱上一個教程。

  1. 使用 smartd 監控 Linux 或 UNIX 操作系統上的硬盤狀態
  2. 用於監視磁盤空間的 Shell 腳本
  3. 磁盤已滿時 UNIX 收到警報
  4. 使用 shell 腳本監控 UNIX/Linux 服務器磁盤空間
  5. 監視磁盤空間和發送電子郵件的 Perl 腳本
  6. NAS備份服務器磁盤監控shell腳本

除了腳本之外,您還可以使用基於雲的或自託管的磁盤監控工具。一些例子:

  1. 雲看 使用 AWS 雲設置磁盤佔用警報
    Cloudwatch Linux 服務器磁盤監控
  2. 服務器密度 SaaS 基於雲的監控
  3. 納吉奧斯 或類似的開源軟件

結論是

我們希望這些技巧可以幫助您解決基於 Linux / Unix 的服務器上的系統磁盤問題。我們還建議您實施適當的備份計劃,以便您可以從磁盤故障、意外文件刪除、文件損壞或完全服務器損壞中恢復。

  • Debian / Ubuntu:為雲中的加密備份安裝 Duplicaty
  • 方法:MySQL數據庫,自動備份web服務器文件到FTP服務器
  • 如何設置 Red Hat & CentOS Linux 遠程備份/快照服務器
  • 使用 Debian / Ubuntu Linux rsnapshot 增量備份實用程序安裝和配置遠程文件系統快照
  • Linux 磁帶備份使用 mt 和 tar 命令教程
  • FreeBSD 安裝 Rsnapshot 文件系統快照備份實用程序