前段时间工作时,测试反馈了这样的一个问题:用-o loop选项mount 500个squashfs文件系统,然后umount -d卸载,对比执行前后的环境,发现系统内存减少了50M左右
最开始怀疑少了的内存是cache占用的,echo 3 > /proc/sys/vm/drop_caches 清cache之后,free内存并没有明显的变化
后面查看到/dev目录下有很多loopx文件,但是我们umount命令加了-d参数,按理解应该会释放loop设备才是:
man umount:
-d, --detach-loop
When the unmounted device was a loop device, also free this loop device.
并且这些loop设备在umount之后,使用losetup -d 也删除不掉,怀疑是busybox不支持-d参数,阅读了一下busybox的losetup的源码
int losetup_main(int argc UNUSED_PARAM, char **argv)
{
……/* -d LOOPDEV */if (opt == OPT_d && argv[0]) {
if (del_loop(argv[0]))
bb_simple_perror_msg_and_die(argv[0]);
return EXIT_SUCCESS;
}……
}
int FAST_FUNC del_loop(const char *device)
{
int fd, rc;