奇点:如何释放循环设备?

Vin*_*nce 5 linux mount bamboo singularity-container

在服务器上,我们将持续集成作业作为奇点图像的运行脚本运行,例如

wget url_to_mysingularityimage.sif
chmod +x ./mysingularityimage.sif
./mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)

如果这是相关的:在我们的具体情况下,运行脚本是一个 bash 脚本。效果很好。

执行作业后,图像将被删除。

rm ./mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)

但看起来对应的循环设备仍然存在,即

losetup -a | grep mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)

输出类似:

/dev/loop27: []: (/path/to/mysingularityimage.sif (deleted)), offset 40960, sizelimit 831307776
Run Code Online (Sandbox Code Playgroud)

当我们运行作业时,循环设备的数量会增加。在某些时候,达到了循环设备的限制数量,奇点失败并出现错误:

FATAL:   container creation failed: mount /proc/self/fd/3->/usr/local/var/singularity/mnt/session/rootfs error: while mounting image /proc/self/fd/3: failed to find loop device: could not attach image file to loop device: no loop devices available
Run Code Online (Sandbox Code Playgroud)

我们是不是做错了什么?是否有一个命令我们需要在每个作业结束时运行以确保循环设备被“释放”?

(注意:我们使用bamboo进行持续集成,并且bamboo总是在新目录中执行工作,这可以解释为什么相同的循环设备没有被重用。Bamboo:https: //www.atlassian.com/software/bamboo) 。