日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

解決Linux實例磁盤空間滿問題

更新時間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

在Linux系統的云服務器ECS實例內創建文件或者應用時出現No space left on device報錯提示,即表示您的磁盤空間不足。如果磁盤滿不符合您的預期使用,可根據本文判斷磁盤滿的原因并相應解決。

可能原因

磁盤空間不足的問題通常有以下幾類原因:

  1. 磁盤分區空間使用率達到100%。

  2. 磁盤分區Inode使用率達到100%。

  3. 磁盤存在已刪除未釋放的僵尸文件。

    說明

    已刪除文件可能因刪除時文件句柄被打開,導致文件刪除時文件空間未能被釋放。

  4. 掛載點覆蓋。

    說明

    在原有文件系統的目錄下已經存在大量文件,掛載新磁盤后掛載點(目錄)被覆蓋。但您系統內的應用可能仍會繼續讀寫原有文件系統空間,這時就有可能出現您的應用報空間不足,但您使用dfdu命令查看磁盤文件目錄的容量使用情況時卻無法統計到,原因是dfdu命令統計的是當前掛載點對應的分區使用情況。

  5. inotify watches達到上限。

    inotify是Linux系統的一種監控文件系統事件的機制,被廣泛用于實時監控文件系統中的文件變化。該錯誤實際上和磁盤空間沒有關聯,不表示磁盤存儲空間已滿。本文檔中對這一報錯進行補充說明,以便幫助您做正確的排查。

排查方法和解決方案

請根據不同的問題原因,通過以下方式進行處理。

一、磁盤分區空間使用率達到100%

您可以通過清理占用磁盤空間較大的文件或目錄、擴容或新購磁盤等方式來解決磁盤分區空間使用率達到100%的問題。

  1. 查看磁盤當前使用率,并定位高占用文件。

    1. 遠程連接ECS實例。

      具體操作,請參見通過密碼或密鑰認證登錄Linux實例

    2. 執行以下命令,查看磁盤使用率。

      df -h

      系統顯示類似如下信息。例如,分區/dev/xvda1的使用率為15%。

      image

    3. 執行以下命令,進入根目錄,查看哪個目錄占用磁盤空間較大。

      cd /
      du -sh *

      系統顯示類似如下信息。圖示例可以看出/usr目錄占用空間最大,則需要繼續查看/usr目錄下哪個文件或目錄占用空間較大。請您根據實際環境進行操作。 image

    4. 執行以下命令,逐級查看哪個目錄占用磁盤空間較大。

      例如本例中進入較大的 /usr目錄,繼續查看/usr目錄下哪個文件或目錄較大。

      cd /usr
      du -sh *

      系統顯示類似如下信息。圖示例可以看出local目錄占用空間最大,則需要查看local目錄下哪個文件或目錄占用空間較大,以此類推。image

  2. 結合業務情況判斷,進行以下處理。

    • 清理占用空間較大且不再需要的文件或目錄:結合業務情況判斷,刪除不再使用的文件或目錄。

    • 擴容或新購云盤:如果業務不允許刪除磁盤中的文件或通過清理文件也無法釋放更多空間,您可以根據實際業務場景和需求擴容磁盤或者新購磁盤。具體操作,請參見云盤擴容指引創建云盤掛載數據盤

二、磁盤分區Inode使用率達到100%

