增加 Windows Docker 容量 (突破256G限制)

MariaDB 資料庫的 docker container 出現了這個錯誤:
  
2022-05-05 8:59:11 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait
2022-05-05 8:59:11 0 [ERROR] InnoDB: preallocating 12582912 bytes for file ./ibtmp1 failed with error 28
2022-05-05 8:59:11 0 [ERROR] InnoDB: Could not set the file size of './ibtmp1'. Probably out of disk space
2022-05-05 8:59:11 0 [ERROR] InnoDB: Unable to create the shared innodb_temporary
2022-05-05 8:59:11 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
  

之前因為硬碟容量不夠,所以我把 Docker 的儲存位置從 C 槽 移動到 D 槽
註:可參考這篇: 變更 Docker Desktop 儲存位置 (Windows)

所以現在硬碟空間是夠的阿,還有 1TB 多,但是為什麼會出現容量不足的問題呢?

找了半天,發現空間不夠是因為 windows docker 是裝在wsl,有最大空間為 256 GB 的限制
把解決的過程分享一下

解除 windows docker 256 GB 的限制

先找到 Docker wsl 的儲存位置,預設是在 %LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx
註: 如果有依照上一篇移動過路徑的話,就要要依照變更後的路徑
    
C:\Users\ruyut\AppData\Local\Docker\wsl/
`-- data/
    `-- ext4.vhdx
    

以管理員權限打開 Windows 指令視窗
輸入:diskpart,按下 Enter 後指令前面會變成 「DISKPART>」字樣
  
diskpart


選取 Docker wsl 檔案:
註:需要替換成剛剛找到的路徑
  
Select vdisk file="C:\Users\ruyut\AppData\Local\Docker\wsl\ext4.vhdx"


輸出:
  
Select vdisk file="C:\Users\ruyut\AppData\Local\Docker\wsl\ext4.vhdx"

DiskPart 已成功選取該虛擬磁碟檔案。


列出 vdisk 資訊:
  
detail vdisk


查看一下輸出資訊
  
detail vdisk

裝置類型識別碼: 0 (不明)
廠商識別碼: {00000000-0000-0000-0000-000000000000} (不明)
狀態: 已新增
虛擬大小:  256 GB
實體大小:  236 GB
檔案名稱: C:\Users\ruyut\AppData\Local\Docker\wsl\ext4.vhdx
子系: 否
父檔案名稱:
找不到關聯的 disk#:。


設定大小為 512 GB:
註:單位是 MB,例如 256 GB 就是 256000
  
expand vdisk maximum=512000


執行結果:
  
expand vdisk maximum=512000

100 % 已完成

DiskPart 已成功解壓縮虛擬磁碟檔案。



執行完成後關閉指令視窗

開啟 windows 下的 linux 指令視窗
查看顯示檔案系統上的可用空間:
  
df -h


找到 docker-desktop-data 紀錄這一行最左邊的路徑
在本範例中,就是第 16 行,路徑為 /dev/sdd
  
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        492G  1.3G  468G   1% /
none             16G  363M   16G   3% /mnt/wsl
tools           700G  529G  171G  76% /init
none             16G     0   16G   0% /dev
none             16G  4.0K   16G   1% /run
none             16G     0   16G   0% /run/lock
none             16G     0   16G   0% /run/shm
none             16G     0   16G   0% /run/user
tmpfs            16G     0   16G   0% /sys/fs/cgroup
drivers         700G  529G  171G  76% /usr/lib/wsl/drivers
lib             700G  529G  171G  76% /usr/lib/wsl/lib
drvfs           700G  529G  171G  76% /mnt/c
drvfs           1.9T  1.1T  879G  54% /mnt/d
/dev/sdd        251G  239G   12K 100% /mnt/wsl/docker-desktop-data/isocache
none             16G   12K   16G   1% /mnt/wsl/docker-desktop/shared-sockets/host-services
/dev/sdc        251G  121M  239G   1% /mnt/wsl/docker-desktop/docker-desktop-user-distro
/dev/loop0      353M  353M     0 100% /mnt/wsl/docker-desktop/cli-tools

跑 sudo lsblk確定哪個 Linux 設備與虛擬磁盤相關聯: 調整調整檔案系統大小:
註:帶入剛剛的檔案路徑
  
sudo resize2fs /dev/sdc 512000M

留言