#結論
- DockerをNILFS2 filesystem上で使う場合、storage driverを "devicemapper"に設定せよ。
/etc/docker/daemon.json
{
"storage-driver": "devicemapper"
}
背景
Raspberry PI3bを常用する際に一番怖いのはSDカードがある日突然壊れること。
そこで/(rootfs) をNILFS化したのだが、dockerがうまく動かなかったのでメモしておく。
当方環境
32GBのmicro SDカードのみで運用。/dev/mmcblk0p2をNILFS2にしてます。
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.4.79-v7+ #1373 SMP Mon Nov 23 13:22:33 GMT 2020 armv7l GNU/Linux
pi@raspberrypi:~ $ df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
udev devtmpfs 424M 0 424M 0% /dev
tmpfs tmpfs 93M 8.7M 84M 10% /run
/dev/mmcblk0p2 nilfs2 30G 19G 9.6G 66% /
tmpfs tmpfs 463M 4.0K 463M 1% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat 253M 68M 185M 27% /boot
tmpfs tmpfs 93M 4.0K 93M 1% /run/user/1000
pi@raspberrypi:~ $ docker version
Client:
Version: 18.09.1
API version: 1.39
Go version: go1.11.6
Git commit: 4c52b90
Built: Fri, 13 Sep 2019 10:45:43 +0100
OS/Arch: linux/arm
Experimental: false
Server:
Engine:
Version: 18.09.1
API version: 1.39 (minimum version 1.12)
Go version: go1.11.6
Git commit: 4c52b90
Built: Fri Sep 13 09:45:43 2019
OS/Arch: linux/arm
Experimental: false
お試しした storage driver
- overlay2 (default) ... △ (hello-world, busyboxは動く。だがubuntuとか大きめの(複数レイヤがある)イメージはpullできない。
- overlay ... × (permission deniedと言われて全く動かない)
- vfs ... ○、だが、パフォーマンスが最悪。
- devicemapper ... ◎。問題なく動いているようだ。
devicemapperてどうやって動いてるの?
見た目巨大なsparseファイルを予め作成して、それを切り出して使っているようだ。
32GBしかないSDカード上に100Gのファイルがあるのを見るのは新鮮だ。w
root@raspberrypi:/var/lib/docker# ls -lh devicemapper/devicemapper/data
-rw------- 1 root root 100G 12月 29 08:34 devicemapper/devicemapper/data
残項目
- Raspbian OSの rootをNILFS化する手順をメモ化。(案外いろんなところでハマりました)