loop设备的删除

本文详细探讨了如何在Linux中删除loop设备,包括`del_loop`函数的工作原理,指出`LOOP_CLR_FD`命令并不能彻底删除gendisk设备和释放内存。通过分析`loop_control_ioctl`的`LOOP_CTL_REMOVE`命令,发现`loop_remove`才是删除loop设备的关键。最后提供了一个测试用例,验证了正确删除loop设备能回收内存。
摘要由CSDN通过智能技术生成
前段时间工作时,测试反馈了这样的一个问题:用-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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值