Ubuntu 21.10 编译内核一个无语的坑: make modules_install 报错:No space left on device
Ubuntu21.10 编译安装内核模块的问题
·
背景
由于之前需要研究 eBPF,安装了最新的 Ubuntu 21.10,之前也在这个系统中多次编译过 Linux 5.16 内核,今天准备研究下 Docker,发现居然没有安装,安装后发现 Docker 服务无法启动,查看日志如下:
Apr 15 14:32:54 ubuntu21 kernel: [ 539.239900] loop0: detected capacity change from 0 to 209715200
Apr 15 14:32:54 ubuntu21 kernel: [ 539.281632] loop1: detected capacity change from 0 to 4194304
Apr 15 14:32:54 ubuntu21 kernel: [ 539.312291] device-mapper: table: 253:1: thin-pool: unknown target type
Apr 15 14:32:54 ubuntu21 kernel: [ 539.312370] device-mapper: ioctl: error adding target to table
Apr 15 14:32:54 ubuntu21 dockerd[2414]: time="2022-04-15T14:32:54.250403471Z" level=error msg="[graphdriver] prior storage
driver devicemapper failed: devicemapper: Error running deviceCreate (CreatePool) dm_task_run failed"
Apr 15 14:32:54 ubuntu21 dockerd[2414]: failed to start daemon: error initializing graphdriver: devicemapper: Error runnin
g deviceCreate (CreatePool) dm_task_run failed
花了一些时间最后定位是编译配置内核时 CONFIG_DM_THIN_PROVISIONING 选项没有配置,导致缺少一个 dm_thin_pool 的模块,致使 Docker 服务无法启动。
接下来就重新编译安装内核模块,但尝试多次均出现这个错误:
INSTALL /lib/modules/5.16.5/kernel/net/sched/sch_teql.ko
SIGN /lib/modules/5.16.5/kernel/net/sched/sch_teql.ko
INSTALL /lib/modules/5.16.5/kernel/net/tls/tls.ko
cp: error writing '/lib/modules/5.16.5/kernel/net/tls/tls.ko': No space left on device
make[1]: *** [scripts/Makefile.modinst:81: /lib/modules/5.16.5/kernel/net/tls/tls.ko] Error 1
make[1]: *** Deleting file '/lib/modules/5.16.5/kernel/net/tls/tls.ko'
make: *** [Makefile:1772: modules_install] Error 2
之前从没有出现过这个错误,我以为是 /root 目录磁盘空间满了,只好 df 命令看了下:
root@ubuntu21:~/linux-5.16.5# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 95M 832K 94M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 19G 15G 3.4G 81% /
copymods 471M 468M 2.7M 100% /usr/lib/modules
tmpfs 471M 0 471M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 974M 232M 675M 26% /boot
tmpfs 95M 4.0K 95M 1% /run/user/0
看到这行
copymods 471M 468M 2.7M 100% /usr/lib/modules
这是什么鬼!居然内核模块单独安装到了一个 copymods 的文件系统,这个大小只有471M,已经没有空间了!!!
解决办法
按这个线索搜索,原来是系统安装了 cloud-initramfs-copymods 这个软件,接下来
apt-get remove cloud-initramfs-copymods
将这个软件卸载,重启系统,然后重新安装内核模块,Docker 服务可以正常启动了!
感想
如果喜欢折腾编译内核之类的操作,还是尽量少用很新的 Linux 发行版,不知道会突然出现什么幺蛾子,网上资料也很少!
今日我遇到这个问题就发文记录下来,避免后人走弯路。
更多推荐
已为社区贡献13条内容
所有评论(0)