docker “no space left on device”問題定位解決


在paas環境上使用docker加載鏡像的時候出現了如下問題

第一反應應該是存儲鏡像的路徑磁盤滿了

docker info查看docker的根路徑,可以看到為/opt/docker:

查看/opt/docker的磁盤占用率:

從上述可知docker的磁盤並沒有占用滿,懷疑是inode占用滿導致的,查看/opt的inode占用率,發現inode用盡

刪除/opt占用過多的文件或目錄即可,本問題是因為程序錯誤,導致在pod的kubernetes.io~secret下面創建了195w多個空目錄,導致inode被占用完

注:

使用ls -lR DIR_NAME | grep "^-"|wc -l可以查看目錄DIR_NAME中的文件數

使用ls -lR DIR_NAME | grep "^d"|wc -l可以查看目錄DIR_NAME中的目錄數

 

在docker中有一個重要的存儲器,以centos系統為例,使用docker info可以看到docker的存儲系統類型為devicemapper,docker使用thinpool特性來存儲容器鏡像。

也可以通過/etc/docker/daemon.json查看docker的存儲設備:

可以在/dev/mapper中查看掛載的實際設備

/var/lib/docker/devicemapper/metadata/包含了devicemapper本身配置以及鏡像和容器層相關的信息,格式為json。

/var/lib/devicemapper/mnt/包含了容器和鏡像掛載的點(可以使用lsblk查看),鏡像掛載點為空,容器則包含了容器中的文件系統

 

使用lvs -a可以查看當前存儲設備的使用情況:

使用lsblk可以查看當前設備的使用情況(可以使用vgdisplay --verbose來查看vg對應的lv設備):

 參考:

https://blog.csdn.net/chengm8/article/details/49890261

https://docs.docker.com/storage/storagedriver/device-mapper-driver/#image-and-container-layers-on-disk

 


免責聲明!

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



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