热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

打洞(Punchahole):回收存储空间(File、Block以及其他)

打洞(Hole-punching)这个看起来有点土,容易让人想到“龙生龙凤生凤,老鼠的儿子会打洞”。在虚拟机出现之前,这个问题可能还不太被大家所了解。VM通常会有个很大的文件作为G

打洞(Hole-punching)这个看起来有点土,容易让人想到“龙生龙凤生凤,老鼠的儿子会打洞”。在虚拟机出现之前,这个问题可能还不太被大家所了解。VM通常会有个很大的文件作为Guest OS的存储,可是你在Guest OS里头删除了很多文件后,这个文件还是占据了很多的空间。怎么让Host文件的文件系统回收掉这些空间呢?如果这些存储是在Amazon这样的地方,占据一堆不用的空间会导致花了冤枉钱。

实际上,高端存储产品中很早就支持类似的功能(Thin Provisioning),例如NetApp这个Blog文章:https://communities.netapp.com/community/netapp-blogs/efficiency/blog/2010/08/04/punching-holes。有兴趣的话,可以深挖一下TRIM,以及SCSI的WRITE_SAME、UNMAP。

这里有个不那么高大上的场景,但是涉及到的场景很有意思,而且可能更好理解一点:https://code.google.com/p/s3backer/wiki/UnsedBlockDeletion。要是一步步测试的话,可以参考这个:http://www.outflux.net/blog/archives/2012/02/15/discard-hole-punching-and-trim/

Linux最初的支持:http://lwn.net/Articles/415889/。更接地气的当属这个,把示例代码都给出来了:https://bitbucket.org/cheater/sparsify/src/9dc09d3f956be44684da294327a622b61041eae1/sparsify.c?at=default#


打洞(Punch a hole):回收存储空间(File、Block以及其他),布布扣,bubuko.com


推荐阅读
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • LIN总线技术详解
    LIN(Local Interconnect Network)总线是一种基于UART/SCI(通用异步收发器/串行接口)的低成本串行通信协议,主要用于汽车车身网络中智能传感器和执行器之间的通信。 ... [详细]
  • 在使用KVM虚拟化技术通过NAT模式启动虚拟机时,可能会遇到qemu-ifup-nat脚本执行失败的错误。本文将详细介绍如何诊断和解决这一问题。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
author-avatar
tuir
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有