精华内容
下载资源
问答
  • 相信接触过Linux操作系统的同学一定使用过ls -l这个命令吧,你你的命令行解释器下输入这个命令后,打印出了下图的几列信息。 这些信息对应了文件下面的属性: 文件权限 文件硬链接数 文件所有者 文件所属组 ...

    文件系统

    相信接触过Linux操作系统的同学一定使用过ls -l这个命令吧,你在你的命令行解释器下输入这个命令后,打印出了下图中的几列信息。
    在这里插入图片描述
    这些信息对应了文件下面的属性:

    • 文件权限
    • 文件硬链接数
    • 文件所有者
    • 文件所属组
    • 文件大小
    • 修改日期和文件名字

    当然你也一定使用过cat,more或者less命令来查看文件内容,请注意,我们上面实际上是提到了文件的两个特点文件属性文件内容,这篇博客就来给大家讲解文件是如何存在磁盘上的。

    磁盘模型

    在这里插入图片描述
    你可以把箭头指向的这两个同心圆从某部分断开,就像拉成磁带的那样的长条一样。,磁盘是典型的块设备,所以这些条也就是硬盘分区被划分为一个个的block,每个块的大小被定为1024、2048或4096字节。
    在这里插入图片描述
    这些分区具体被分为多大其实这些分块是被一个叫boot block的东西管理着:

    boot block:boot block 是芯片设计厂家在LPC2000系列微控制器内部固化的一段代码,用户无法对其修改和删除。这段代码在芯片复位后首先被运行,其功能主要是判断运行那个存储器上的程序、检查用户代码是否有效、判断芯片是否被加密、芯片的在应用以及在系统编程功能。
    在这里插入图片描述
    而我们的文件就被存在这些块上,我们现在来看看这些block group中的结构是怎么样的:
    在这里插入图片描述
    不明白这6部分到底是什么东西先不要着急,我们一个一个来说

    inode table

    首先你需要知道什么是inode,其实inode也是一个结构体,还记得我们之前提到的文件属性吧,inode结构体中存放的就是文件的属性,记住这里仅仅存放的是属性,内容会存放在另一个小部分中

    这里有一个问题,一个空文件有inode结构体么?当然,我们说了,这里存放文件属性,所以空文件也有文件属性呀。

    inode bitmap

    我们每个文件都对应了一个inode,就像每个进程都有一个pcb一样,我们为了找到这些对应的inode,所以每个inode也拥有独一无二inode号,就好比pid一样。

    说到这里,inode bitmap的作用就明了了,这个位图就是用来判断此位置映射的inode号有没有被其他文件所占用,占用了这个位就会设为1,否者为0,这些位图对应了inode table中的某一个位置

    block bitmap

    Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没 有被占用

    data blocks

    存放数据的数据块

    super block

    存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的 时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了

    group descriptor table

    块组描述符,描述块组属性信息

    数据存放

    在这里插入图片描述
    我们来看看一个文件的数据是如何存放到磁盘中的:

    • 检查inode位图是否为空
    • 如果某比特位为空则将其由0置为1
    • 把对应的文件属性写在此inode位图相应的inode节点中
    • 给这个对应的inode号分配block空间,写入数据
    • 将这个block块号也存到inode中,并把对应的block bitmap所对应的位置置为1
    • 将文件名字和ionde号映射关系写入目录文件的内容中

    我们这里的最后一条为什么要把文件名字和ionde号映射关系写入目录文件的内容中呢?其实我们访问一个文件是通过inode号从磁盘中查找的,而我们发现我们访问文件时使用的都是文件名,那么说明一定有某个东西帮助我们将文件名字转化为inode号,这里的工作其实是目录文件帮我们完成的。

    有没有发现一个文件下不可以拥有同名文件,所以目录的内容实际上维护了本目录中所有文件名字和其inode号的映射关系,这里也就是为什么需要有我们上面的最后一条。

    再来看看如何删除磁盘中的一个文件

    • 将文件对应的数据block块从1置为0
    • 将文件对应的inode号从1置为0

    不要惊讶,有没有发现我们下载一个文件要几小时,而删除只需要几秒,这其实是一种假删除,我们并没有真正意义上删除数据,这也为恢复数据做了铺垫。

    总结

    其实文件在磁盘中的存储还有很多细节,有兴趣的同学可以自己下去查查哦。

    展开全文
  • 磁盘分区,文件在磁盘上的存储

    千次阅读 2017-11-22 17:07:16
    最近啃鸟哥的书,前面因为有一些基础,迷迷糊糊的还看得懂,看到后来文件磁盘的时候,整个人都是糊的,所以又跑到51CTO学院去找视频学,有幸找到了韩立刚老师的一套视屏,一下子就把我之前迷糊的地方具体生动的...

    最近在啃鸟哥的书,前面因为有一些基础,迷迷糊糊的还看得懂,看到后来文件、磁盘的时候,整个人都是糊的,所以又跑到51CTO学院去找视频学,有幸找到了韩立刚老师的一套视屏,一下子就把我之前迷糊的地方具体生动的讲述了出来,下面是我的一些学习笔记。

    一、磁盘物理结构
    盘片、机械手臂、磁头、主轴马达
    这里写图片描述
    磁盘构成描述:磁道、扇区、柱面
    这里写图片描述

    主引导扇区:0磁道0柱面1扇区,分为
    1、主引导记录MBR
    2、分区表DPT共64字节(每个分区信息占16字节,故最多四个分区)
    想要实现更多分区,可利用扩展分区(指向一个更大空间存更多分区信息)创建多个逻辑分区
    3、硬盘有效标志位(标记MBR是否有效)
    

    二、分区和文件系统
    硬盘制造–》低级格式化(划分扇区、柱面)–》高级格式化(划分地方存文件、文件夹)
    文件系统组成图
    这里写图片描述

    每个文件都有一个iNode记录(iNode编号、一些属性),通过属性可以找到文件的磁盘块位子,从而读取文件内容。
    磁盘块可根据自身需求改变大小
    iNode位图是为了,快熟索引可用的iNode号码,块位图是为了快速索引可用的磁盘块
    磁盘块可自由指定大小
    iNode属性记录图
    iNode属性构成
    1、iNode属性信息中没有文件名
    2、直接块直接指向存取数据的磁块,一级间址先指向一块区域,该区域记录多条信息指向磁块,以此类推二级、三级、从而实现大文件的存取记录。

    三、文件夹磁盘块
    文件必须依赖文件夹而存在,先有文件夹,才能有文件
    文件夹也有iNode,和相对应的存信息的磁块,叫做目录磁盘块,记录文件夹中文件的文件(文件夹)名字、iNode号。
    这里写图片描述

    通过文件夹找文件的过程图
    这里写图片描述

    创建文件的过程
    1、扫描iNode位图,找一个空闲的iNode号并占用(找一个男朋友)
    2、查找相应目录磁块,添加文件名和iNode号(民政局登记)
    3、扫块位图,为文件分配磁盘块(买房同居)

    删除文件过程
    1、目录条目删除
    2、iNode位图清空
    3、块位图中清空

    由此可见,当不小心误删一个文件后,实际磁盘中的内容并没有清空,还是可以通过一些手段恢复的,若在删除之后进行了复制创建新文件等操作,则导致原文件内容被覆盖而不可恢复。
    还有传说中的粉碎文件技术,就是在文件删除后,再向文件对应的磁盘填充随机数,使其不可恢复。

    展开全文
  • 磁盘I/O几种访问文件方式

    千次阅读 2017-05-12 20:53:20
    下面是几种访问文件方式:1、标准访问文件方式: 当应用程序调用read()接口时,操作系统检查内核的高速缓存有没有需要的数据,如果已经缓存了,那么就直接从缓存返回,如果没有,则从磁盘中读取

    我们知道,读取和写入文件I/O操作都调用操作系统提供的接口,因为磁盘设备是由操作系统管理的,应用程序要访问物理设备只能通过操作系统调用的方式工作。读和写对应read()和write()两个系统调用。下面是几种访问文件的方式:

    1、标准访问文件的方式:

    当应用程序调用read()接口时,操作系统检查在内核的高速缓存中有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回,如果没有,则从磁盘中读取,然后缓存在操作系统中。
    写入的方式是,用户的应用程序调用write()接口将数据从用户地址空间复制到内核地址空间的缓存中。这时对用户程序来说写操作就已经完成,至于什么时候再写到磁盘中由操作系统决定,除非显式地调用了sync同步命令。

    2、直接I/O方式:

    应用程序直接访问磁盘数据,而不经过操作系统内核数据缓冲区,这样做的目的就是减少一次从内核缓冲区到用户程序缓存的数据复制。这种访问方式通常是数据库等对数据的缓存管理由应用程序实现的管理系统中。

    3、同步访问文件的方式:

    数据的读取和写入都是同步操作的,它与标准访问文件的方式不同的是,只有当数据被成功写到磁盘时才返回给应用程序成功的标志。这种方式性能比较差,只有在一些对数据安全性要求比较高的场景中才会使用。

    4、异步访问文件的方式:

    异步访问文件的方式就是当访问数据的线程发出请求之后,线程会接着去处理其他事情,而不是阻塞等待,当请求的数据返回后继续处理下面的操作。这种访问文件的方式可以明显地提高应用程序的效率,但是不会改变访问文件的效率。

    5、内存映射的方式

    内存映射的方式是指操作系统将内存中的某一块区域与磁盘中的文件关联起来,当要访问内存中的一段数据时,转换为访问文件的某一段数据。

    不同的访问方式有不同的特点和性能,适合不同的情况,当我们想要优化自己项目中的I/O访问速度时,就需要对这些访问方式有必要的了解。

    展开全文
  • 转载自: ...   ort 声明的路径正确,且磁盘存在... - 兰博基尼 - 惮惮的博客" border="0" alt="无法读取项目文件 .csproj,请确认 Import 声明的路径正确,且磁盘存在文件。 - 兰博基尼 - 惮惮的博客" src=

    转载自: http://www.cnblogs.com/sheseido/archive/2010/10/27/1862496.html

     

    无法读取项目文件 .csproj,请确认 Imp<wbr>ort 声明中的路径正确,且磁盘上存在该文件。 - 兰博基尼 - 惮惮的博客

     

    无法读取项目文件 .csproj,请确认 Imp<wbr>ort 声明中的路径正确,且磁盘上存在该文件。 - 兰博基尼 - 惮惮的博客

    找了相关的错误,找不到原因,其他的项目文件都加载进去,但不知为什么这个加载不进去。我就查看了一下其他项目的.csproj的文件,与发生错误的.csproj文件核对下,

    把其中 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
        <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
    改为:

     

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" Condition="'$(Solutions.VSVersion)' == '8.0'" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="'$(Solutions.VSVersion)' == '9.0'" />    

    都可以加载进去项目文件了!这个一般在网上下载的项目,或者朋友给的项目总出这样问题,开始一直都没解决,今天不知道怎么来灵感了。去对照了一下各自的.csproj文件中的<Import>节点的配置!结果还真给解决了问题,不错。呵呵高兴!

    以下方法是我在网上搜的,我用的是vs2008版本!估计是他是用的vs2005版本的。

    大家经常会非常辛苦的在网上找到自己想要的源程序,在我们欣喜若狂打开的时候,却提示“未找到导入的项目“$:\Boo.Microsoft.Build.targets”。请确认 <Import> 声明中的路径正确,且磁盘上存在该文件。

    解决办法:将项目文件(.csproj)用记事本打开,然后找到<Import >节点,作如下操作:
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />  
    替换为: 
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />   这个才是最终的解决方案!!!

    展开全文
  • java访问磁盘文件

    千次阅读 2018-05-10 19:24:09
    转载,务必写上原文链接 !(尊重与你分享知识的人) 目录 ...数据在磁盘中的唯一最小描述就是 文件 ,也就是说应用程序只能通过操控 文件 来操作磁盘上的数据; File 对象 VS FileDe...
  • 找了相关的错误,找不到原因,其他的项目文件都加载进去,但不知为什么这个加载不进去。...这个一般在网上下载的项目,或者朋友给的项目总出这样问题,开始一直都没解决,今天不知道怎么来灵感了。去对照了
  • Python3打开文件方式(With open)

    万次阅读 多人点赞 2018-08-05 19:53:16
    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘。 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作...
  • 本地磁盘创建文件目录
  • visual studio 开发遇到的问题
  • Linux: 磁盘文件系统管理

    万次阅读 2014-09-28 23:56:23
    du:评估文件系统的磁盘使用量(常用推估目录所占容量)# df [-ahikHTm] [目录或文件名] 选项与参数: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统; -k :以 KBytes
  • 今天打开vs突然报了一个错......... .wpp.targets。请确认 <Import> 声明的路径正确,且磁盘存在文件 重新新建一个项目,dll全部都是黄色感叹号 ...
  • //文件存在则创建文件,先创建目录 if (!file.exists()) { File dir = new File(file.getParent()); dir.mkdirs(); file.createNewFile(); } //文件输出流将数据写入文件 FileOutputStream ...
  • springboot 上传文件保存本地磁盘

    千次阅读 2019-04-23 15:27:34
    1.修改application.properties配置文件,设置保存磁盘地址(方便以后修改) upload.path = /Users/myname/Documents/upload/ 地址自定义即可,这是我本机地址,Windows可设置:d:\\upload 自定义即可 2.创建Api...
  • 自定义文件系统下的磁盘访问次数计算

    千次阅读 多人点赞 2016-10-20 15:07:19
    有一个文件系统如图所示:图的方框表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成...每个目录的文件磁盘块的最后4B供拉链使用。下级目录文件上级目录文件的次序是从左往右。每个磁盘块有512B
  • 请确认 声明的路径正确,且磁盘存在文件。 opencv C:\Users\Administrator\Desktop\opencv\opencv\opencv.vcxproj一、背景二、解决方法1、打开报错文档。2、删除多出的语句。3、重启VS项目。4、修改属性管理器...
  • Linux_文件系统、磁盘分区_RHEL7

    千次阅读 2015-11-17 23:31:04
    磁盘分区 分区的类型 分区最小存储单元 查看当前分区的block的大小 分区格式 MBR格式 GPT格式 mount挂载指令 挂载永久生效 XFS相关指令 swap分区 增加swap分区 修改swap分区的优先级前言RHEL7使用了XFS文件系统,而...
  • Linux命令------文件磁盘管理

    千次阅读 2018-08-07 12:30:07
    Linux的 文件磁盘管理命令是经常使用的,今天总结了一上午,快崩溃了,,,, Linux命令-文件磁盘管理 1.查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它...
  • Linux磁盘文件系统管理

    千次阅读 2016-06-26 22:26:51
    系统管理的重要任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生文件无法存储的困扰。 认识EXT2文件系统 Linux最传统的磁盘文件系统使用的是EXT2。 ...
  • 磁盘根目录下隐藏病毒文件删除

    千次阅读 2015-10-11 16:59:05
    昨天出差去抚顺客户的店铺里维护电脑,发现其店铺的电脑都存在...但是根据手工现有的工具没有办法删除隐藏在磁盘根目录的病毒文件,所以采取了以下措施: 一、任务管理器结束Rundll.exe这个进程。必须先这样做
  • 数据在磁盘中的存储结构

    千次阅读 2018-09-04 23:51:38
    磁盘中的存储方式主要有两种:  1.连续的存储方式:多用于数组。  2不连续的存储方式:链式存储方式,主要是因为某一块区域的内存不能连续的容纳索要存储的数据,所以采用链式的存储方式 ...
  • rm 删除文件磁盘依然占用

    千次阅读 2018-09-10 15:38:22
    lsof命令用于查看你进程...linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统后台都...
  • 文件明明存在,File.Exists就是返回false。。。 如果我用File.ReadAllText去读取的话,会报下面的异常。 之前都是可以用的,昨天晚上然后突然发现这些调用不能用了。 [img=...
  • Mysql 索引实现: 聚簇索引: 索引 和 数据文件为同一个文件。非聚簇索引: 索引 和 数据文件...MyISAM索引原理:采用非聚簇索引-MyISAM myi索引文件和myd数据文件分离,索引文件仅保存数据记录的指针地址。叶子节...
  • Ext3和Ext4文件系统磁盘布局

    千次阅读 2011-01-10 22:11:00
      磁盘布局 为了更好的理解在线调整大小工作机制,我们首先需要理解 ext3 和 ext4 文件系统的磁盘布局,对于该功能的实现来说,这两个文件系统在磁盘上的结构是一致的,同时为了简化和突出重点,...
  • 如果你的磁盘(最好是外接磁盘:U盘和移动硬盘)Windows下因为不正常操作(比如数据传输过程不小心拔掉等相关问题),导致我的磁盘中不能正常识别或显示(或即使显示但磁盘格式存在问题),一般可以通过diskpart...
  • ->winhex查看FAT ,一般比较依赖boot template(这里面反应的是BPB的内容)来定位FAT1、FAT2、根目录等(还没查看过具体内容) ->FAT表上前4个字节是编号第1簇(描述介质F8 FF FF 0F或F8 FF FF FF) ->DB
  • VS2010错误:未找到导入的项目XXX,请确认声明的路径正确,且磁盘存在文件。 E:\IGSNRR\dev\PhDThesisCode_CUDA\gtcg\gtcg.vcxproj : error : 未找到导入的项目“C:\Program Files (x86)\MSBuild\...
  • SVN上传文件提示磁盘空间不足的问题SVN上传文件大于100M,提示:Commit failed (details follow):While preparing 'E:\AFCData\tjsc20db_table.sql' for commitCould not write
  • Linux 磁盘分区和文件系统

    千次阅读 2011-10-05 00:01:51
    本文以Ext2文件系统为例讲述Linux文件系统,由于Ext3文件系统是直接从Ext2文件系统发展而来,它完全兼容Ext2文件系统,所以本文的内容对于Ext2和Ext3都是适用的。   我们首先看一下磁盘分区和文件系统的结构图: ...
  • FAT32文件系统磁盘I/O参数揭密

    千次阅读 2012-08-14 23:10:49
    Windows 98操作系统引入了FAT32文件系统,它彻底解决了FAT16文件系统存在的诸多问题。所谓FAT32文件系统实际上就是用32位数据来描述磁盘簇的分配,而传统的磁盘管理是用16个二进制位(2个字节)来描述一个簇。从操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 529,757
精华内容 211,902
关键字:

一般文件在磁盘中存在的方式