linux quota磁盤限額,引發的rename系統調用 errno:18 - Invalid cross-device link


起因:

  log4j日志滾動失敗,debug發現jvm調用native方法rename失敗,也就是系統調用rename失敗。

  自己寫c程序系統調用rename,證實確實是這個問題。

  日志打在容器里,日志目錄通過docker掛載到宿主機上,而對日志目錄設置了quota磁盤限額。掛載目錄下的文件rename會失敗,而它的子目錄下的文件rename不會失敗。

 

幾經排查定位到quata設置引起的,在容器更新或重啟后,目錄的quotaId和文件的quotaId就會對不上。

而 Invalid cross-device link 原意就是,文件在不同的文件系統下,rename系統調用失敗報這個錯誤碼。

 

查詢quota
#/usr/bin/lsattr -p -d /home/admin/logs/antdnsfilter/

設置quota
/usr/bin/chattr -p 16777675 +P /home/admin/logs/antdnsfilter/

 

取消quota

/usr/bin/chattr -p 0 -P /home/admin/logs/antdnsfilter/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM