首页 > 其他分享 >空洞文件

空洞文件

时间:2024-07-05 14:43:19浏览次数:12  
标签:文件 空洞 fd 磁盘 分配 存储空间

实际上这些数据并没有被存储在磁盘上。
    当创建一个空洞文件时,文件系统会记录这些“空洞”,但并不会在物理介质上实际分配和保存未使用的空间,从而节省了实际的存储空间。 举例来说,如果你创建一个大小为1GB的空洞文件,其中写入了大量的零字节据,实际上只有少量的数据(例如文件指针处的数据)会占用磁盘空间,而其余的部分会被标记为空洞,不会占用实际的存储空间。
1. 节省存储空间 
     空洞文件允许程序在文件中创建大段未实际分配的空间。这意味着即使文件看起来很大,但其实际占用的磁盘空间可能要小得多。例如,一个包含大量零字节的文件可以通过空洞文件的方式有效地节省存储空间。 
2. 提高文件处理效率
     由于空洞文件在逻辑上包含了大量数据,但是这些数据实际上没有被存储在磁盘上,因此读写操作可以更快。文件系统不需要在物理介质上实际分配和管理这些未使用的空间,从而减少了I/O操作。
3. 简化文件管理 
     在某些应用场景中,比如数据库文件、虚拟机磁盘映像文件和日志文件,预先分配大块的空间是常见操作。使用空洞文件,可以简化这些文件的管理和维护,因为不需要实际分配和初始化整个文件空间。 
4. 延迟分配 
     空洞文件允许延迟分配存储空间。只有当数据实际写入文件时,才会分配存储空间。这对于那些需要动态增长的文件来说非常有用,例如日志文件或者数据库文件。
5. 备份和恢复 
     空洞文件在备份和恢复过程中也有优势。一些现代的备份工具和文件系统(例如rsync和ZFS)能够识别和处理空洞文件,从而避免备份未使用的空间,提高备份速度并节省存储资源。 
6. 虚拟化环境中的应用
     在虚拟化环境中,空洞文件经常用于虚拟磁盘映像。虚拟机使用的磁盘映像文件通常会预留很大的空间,但其中只有一部分实际被使用。空洞文件可以显著减少虚拟磁盘映像文件的物理存储需求。

/******************************************************************************************************
 * @file name:		  : 创建一个空洞文件.c
 * @brief  		      :创建空洞文件
 * @author 		      :[email protected]
 * @date 			  :2024/07/05
 * @version 1.0 	  :V1.0
 * @property 		  :暂无
 * @note   		      :None
 * CopyRight (c)  2023-2024   [email protected]   All Right Reseverd
 *******************************************************************************************************/

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc,char *argv[])
{
	umask(0000);
  int fd = open("sparse_file.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);

  if (fd == -1)
  {
    perror("open");

    return 1;
  }

  // 将文件偏移量设置到 1GB 位置
  if (lseek(fd, 1024 * 1024 * 1024, SEEK_SET) == -1)
  {
    perror("lseek");

    close(fd);

    return 1;
  }

  // 写入一个字节
  if (write(fd, "a", 1) != 1)
  {
    perror("write");

    close(fd);

    return 1;
  }

  close(fd);

  return 0;
}


image


image

标签:文件,空洞,fd,磁盘,分配,存储空间
From: https://www.cnblogs.com/hhail08/p/18285715

相关文章

  • 断点续传:使用java对大文件进行分块与合并
    通常我们下载上传的视频文件比较大。虽然https协议没有规定上传文件大小的限制,但是网络的质量,电脑硬件的参差不齐可能会导致大文件快要上传完成的时候突然断网了要重新上传,非常影响用户体验。以此我们引入了断点续传的功能。什么是断点续传呢?就是我们在上传下载文件的时候,将一个......
  • Linux 文件系统以及日志管理
    一、inode与block1.inode与block详解在文件存储硬盘上,硬盘的最小存储单位叫做“扇区”,每个为512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小......
  • golang go-bindata打包配置文件嵌入到二进制文件
    go-bindata打包配置文件嵌入到二进制文件项目中难免会用到一些静态资源和配置文件,但是常规打包的二进制文件无法再其他目录正常运行(静态资源和配置文件不存在)有类似需求的可以安装使用:go-bindata进行编译处理配置文件go-bindata(go-bindata)包实现将项目静态配置文件嵌......
  • linux 服务器与本地文件传输
    相信有的小伙伴在刚开始接触linux时,不知道如何把文件上传到linux中,本文介绍两种方式供大家使用(推荐使用第二种)一.scp传输scpC:\\[email protected]/root/.....使用上述指令,即可实现将制定文件传输到服务器中,其中C…以及/root/…需要换成你自己的路径。165…........
  • 探寻操作系统文件名字符限制的规则和历史
    引言从最早的电脑系统到现代的操作系统,文件命名的规则一直在不断发展,这些规则体现了不同操作系统设计哲学的差异。作为开发者,了解这些差异和背后的历史渊源非常有价值,本文将详细探讨Windows、macOS和Linux三大主流操作系统在文件名字符限制方面的差异和背后的历史原因。Wi......
  • Qt(二)弹窗类 颜色对话框 字体对话框 资源文件
    文章目录一、QDebug类和QMessagebox类(一)QDebug类:打印调试类(二)QMessagebox类:弹窗类2.修改组件图标(1)通过ui界面(2)通过QIcon的方式(3)通过QPixmap类3.使用示例(1)实例化对象实现2.静态函数版本二、颜色对话框和字体对话框类(一)QColorDialog(二)QFontDialog三、资源文件(一)添......
  • SQL Server 中用于备份数据库的 BACKUP 命令提供了多种选项和灵活性,主要包括以下几种:S
    SQLServer中用于备份数据库的BACKUP命令提供了多种选项和灵活性,主要包括以下几种:1.完整备份(FULL)完整备份将整个数据库备份到指定的备份介质(如磁盘或磁带)。语法如下:sqlCopyCodeBACKUPDATABASEdatabase_nameTOdisk='backup_device_path'[,...n]database_name:要备......
  • 1.1 PowerQuery从工作薄文件中获取数据
    PowerQuery从工作薄文件中获取数据时会自动生成四个步骤,点击【转换数据】后自动生成。尽管全是自动生成,只需要鼠标操作即可,但若了解这其中发生了什么,才更有利于以后更加方便的去处理其他复杂场景下的需求。搞清楚这四步都做了什么可点击【高级编辑器】查看这四步查询......
  • MTK Android 12 环境中编译生成 NVRAM 相关 JAR 文件调用的完整步骤
    在本文中,我将详细介绍如何在MTK方案Android12环境中,从初始配置到生成[email protected]_intermediates/classes.jar文件给应用调用INvramagent=INvram.getService();的完整过程。最开始想解决这个问题的原由,是因为想在AS里调用INvram......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线打开 word文件并另存HTML或
    国产linux系统(银河麒麟,统信uos)使用PageOffice国产版在线打开pdf文件PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)芯片架构。查看本示例演示效果本示例关键代码的编写位置Vue+Springboot注意本文中展示的......