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

原由:docker

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

  本身寫c程序系統調用rename,證明確實是這個問題。jvm

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

 

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

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

 

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

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

 

取消quotabug

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

相關文章
相關標籤/搜索