磁盤分區Inode是文件系統中的一個重要概念,文件系統內每個文件和目錄都由一個唯一的Inode標識。每個磁盤分區在格式化時會預分配一定數量的Inodes,但是如果文件系統中存在大量小文件或目錄,Inode資源也可能成為系統資源的瓶頸。當所有Inodes都被分配完畢,即使磁盤還有剩余空間,也無法再創建新的文件或目錄,這就是Inode使用率達到100%現象。此時,需要清理不必要的文件以釋放Inode,或者增加Inode數量來解決磁盤分區Inode使用率達到100%的問題。

  1. 查詢Inode使用率。

    1. 遠程連接ECS實例。

      具體操作,請參見通過密碼或密鑰認證登錄Linux實例

    2. 執行以下命令,查詢Inode使用率。

      df -i

      image

  2. 如果Inode使用率達到或者接近100%,可以通過以下兩種方式進行處理:

    • 清理Inode占用高的文件或者目錄

      如果不方便格式化磁盤以增加Inode數量,可以參考以下步驟,清理Inode占用量高的文件或者目錄。

      1. 執行以下命令,分析根目錄下的每個二級目錄下有多少個文件。

        for i in /*; do echo $i; find $i | wc -l; done

        系統顯示類似如下信息。圖示例可以看出/usr目錄下的文件數最多,則需要繼續查看/usr目錄下哪個目錄文件數最多,文件數越多說明Inode占用越高。請您根據實際環境進行操作。

        image

      2. 逐層進入Inode占用最高的目錄,繼續執行上述命令,逐步定位占用過高空間的文件或目錄,最后進行相應清理。

    • 增加Inode數量

      如果不允許清理磁盤中的文件,或者清理完可清理的文件后Inode使用率仍然較高,則您需要通過備份數據、重新格式化磁盤增加Inode數、拷回數據等步驟,完成數據的保留并增加文件系統Inode數量。

      警告
      • Inode數量的調整需要重新格式化磁盤,磁盤內的數據將被刪除,請確保數據已經得到有效備份后,再進行以下操作。您可以自行拷貝文件,也可以通過快照方式進行數據備份,創建快照的具體操作請參見創建一個云盤快照

      • Inode數量的調整需要卸載文件系統,這可能會導致您的應用服務中斷,請選擇您業務合適的時間進行。

      1. 執行以下命令,卸載文件系統。

        本示例以卸載/home為例,請您根據實際環境進行替換。

        umount /home
      2. 執行以下命令,重新建立文件系統,增加Inode節點數。

        本示例以磁盤分區為/dev/xvdb、文件系統類型為ext3、Inode節點數為1,638,400為例,請您根據實際環境進行修改。

        mkfs.ext3 /dev/xvdb -N 1638400
        說明

        Linux的Inode數通常是根據磁盤容量大小生成的,一般是1:16KB的比例,以40 GB云盤為例,其Inode節點數通常為2,621,440,其支持的最大值是2^32(大約43億),您可以根據實際的云盤容量大小乘以一定的放大系數(例如1.2)來選擇適合您業務的Inode值。

      3. 執行以下命令,重新掛載目錄。

        本示例將按照/etc/fstab配置將已卸載的目錄再重新掛載,請您根據實際情況操作。

        mount -a
      4. (可選)執行以下命令,查看并確認修改后的Inode節點數。

        dumpe2fs -h /dev/xvdb | grep node

        系統顯示類似如下信息,表示Inode數調整成功,您可以接著拷回備份數據,恢復相關應用。

        image

三、存在僵尸文件

如果磁盤分區容量和Inode容量都沒有問題,可能是系統中存在大量文件已經被刪除(顯示為deleted)但是仍被系統內進程占用,系統無法釋放磁盤空間,且由于這部分文件已經被標記刪除,通過dfdu 命令無法統計到。如果僵尸文件過多,會占用較大的磁盤空間。您可以參考以下步驟查看并刪除僵尸文件。

  1. 查看是否存在僵尸文件。

    1. 遠程連接ECS實例。

      具體操作,請參見通過密碼或密鑰認證登錄Linux實例

    2. 如果系統沒有預裝lsof,選擇以下合適命令,安裝lsof。

      • Alibaba Cloud Linux、CentOS等系統

        yum install -y lsof
      • Debian、Ubuntu等系統

        apt-get install -y lsof
    3. 執行以下命令,查看僵尸文件占用情況。

      lsof |grep delete | sort -k7 -rn | more

      系統顯示類似如下信息,其中第7列為對應文件的大小(單位為Byte),您可以將第七列值累加起來看總文件大小和您非預期的磁盤使用空間是否接近,接近即為僵尸文件占用了您磁盤空間。image

  2. 如果存在僵尸文件,可通過以下兩種方式釋放句柄清除僵尸文件,以釋放磁盤空間。

    • 重啟服務器清除

      重啟服務器,系統會退出現有的進程,釋放調用的deleted文件的句柄。

      重要

      重啟服務器可能會影響業務,請您選擇合適時間進行重啟。

    • 通過kill命令清除

      根據lsof命令列出的PID進程號(通常為第二列),使用kill命令結束占用這些文件的服務進程。

      1. 執行以下命令,列出PID進程號。

        lsof |grep delete 
      2. 根據您的業務情況,確保對應進程可以停止或者重啟,執行以下命令,停止占用這些文件的服務進程。

        kill <進程號>
        重要

        如果服務器正在運行業務,可能會影響到業務,請慎重操作。

四、掛載點覆蓋

當您排除了上述三個問題,仍未找到非預期的磁盤空間使用,可能的原因是掛載點覆蓋。您可以用下述方法進行確認。

如下圖所示案例,您可以看到30 GB的系統盤/dev/vda1使用率已經達到了95%,通過du可以看到,主要是/home目錄占用了24 GB的空間。

image

但當我們把/dev/vdb1掛載到/home目錄后,如下圖所示,可以看到系統盤/dev/vda1使用率還是95%,整個根分區下最大的目錄僅有/usr占用超過1 GB,無法找到具體哪個目錄占用高,/home目錄統計到的使用空間僅為20 KB,不是此前看到的24 GB空間占用,此現象即為掛載點覆蓋。

image

解決掛載點被覆蓋的問題,通常通過先取消磁盤分區掛載,再檢查原掛載目錄下的空間占用情況。

警告

分區卸載可能會導致您的應用服務中斷,請選擇您業務合適的時間進行。

五、inotify watches達到上限

如果您在使用諸如tail -f命令時發生類似報錯tail: cannot watch '...': No space left on device,說明您的系統存在inotify watches達到上限的情況,您可以通過提高系統的inotify watches上限來規避這個問題。

  1. 執行以下命令,查看inotify watches當前的上限值。

    cat /proc/sys/fs/inotify/max_user_watches
  2. 執行以下命令,修改inotify watches的上限值。

    sudo sysctl fs.inotify.max_user_watches=<新的上限值>

    <新的上限值>替換為您希望設置的新的inotify watches上限值。

    說明

    提升該上限值可能導致inotify占用更多系統內存。因此,在修改上限值之前,請仔細考慮系統的內存和性能情況以及可能產生的影響。您可以執行man 7 inotify命令了解更多關于inotify watches和相關設置的詳細信息。

優化存儲模式防止頻繁出現磁盤滿的問題

如果您的磁盤空間頻繁耗盡或者數據存儲需求高速增長,可根據業務情況優化存儲方案,防止頻繁出現磁盤滿的問題。

  • 如果您的磁盤空間存儲大量的圖片、視頻等文件,且沒有高并發讀寫的情況,可以考慮使用對象存儲OSS。OSS是一款海量、安全、低成本、高可靠的云存儲服務,可以根據數據量的增加自動擴展存儲空間,無需手動擴容。您可以使用ossfs將OSS Bucket掛載到ECS實例上,應用程序無需修改代碼即可像操作本地文件一樣操作OSS中的文件。具體操作,請參見使用ossfs將OSS Bucket掛載到Linux系統的本地目錄

  • 如果您的業務場景對高并發讀寫和共享有要求,可以考慮使用文件存儲NAS來存儲文件。NAS提供了簡單的可擴展文件存儲以供與ECS配合使用,可提供高性能、高并發的共享存儲服務,可以根據數據量的增加自動擴展存儲空間,無需手動擴容。詳細操作,請參見NAS 快速入門(Linux)

  • 如果您在磁盤中存儲了大量日志文件,可以考慮將日志存儲到日志服務SLS,便于查詢日志的同時,減少磁盤占用。詳細操作,請參見日志服務_快速入門