``failed to register layer: no space left on device''への対処法

# 始めに
Docker で環境を立ち上げようとしたところ以下のエラーが発生しました．

```bash
failed to register layer: write ***: no space left on device
```

デバイスの容量不足？？
Docker を立ち上げているマシンは SSD 2TiB と HDD 40TiB がマウントされており，組み上げてからそれほど時間が立っていません．なので，ディスク容量が足りないというのは疑わしい･･････

# 原因究明
先ずは，エラーメッセージで検索をおこないました．その結果，この記事を発見しました．

https://zenn.dev/aiq_dev/articles/931a8f58f80359

内容を一言でまとめると，「Dockerがストレージを使いすぎている」とのことでした．
[この記事](https://zenn.dev/aiq_dev/articles/931a8f58f80359)に示されている方法で，Docker が使用しているストレージ容量をチェックしました．

```bash
$ 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 にさえ達していません．

そこで，次に，検索ワードを変更し，ストレージ容量の割り当てが原因ではないかと当たりを付けて検索しました．その結果，この記事を発見しました．

https://note.com/billy_init/n/nff75ae1e77ae

# エラー対処
目的の記事が見つかったので，その記事に従ってエラー対処を進めます．
一部の操作で，参考記事とは異なる操作をしているので，その点が気になる方は元の記事を参照されて下さい．

## ストレージ割り当ての確認
```bash
$ 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%`が異常なファイルシステムを発見しました．（ちなみに，[参考記事](https://note.com/billy_init/n/nff75ae1e77ae)の方の原因もこのファイルシステムでした．このファイルシステムが何なのか，ご存知の方がいらっしゃれば教えて頂きたいです．）

## Volume Group の確認
```bash 
$ 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` ......
これが原因ですね......

ここから先は，以下の記事を参考に進めました．

https://www.ytyng.com/blog/lvm-partition-extend-full-remain-volume/

## パーティションの確認
```bash 
$ 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 しか割り当てられておらず，割り当てが適切でないことが確認できました．

## 論理パーティションへのストレージ割り当て
[参考記事](https://www.ytyng.com/blog/lvm-partition-extend-full-remain-volume/)の方では最大まで論理パーティションを拡張していましたが，論理パーティションを全て使い果たすことにどんなデメリットがあるか分からなかったので，とりあえず80%まで割り当てることにしました．

```bash 
$ 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 をファイルシステムに反映させる
```bash 
$ 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
```

無事に反映できました．

# 動作確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693436/c1005276-d9b2-8209-49b9-7933517135b5.png)

無事に Docker が動き始めました！

# 最後に
参考にさせていただいた記事を以下にまとめておきます．

https://zenn.dev/aiq_dev/articles/931a8f58f80359

https://note.com/billy_init/n/nff75ae1e77ae

https://www.ytyng.com/blog/lvm-partition-extend-full-remain-volume/