始めに
Docker で環境を立ち上げようとしたところ以下のエラーが発生しました.
failed to register layer: write ***: no space left on device
デバイスの容量不足??
Docker を立ち上げているマシンは SSD 2TiB と HDD 40TiB がマウントされており,組み上げてからそれほど時間が立っていません.なので,ディスク容量が足りないというのは疑わしい・・・・・・
原因究明
先ずは,エラーメッセージで検索をおこないました.その結果,この記事を発見しました.
内容を一言でまとめると,「Dockerがストレージを使いすぎている」とのことでした.
この記事に示されている方法で,Docker が使用しているストレージ容量をチェックしました.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 17 6 37.36GB 31.51GB (84%)
Containers 9 5 17.72GB 7.367GB (41%)
Local Volumes 6 4 7.673GB 0B (0%)
Build Cache 57 0 2.404kB 2.404kB
ところが,Docker が使用しているストレージはせいぜい60GB程度で,到底 SSD の 2TiB にさえ達していません.
そこで,次に,検索ワードを変更し,ストレージ容量の割り当てが原因ではないかと当たりを付けて検索しました.その結果,この記事を発見しました.
エラー対処
目的の記事が見つかったので,その記事に従ってエラー対処を進めます.
一部の操作で,参考記事とは異なる操作をしているので,その点が気になる方は元の記事を参照されて下さい.
ストレージ割り当ての確認
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 13G 2.7M 13G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 98G 93G 823M 100% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/nvme0n1p2 2.0G 435M 1.4G 24% /boot
/dev/nvme0n1p1 1.1G 6.1M 1.1G 1% /boot/efi
/dev/md0 28T 168K 26T 1% /mnt
tmpfs 13G 84K 13G 1% /run/user/131
tmpfs 13G 72K 13G 1% /run/user/1000
Use%
が異常なファイルシステムを発見しました.(ちなみに,参考記事の方の原因もこのファイルシステムでした.このファイルシステムが何なのか,ご存知の方がいらっしゃれば教えて頂きたいです.)
Volume Group の確認
$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476150
Alloc PE / Size 25600 / 100.00 GiB
Free PE / Size 450550 / <1.72 TiB
VG UUID RpY9Pc-ShXh-c9ab-8TV7-9AIf-TrY5-6uyI2h
Free Size
が <1.72 TiB
......
これが原因ですね......
ここから先は,以下の記事を参考に進めました.
パーティションの確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
nvme0n1 259:0 0 1.8T 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 2G 0 part /boot
└─nvme0n1p3 259:3 0 1.8T 0 part
└─ubuntu--vg-ubuntu--lv
253:0 0 100G 0 lvm /var/snap/firefox/common/host-hunspell
2.0 TiB 中 100GB しか割り当てられておらず,割り当てが適切でないことが確認できました.
論理パーティションへのストレージ割り当て
参考記事の方では最大まで論理パーティションを拡張していましたが,論理パーティションを全て使い果たすことにどんなデメリットがあるか分からなかったので,とりあえず80%まで割り当てることにしました.
$ sudo lvextend -l +80%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from 100.00 GiB (25600 extents) to 1.47 TiB (386040 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
nvme0n1 259:0 0 1.8T 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 2G 0 part /boot
└─nvme0n1p3 259:3 0 1.8T 0 part
└─ubuntu--vg-ubuntu--lv
253:0 0 1.5T 0 lvm /var/snap/firefox/common/host-hunspell
無事に成功しました.
volume をファイルシステムに反映させる
$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 189
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 395304960 (4k) blocks long.
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 13G 2.7M 13G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 1.5T 93G 1.3T 7% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/nvme0n1p2 2.0G 435M 1.4G 24% /boot
/dev/nvme0n1p1 1.1G 6.1M 1.1G 1% /boot/efi
/dev/md0 28T 168K 26T 1% /mnt
tmpfs 13G 84K 13G 1% /run/user/131
tmpfs 13G 72K 13G 1% /run/user/1000
無事に反映できました.
動作確認
無事に Docker が動き始めました!
最後に
参考にさせていただいた記事を以下にまとめておきます.