用于存储设备的故障安全操作的系统和方法与流程

文档序号:18090431发布日期:2019-07-06 10:44阅读:126来源:国知局

技术领域
:本公开内容涉及用于与文件系统一起使用的系统和方法,且更具体地,涉及用于实现存储设备的故障安全(fail-safe)操作的技术。
背景技术
::设备包括膝上型计算机或台式计算机、平板计算机、电视机、数字视频录像机、机顶盒、数字媒体播放器、视频游戏设备、视频游戏控制台以及蜂窝电话可以利用文件系统来控制如何将数据存储在计算机可读介质上和如何从计算机可读介质检索数据。例如,设备可以根据定义的文件系统将数据读和/或写到存储设备,诸如,存储卡(例如,安全数字(SD)存储卡,包括标准容量(SDSC)格式、高容量(SDHC)格式和扩展容量格式)、硬盘驱动器,和/或固态驱动器(包括通用串行总线(USB)固态驱动器(所谓的“快闪”、“拇指”或“跳跃”驱动器))。文件系统的类型包括例如基于扩展文件系统(ext)的文件系统、基于分层文件系统(HFS)的文件系统、基于XFS文件系统的文件系统、基于ZFS文件系统的文件系统、基于新技术文件系统(NTFS)的文件系统和基于文件分配表(FAT)文件系统的文件系统,所述文件分配表文件系统包括FAT12、FAT16、FAT32、exFAT和事务exFAT文件系统。设备的使用者并不总是在拔掉或关闭设备和/或存储设备之前卸载卷(volume)。另外,存储设备可能意外地被从设备和/或从电源拔掉或设备可能简单地在操作期间耗尽电池电力。技术实现要素:总体而言,本公开内容描述了用于实现存储设备的故障安全操作的技术。具体地,本公开内容描述了用于分配簇、使簇解除分配、创建索引节点、删除索引节点、重命名索引节点以及其组合的技术。根据本公开内容的一个实施例,一种用于删除索引节点的方法包括将目录条目标记为未在使用中,并且随后使与被标记为未在使用中的目录条目相关联的簇空闲。根据本公开内容的另一个实施例,一种用于删除索引节点的设备包括一个或多个处理器,所述一个或多个处理器被配置成将目录条目标记为未在使用中,并且随后使与被标记为未在使用中的目录条目相关联的簇空闲。根据本公开内容的另一个实施例,一种非暂时性计算机可读存储介质包括存储在其上的指令,在执行所述指令时,导致设备的一个或多个处理器将目录条目标记为未在使用中,并且随后使与被标记为未在使用中的目录条目相关联的簇空闲。根据本公开内容的另一个实施例,一种用于删除索引节点的装置包括用于将目录条目标记为未在使用中的装置和用于随后使与被标记为未在使用中的目录条目相关联的簇空闲的装置。根据本公开内容的一个实施例,一种用于创建目录的方法包括分配用于该目录的簇、初始化分配的簇、将初始化的簇写入磁盘并且随后将目录条目写入磁盘。根据本公开内容的另一个实施例,一种用于创建目录的设备包括一个或多个处理器,所述一个或多个处理器被配置成分配用于该目录的簇、初始化分配的簇、将初始化的簇写入磁盘并且随后将目录条目写入磁盘。根据本公开内容的另一个实施例,一种非暂时性计算机可读存储介质包括存储在其上的指令,在执行所述指令时,导致设备的一个或多个处理器分配用于该目录的簇、初始化分配的簇、将初始化的簇写入磁盘并且随后将目录条目写入磁盘。根据本公开内容的另一个实施例,一种用于创建索引节点的装置包括用于分配用于该目录的簇的装置、用于初始化分配的簇的装置、用于将初始化的簇写入磁盘的装置以及用于随后将目录条目写入磁盘的装置。下文在附图中和说明书中阐明了一个或多个实施例的细节。从说明书、附图和权利要求中将明了其他特征、目的及优点。附图说明图1是例示可以实施本公开内容的一个或多个技术的计算设备的一个实施例的方框图。图2是例示可以实施本公开内容的一个或多个技术的计算设备的操作系统的一个实施例的方框图。图3是例示根据一个示例文件系统定义的卷的一个实施例的概念图。图4A-4B是例示包括与一个索引节点相关联的记录的目录条目的实施例的概念图。图5是例示根据本公开内容的一个或多个技术使分派到索引节点的簇解除分配的一个实施例的概念图。图6是例示根据本公开内容的一个或多个技术使分派到索引节点的簇解除分配的一个实施例的流程图。图7是例示根据本公开内容的一个或多个技术将附加的簇分配到索引节点的一个实施例的概念图。图8是例示根据本公开内容的一个或多个技术将附加的簇分配到索引节点的一个实施例的流程图。图9是例示根据本公开内容的一个或多个技术删除索引节点的一个实施例的流程图。图10是例示根据本公开内容的一个或多个技术创建索引节点的一个实施例的流程图。具体实施方式总体而言,本公开内容描述了用于实现存储设备的故障安全操作的技术。在一个实施例中,故障安全操作可以包括使卷对于不同类型的故障(诸如,自发电力缺失和/或意外存储设备断开)一致。另外,在使卷一致不可能的情况下,故障安全操作可以包括使卷处于不导致任何数据丢失的状态中和/或使卷处于在随后访问数据时数据丢失能够被清理的状态中。存储设备可以根据定义的文件系统管理用户数据。例如,MicrosoftExtensibleFirmwareInitiativeFAT32FileSystemSpecification(版本1.03,2000年12月6日)——其以引用的方式整体纳入本文——定义了FAT32文件系统的多个方面,并且MicrosoftexFATRevision1.00FileSystemBasicSpecification(第四版,01-JAN-2009)——其被描述于美国专利No.8321439的附录A中并且其以引用的方式整体纳入本文——定义了exFAT文件系统的多个方面。文件系统可以指定卷的结构和要求,其中卷是存储和检索用户数据所必需的一组文件系统结构和数据空间。如下文参考图3详细描述的,卷可以包括引导记录、文件分配表以及数据区域。用户数据可以包括目录和文件,其在本文中可以被统称为索引节点。当在卸载卷之前将存储设备拔掉或电力缺失发生时,数据损坏可能发生。例如,FAT和exFAT文件系统都可能使损坏发展,诸如例如,交联簇、丢失簇、损坏目录以及损坏文件。在一些实施方式中,NTFS、ext3/4和XFS文件系统可以使用日志报表来克服与过早的移除存储设备或电力缺失相关联的问题。在一些实施方式中,日志报表可能涉及由于需要维护存储设备上的日志所造成的性能代偿(performancepenalty)。应注意,FAT和exFAT规范未提供日志报表。因此,将日志增加到FAT和exFAT文件系统将需要改变定义的规范。这可能不是可行的并且将可能导致与现有的FAT和exFAT实施方式不兼容。其他文件系统(诸如,ZFS)例如可以仅写入新的磁盘块,然后切换引用以指向新的块并且然后使旧的块空闲。事务exFAT可以将一个文件分配表和一个分配位图二者都完全复制在一个卷内并且在一个引导扇区中包括与两个文件分配表和两个分配位图中的哪些当前是激活的有关的指针。以此方式,可以对未激活的文件分配表和未激活的分配位图做事务exFAT系统修改,并且当所述修改完成时,激活的文件分配表指针和激活的分配位图指针可以被切换且所述修改可以被同步到另一个文件分配表和分配位图。在ZFS和事务exFAT文件系统中使用的技术的一个缺点是由于必须将信息复制在一个卷内造成的潜在性能下降。在一个实施例中,在本文中描述的技术实现故障安全操作且不需要一些元数据写入复制。元数据写入复制可能在性能(诸如,CPU利用率和功率损耗)方面代价非常高。过多的功率损耗可能对于电池供电设备(诸如例如,移动设备)代价特别高。在本文中描述的技术优于其他方法(像日志报表)的优点的实例例如是,在本文中描述的示例技术仍然可以获得良好的性能并且没有写入放大(writeamplification)发生(即,日志报表和甚至更多如此复制的数据(像在事务FAT/exFAT中和在ZFS中)都导致事物保持被重新写入,这可能对在故障之前具有有限的写入循环计数的基于快闪的介质(flashbasedmedia)不太理想)。图1是例示可以实施本公开内容的一个或多个技术的计算设备的一个实施例的方框图。计算设备100可以包括一个或多个处理器和多个内部和/或外部存储设备。存储设备的实施例包括文件服务器、FTP服务器、网络附接存储(NAS)设备、本地光盘驱动器、可移除存储设备(诸如例如,存储卡和USB存储设备)或能够存储数据的任何其他类型的设备或存储介质。存储介质可以包括蓝光光盘、DVD、CD-ROM、闪存或任何其他合适的数字存储介质。当部分地以软件实施在本文中描述的技术时,设备可以将用于软件的指令存储在合适的、非暂时性计算机可读介质中并且使用一个或多个处理器在硬件中执行所述指令。计算设备100是被配置成将数据存储在计算机可读介质上或从计算机可读介质检索数据的计算设备的一个实施例。数据可以包括例如应用文件、文档文件和/或媒体文件(音频文件和/或视频文件)。计算设备100可以被装配以用于有线通信和/或无线通信并且可以包括设备,诸如例如,台式计算机或膝上型计算机、移动设备、智能手机、蜂窝电话、个人数据助手(PDA)、平板设备、机顶盒、个人游戏设备以及汽车信息娱乐系统。如图1中例示的,计算设备100包括中央处理器单元102、系统存储器104、系统接口110、图形子系统112、存储设备118、I/O设备120和网络接口122。如图1中例示的,系统存储器104包括应用106和操作系统108。另外,如图1中例示的,图形子系统112包括图形处理单元114和GPU存储器116。应注意,尽管示例计算设备100被例示为具有不同的功能块,但是这样的例示是出于描述目的并且不将计算设备100限制于特定的硬件或软件架构。可以使用硬件、固件和/或软件实施方式的任何组合来实现计算设备100的功能。中央处理单元102可以被配置成实施用于在计算设备100中执行的功能和/或过程指令。中央处理单元102可以能够检索和处理指令、代码和/或数据结构以用于实施在本文中描述的技术中的一个或多个。指令可以被存储在计算机可读介质(诸如,系统存储器104或存储设备118)上。中央处理单元102可以包括数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等同的集成或分立逻辑电路系统。中央处理单元102可以包括一个或多个多核中央处理单元。中央处理单元102可以被配置成使得专用图形处理单元(诸如,图形子系统112中包含的那些)被用于图形处理。系统存储器104可以被配置成存储在操作期间可以由计算设备100使用的信息。系统存储器104可以被描述为非暂时性或有形计算机可读存储介质。在一些实施例中,系统存储器104可以提供临时存储器和/或长期存储。在一些实施例中,系统存储器104或其部分可以被描述为非易失性存储器,并且在其他实施例中,系统存储器的部分可以被描述为易失性存储器。易失性存储器的实施例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)。非易失性存储器的实施例包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除可编程存储器(EEPROM)的形式。在一个实施例中,系统存储器可以包括内部硬盘驱动器和/或内部闪存。系统接口110可以被配置成以实现计算设备100的部件之间的通信。在一个实施例中,系统接口110包括实现数据从一个对等设备转移到另一个对等设备或存储介质的结构。例如,系统接口110可以包括支持PCI总线、PCIe总线协议、专有总线协议或可以用来使对等设备互连的任何其他形式的结构的芯片组。存储设备118代表计算设备100的可以被配置成存储不同于系统存储器104的针对不同时间段的不同的信息量的存储器。类似于系统存储器104,存储设备118也可以包括一个或多个非暂时性或有形计算机可读存储介质。存储设备118可以是内部存储器或外部存储器并且在一些实施例中可以包括非易失性存储元件。存储设备可以包括存储卡(例如,安全数字(SD)存储卡,包括标准容量(SDSC)格式、高容量(SDHC)格式和扩展容量(SDXC)格式)、外部硬盘驱动器和/或外部固态驱动器。存储在存储设备118上的数据可以是根据定义的文件系统(诸如例如,FAT12、FAT16、FAT32、exFAT和/或事务exFAT文件系统)存储的。I/O设备120可以被配置成为计算设备100接收输入并且提供输出。输入可以生成自输入设备,诸如例如,触敏屏、触控板(trackpad)、触控点(trackpoint)、鼠标、键盘、麦克风、视频摄像机或被配置成接收输入的任何其他类型的设备。输出可以被提供到输出设备,诸如例如,扬声器或显示设备。在一些实施例中,I/O设备120可以在计算设备100外部并且可以使用标准通信协议(诸如例如,通用串行总线协议(USB))将该I/O设备操作性地耦合到计算设备100。网络接口122可以被配置成实现计算设备100经由一个或多个网络与外部计算设备通信。网络接口122可以是网络接口卡,诸如,以太网卡、光学收发器、射频收发器或可以发送和接收信息的任何其他类型的设备。网络接口122可以被配置成根据一个或多个通信协议(诸如例如,全球移动通信系统(GSM)标准、码分多址(CDMA)标准、第三代合作伙伴项目(3GPP)标准、互联网协议(IP)标准、无线应用协议(WAP)标准)和/或IEEE标准(诸如,802.11标准中的一个或多个)及其多种组合操作。图形子系统112可以被配置成为计算设备110提供专用图形处理。如图1中例示的,图形子系统112包括图形处理单元114和图形处理单元存储器116。图形处理单元114可以被配置成接收命令和数据并且输出像素数据。图形处理单元114可以包括多个处理核。图形处理单元114可以被配置成根据OpenGL和/或Direct3D操作。图形处理单元114可以根据图形流水线过程(例如,输入汇编器、顶点着色器、几何着色器、光栅器、像素着色器和输出合并器)操作。图形处理单元存储器116可以包括被配置成存储在图形流水线过程期间生成的数据的存储设备。如图1中例示的,系统存储器104包括应用106和操作系统108。应用106可以是在计算设备100内实施的或通过计算设备100执行的任何应用,并且可以在计算设备100的部件内被实施或被包含在计算设备100的部件内、可以通过计算设备100的部件操作、可以通过计算设备100的部件执行和/或可以被操作性地/通信地耦合到计算设备100的部件。应用108可以包括可以导致计算设备100的中央处理单元102执行特定功能的指令。应用106可以导致中央处理单元102将数据写入计算机可读介质或将数据从计算机可读介质读出,所述计算机可读介质是诸如例如系统存储器104和/或存储设备118。应用106可以包括以计算机编程语句(诸如,for循环、while循环、if语句、do循环等)表达的算法。如图1中进一步例示的,应用106可以在操作系统108的顶部上执行。操作系统108可以被配置成便于应用与中央处理单元102以及计算设备100的其他硬件部件相互作用。操作系统108可以是被设计成被安装在膝上型计算机和台式计算机上的操作系统。例如,操作系统108可以是操作系统、Linux或MacOS。操作系统108可以是被设计成被安装在膝上型计算机、台式计算机、智能手机、平板设备、机顶盒和/或游戏设备上的操作系统。例如,操作系统108可以是Linux、MacOS、Android、iOS、Windows或Windows操作系统。应注意,尽管在本文中根据特定的示例操作系统描述了多个技术,但是在本文中描述的技术不限于特定的操作系统。图2是例示可以实施本公开内容的一个或多个技术的计算设备的操作系统的一个实施例的方框图。如图2中例示的,操作系统108包括内核202。在一个实施例中,内核202可以是基于Linux内核的内核。在其他实施例中,内核202可以仅仅是操作系统的指令的组成部分或子集。如图2中例示的,内核包括设备驱动器204和文件系统驱动器206。设备驱动器204可以被配置成作为操作系统108和硬件设备之间的接口(诸如例如,系统接口110)操作。文件系统驱动器206可以被配置成提供应用106和/或操作系统108和存储设备(诸如例如,系统存储器104和/或存储设备118)之间的抽象层。例如,文件系统驱动器206可以允许应用修改存储设备118上的索引节点而不需要该应用执行文件管理的方面。修改索引节点可以包括卷内的任何类型的数据改变,从创建、修改、重新命名或删除文件到创建、修改、重新命名、移动或删除目录。如下文详细描述的,修改索引节点可以包括修改引导记录、修改目录条目、修改文件分配表、修改分配位图、分配簇和使簇解除分配。在一个实施例中,文件系统驱动器206可以被配置成允许根据基于文件分配表(FAT)文件系统的文件系统将数据存储到系统存储器104和/或存储设备118,所述文件分配表文件系统包括FAT12、FAT16、FAT32、exFAT和事务exFAT文件系统。在一个实施例中,文件系统驱动器206可以被实施为一个既实施FAT文件系统又实施exFAT文件系统的二进制驱动器。在其他实施例中,文件系统驱动器206可以包括用于FAT文件系统和exFAT文件系统中的每个的单独的二进制驱动器。图3是例示根据一个示例文件结构定义的卷的一个实施例的概念图。在一个实施例中,卷300可以是根据exFAT文件系统定义的。应注意,尽管在一些实施例中参考exFAT文件系统描述了卷300,但是在本文中描述的技术不限于exFAT文件系统并且可以与其他文件系统一起使用,所述其他文件系统包括例如FAT12、FAT16和FAT32。另外,应注意,示例卷300代表卷的一个示例性实施例,且为了简洁起见,不意在作为根据一个文件系统定义的卷的穷尽描述。卷的附加细节可以在对应的文件系统规范中找到。例如,在根据基于exFAT文件系统的文件系统定义卷300的情况下,卷300的附加细节可以在MicrosoftexFATRevision1.00FileSystemBasicSpecification(第四版,01-JAN-2009)中找到。例如,在根据基于FAT12、FAT16和FAT32文件系统的一个或多个的文件系统定义卷300的情况下,卷的附加细节可以在MicrosoftExtensibleFirmwareInitiativeFAT32FileSystemSpecification(版本1.03,2016年12月6日)中找到。在图3中例示的实施例中,卷300包括引导记录302、文件分配表304和数据区域306。引导记录302、文件分配表304和数据区域306中的每个可以是根据扇区值在存储设备(诸如例如,存储设备118)上可寻址的。引导记录302包括描述文件系统参数的数据条目。在一个实施例中,引导记录302包括用于引导卷的数据、用于卷的基本文件系统参数和多种错误检测信息。引导记录302可以包括一个或多个引导记录。在一个实施例中,引导记录302包括一个主引导记录和一个备份引导记录,其中备份引导记录是主引导记录的副本。在图3中例示的示例卷300通常对应于根据exFAT定义的卷。应注意,在示例卷300对应于根据FAT12、FAT16和FAT32定义的卷的情况下,数据区域306可以不包括分配位图。然而,还应注意,在本文中描述的技术可以适用于根据exFAT文件系统定义的卷和/或根据FAT12、FAT16和FAT32文件系统定义的卷。如图3中例示的,引导记录302中包括的信息的实施例包括卷长度、文件分配表长度、簇计数、根目录的第一簇、每个簇的字节以及每个簇的扇区。在一个实施例中,卷长度以扇区指定卷300的大小。在一个实施例中,文件分配表长度以扇区指定文件分配表304的大小。在一个实施例中,簇计数指定数据区域306中包括的簇的数目。在一个实施例中,根目录的第一簇指定根目录在数据区域306中的扇区位置。在一个实施例中,每个簇的字节指定一个扇区中包括的字节的数目。在一个实施例中,每个扇区的字节的数目可以以2的幂记数法表达并且可能的范围是从每扇区512字节的最小值到每扇区4096字节的最大值。在一个实施例中,每个簇的扇区指定每个簇的扇区的数目。在一个实施例中,每个簇的扇区的最小数目可以是1并且每个簇的扇区的最大数目可以提供32MB的最大簇大小。尽管未在图3中例示,引导记录302还可以包括指示被分配的簇的百分比的信息和允许卷300被引导的信息。如下文详细描述的,引导记录302可以随着文件和目录被修改而被更新。文件分配表304可以包括一个或多个文件分配表。在一个实施例中,文件分配表304包括单个文件分配表304。在另一个实施例中,文件分配表304包括两个或更多个文件分配表。文件分配表304可以被用来描述被分派到数据区域306中的一个索引节点(诸如文件)的簇序列(也被称为簇链)。如图3中例示的,一个文件分配表可以包括一个条目和一个对应于该条目的值。在图3中例示的实施例中,条目00包括指示介质类型的值并且条目01包括占位符值。条目02到簇计数(ClusterCount)+1可以提供描述被分派到一个索引节点的簇序列的信息。在一个实施例中,条目可以包括指示簇序列中的一个后续簇条目的值、指示“坏”簇的值、指示簇未在使用中的值或指示簇序列的结束(EOF)的值。在图3中例示的实施例中,根文件目录在簇02处开始。如图3中例示的,条目02包括指示根目录未被分派任何附加簇的EOF标记。另外,在图3中例示的实施例中,文件在簇03处开始。如在图3中例示的,条目03包括04的地址,指示用于该文件的序列中的下一个簇是簇04。条目04包括指示该文件未被分派任何附加簇的EOF标记。以此方式,文件分配表可以被用来识别分配到一个索引节点的簇序列。应注意,尽管在图3中例示的实施例中被分配到一个索引节点的簇是连续的,但是在其他实施例中,被分配到一个索引节点的簇可以包括不连续的簇(例如,条目03指向条目07)。数据区域306可以是卷300的存储组成一个索引节点的数据的区域。例如,数据区域306可以包括代表媒体文件(诸如例如,JPEG文件)的文件数据。在一些实施例中,数据区域306可以被称为簇堆(clusterheap)。如上文描述的,关于数据区域306的配置的信息可以被包括在引导记录302中(例如,簇计数和分配的簇的百分比)。应注意,在大多数情况下,引导记录302典型地在装载事件时被更新。如上文进一步描述的,数据区域306中的簇可以形成在文件分配表304中定义的序列的一部分。因此,对存储在数据区域306中的索引节点的修改可能需要更新文件分配表304。如图3中例示的,数据区域包括目录、分配位图、大写字母表(UP-casetable)和文件数据。目录可以包括描述指示文件和目录之间的关系的树结构的一系列条目。例如,目录可以指示一个特定文件被存储在父目录的子目录中。在图3中例示的实施例中,目录包括根目录和“图片”子目录和存储在图片目录内的图片文件PIC.jpg。在图3中例示的实施例中,根目录可以包括关于卷和数据区域的一般信息,例如,当该卷包括分配位图时,所述一般信息是该分配位图的位置。在一个实施例中,与一个索引节点相关联的目录条目可以包括不同类型的一个或多个记录。图4A和图4B是例示包括与一个索引节点相关联的记录的目录条目的实施例的概念图。图4A中例示的示例目录条目400通常对应于根据exFAT定义的目录记录。图4B中例示的示例目录条目450通常对应于根据FAT12、FAT16和FAT32定义的目录记录。如图4B中例示的,根据FAT12、FAT16和FAT32定义的目录记录包括一个或多个长名称目录条目记录且不包括流扩展记录或文件名称扩展记录。如图4A中例示的,目录条目400包括目录条目记录402、流扩展记录404和文件名称扩展记录406。可以根据一个文件系统规范(诸如例如,exFAT)定义目录条目记录402、流扩展记录404和文件名称扩展记录406。在exFAT的实施例中,每个记录可以是32字节并且通常可以被格式化成如图4A中例示的。在exFAT的实施例中,一个或多个扇区中的目录条目记录402、流扩展记录404和文件名称扩展记录406的顺序可以是如下:目录条目记录402、流扩展记录404和文件名称扩展记录406。应注意,示例目录条目400代表根据一个文件系统定义的目录条目的一个例示性实施例,并且为了简洁起见,在本文中未提供根据一个文件系统定义的目录条目的穷尽描述。目录条目400的附加细节可以在对应的文件系统规范中找到。例如,在根据基于exFAT文件系统的文件系统定义目录条目400的情况下,目录条目400的附加细节可以在MicrosoftexFATRevision1.00FileSystemBasicSpecification(第四版,01-JAN-2009)中找到。如图4A中例示的,描述索引节点的名称、索引节点的第一簇和索引节点的数据大小的信息被包括在目录条目400中。目录条目记录402包括DOS文件标志和时间数据。在一个实施例中,DOS文件标志可以包括指示文件是否是只读文件、隐藏文件、系统文件或存档文件的信息。时间数据可以包括指示文件何时被创建、被访问和/或被修改的信息。再次参考图4A,流扩展记录404包括识别索引节点的第一簇和该索引节点的数据大小的信息。如图4A中例示的,流扩展记录404还包括位于BYTE1处的无文件分配表链(NO_FAT_CHAIN)标志。在一个实施例中,NO_FAT_CHAIN标志指示索引节点是否被描述为文件分配表中的簇链。在一个实施例中,可以根据exFAT文件系统定义NO_FAT_CHAIN标志。在exFAT文件系统中,NO_FAT_CHAIN标志可以是一位值,其中“0”指示簇链是有效的且“1”指示簇链未被使用。在一个实施例中,当索引节点被包含在单个簇内时,它可以不需要被描述为文件分配表中的簇链。在另一个实施例中,当索引节点被包含在连续的簇内时,它可以不需要被描述在一个文件分配表中。在索引节点被包含在连续的簇内且NO_FAT_CHAIN标志被设置的情况下,引导记录302中的第一簇值、数据大小值以及每个扇区的字节的值和每个簇的扇区的值可以被用来检索该索引节点。换言之,分配到该索引节点的字节的数目可以除以簇大小以给出分配到该索引节点的连续的簇的数目,其中分配的簇在指定的开始簇处开始。应注意,尽管一些文件系统(诸如例如,FAT12、FAT16和FAT32)可以不在目录条目中包括NO_FAT_CHAIN标志,但是在本文中描述的技术可以与不包括NO_FAT_CHAIN标志的文件系统一起使用。文件名称扩展记录406包括类型值和索引节点识别信息,即,文件名称。目录条目400可以包括一个或多个文件名称扩展记录。文件名称扩展记录的数目可以是基于文件名称的长度。如图4A中例示的,目录条目记录402和流扩展记录404也包括类型值。在一个实施例中,每个类型值可以包括一个指示索引节点是否已经被删除的位。在一个实施例中,将类型值的第一位设置为0可以指示索引节点已经被删除。因此,如下文详细描述的,在目录条目记录402、流扩展记录404和文件名称扩展记录406中的每个中包括的数据可以在索引节点被修改时被更新。参考图4B,目录条目450包括目录条目记录452且可以包括一个或多个长名称目录条目记录454。目录条目450可以是根据一个文件系统规范(诸如例如,FAT12、FAT16和FAT32)定义的。在FAT12、FAT16和FAT32的实施例中,目录条目记录452和一个或多个长名称目录条目记录454的顺序可以是如下:一个或多个长名称目录条目记录454和目录条目记录452。换言之,在一个或多个扇区的逻辑序列中,长名称目录条目记录454可以在目录条目记录452之前。应注意,示例目录条目450代表根据一个文件系统定义的目录条目的一个例示性实施例,并且为了简洁起见,在本文中未提供根据一个文件系统定义的目录条目的穷尽描述。目录条目450的附加细节可以在对应的文件系统规范中找到。例如,在根据基于FAT12、FAT16和FAT32文件系统中的一个或多个的文件系统定义目录条目450的情况下,目录条目450的附加细节可以在MicrosoftExtensibleFirmwareInitiativeFAT32FileSystemSpecification(版本1.03,2000年12月6日)中找到。在图4B中例示的实施例中,目录条目记录450包括描述索引节点的名称和索引节点的第一簇的信息。目录条目记录452和长名称目录条目记录454包括DOS文件标志和时间数据。在一个实施例中,DOS文件标志可以包括指示文件是否是只读文件、隐藏文件、系统文件或存档文件的信息。时间数据可以包括指示文件何时被创建、被访问和/或被修改的信息。另外,长名称目录条目记录454包括长名称字符值、校验和以及BYTE0处的ORDINAL值。ORDINAL值可以指示长名称目录条目记录是长名称目录条目集中的第一条目。BYTE13处的CHECKSUM值可以是目录条目记录452的BYTE0-10处的NAME的校验和。以与上文参考目录条目400的描述方式类似的方式,目录条目450的值可以指示索引节点是否已经被删除。在一个实施例中,目录条目记录452的第一字节和任何相关联的长名称记录的对应字节可以被设置为指示目录条目记录未在使用中的缺省值。在一个实施例中,该缺省值可以是十六进制值0xE5。因此,如下文详细描述的,在目录条目记录452和长名称目录条目记录454中的每个中包括的数据可以在索引节点被修改时被更新。再次参考图3,分配位图可以维持数据区域304中的簇的分配状态并且可以被用来确定卷中的哪些簇目前可用来写入,即,目前未被分配。如图3的实施例中例示的,分配位图包括对应于数据区域306的每个簇的条目,其中二进制值“1”指示一个特定的簇被分配并且二进制值“0”指示一个簇未被分配。应注意,尽管一些文件系统(诸如例如,FAT12、FAT16和FAT32)可以不包括分配位图,但是在本文中描述的技术可以与不包括分配位图的文件系统一起使用。在exFAT的实施例中,大写字母表可以包含用于将小写字符转换为大写字符的数据。例如,大写字母表可以包括Unicode字符阵列。在exFAT的实施例中,文件名可以以不分大小写的方式被存储并且文件名可以在搜索操作期间被转换为大写。应注意,在FAT12、FAT16和FAT32的实施例中,数据区域306不包括大写字母表。文件数据可以包括代表文件(诸如例如,JPEG文件)的数据。如上文描述的,操作系统108和/或文件系统驱动器206可以被配置成将数据存储到存储设备,诸如,根据通过一个文件系统规范定义的卷的存储设备118。在一个实施例中,操作系统108和/或文件系统驱动器206可以被配置成分配簇、使簇解除分配、创建索引节点、删除索引节点和/或重命名索引节点。操作系统108、文件系统驱动器206和/或计算设备100的其他部件可以被配置成执行在本文中描述的用于分配簇、使簇解除分配、创建索引节点、删除索引节点和/或重命名索引节点的技术的任何组合。操作系统108和/或文件系统驱动器206还可以被配置成检测存储设备(诸如例如,存储设备118)并且纠正常见错误。操作系统108和/或文件系统驱动器206可以定位错误的一种方式是通过比较卷分配位图和分派到文件系统中的文件的磁盘扇区。fsck是Linux中可以被用来校验和可选择地修复根据一个文件系统定义的卷的可用的命令。chkdsk是操作系统中可以被用来校验和可选地修复根据一个文件系统定义的卷的可用的命令。应注意,一些索引节点修改涉及不止一个扇区且因此不是原子的(单个扇区写入被认为是原子的)。对于非原子的操作,部分写入可能发生。换言之,一个扇区可以被更新同时另一个扇区由于故障而未被更新。文件系统驱动器206可以被配置成保证当部分写入发生时现有的数据既没有被丢失也没有被损坏。另外,文件系统驱动器206可以被配置成使得在部分写入发生之后在下次卷被装载和/或数据被访问时修复任何接着发生的损坏。文件系统驱动器206还可以被配置成在故障事件之后读取部分写入时处理部分写入。在exFAT卷发生部分写入的情况下,第一目录条目中的校验和字段(即,文件记录)可能不具有正确的值。例如,可能发生目录条目记录是扇区中的最后目录条目记录且随后的流记录是下一个逻辑扇区中的第一个目录条目记录的情况并且对该流记录做出导致校验和被更新的更新,但是由于故障事件从未对磁盘做出第二扇区写入。在此情况下,文件系统驱动器206可以被配置成确定目录条目记录被更新,但是剩余的记录未被更新。在此情况下,文件系统驱动器206可以被配置成计算一个新的校验和并且将它写入第一扇区中的文件记录目录条目以制定修复,即,使数据再次一致。应注意,计算新的校验和是可接受的原因是,在此情况下,一组中的每个目录条目记录是自相合(self-consistent)的。换言之,文件名称扩展记录,例如,(至少当它们跨越一个扇区时从未)从未被更新且因此出于一致性目的它们是不相关的,并且目录条目记录不包含涉及流扩展记录的任何事件且流扩展记录不具有涉及目录条目记录的任何事件。因此,如果即使这些记录不匹配,除了无效的校验和以外,卷仍然是一致的,文件系统驱动器206可以被配置成修缮该无效的校验和,如上文描述的。如上文描述的,分配到索引节点的簇可以通过使目录条目中指定的第一簇对应于该索引节点来描述。在NO_FAT_CHAIN标志被清零的exFAT索引节点的实施例中并且在其他FAT文件系统(例如,FAT12/16/32)的索引节点的实施例中,文件分配表描述具有文件分配表条目的簇链。换言之,文件分配表中的第一簇条目包含第二簇的簇号,并且第二簇条目和任何后续的簇条目包含后续的簇号直到达到包含簇链标记结束(endofclusterchainmaker)(EOF)的簇条目为止。当索引节点被修改时,例如,当文件的大小被增加或被减少时,链中的簇的数目可以被对应地增加或减少。这样,文件分配表可以被修改以指示新的簇链结束。图5是例示根据本公开内容的一个或多个技术使分派到一个索引节点的簇解除分配的一个实施例的概念图。在一个实施例中,可以通过计算设备100和/或文件系统驱动器206执行图5中例示的技术。图5中例示的实施例例示了当使簇从索引节点解除分配时可以如何修改文件分配表和/或分配位图,诸如例如,图3中例示的文件分配表304和分配位图。当文件的大小被减少时,可以使簇从索引节点解除分配。在一些实施例中,使簇从索引节点解除分配还可以被称为收缩索引节点的分配。图5例示了文件分配表和在以下三个状态下对应的位图:预解除分配状态、中间状态和解除分配状态。在图5中例示的实施例中,索引节点初始被配分簇05、06、07、08、09和10(在预解除分配状态下)并且被修改为被分配簇05、06、07和08(在解除分配状态下)。如图5中例示的,在中间状态下,对应于簇08的文件分配表条目被修改以指示它是分配到该索引节点的最后簇。如图5中进一步例示的,在中间状态下,与预解除分配状态相比,对应于簇09和10的文件分配表条目未被修改。然而,如图5中例示的,在解除分配状态下,对应于簇09和10的文件分配表条目被修改。因此,根据图5中例示的实施例,当使簇从索引节点解除分配时,文件系统驱动器206可以确保链终止符结束(endofchainterminator,EOF)值被写入到新的最后簇文件分配表条目(即,条目08),并且仅在链终止符结束值被写入新的最后簇之后,然后文件系统驱动器206将剩余的簇标记为空闲的(即,条目09和10)。另外,如上文描述的,分配簇位图还可以描述哪些簇在使用中或是空闲的。如图5中例示的,分配位图可以在中间状态之后被更新。换言之,分配位图可以在系统驱动器206将链终止符值写入新的最后的簇之后被更新。通过在将簇标记为空闲的之前标记新的链终止符结束,索引节点的文件分配表链将在发生故障(例如,电力缺失)时变得损坏的可能性变得更小。换言之,即使在预解除分配状态和解除分配状态之间发生故障,最坏的可能结果是,在文件条目表中一些簇被标记为在使用中,但是没有什么指向它们,即,它们是丢失的簇。另外,在文件分配表被更新之后更新分配位图还可以确保,当簇不是空闲的时,计算设备不将它们处理为空闲的。在一个实施例中,在文件分配表中丢失的簇可以通过未来fsck运行或chkdsk运行被修缮。可以在存储设备被装载时执行fsck运行或chkdsk运行。在另一个实施例中,驱动器(诸如例如,文件系统驱动器206)可以在初始装载之后执行簇使用分析并且将任何这样的丢失的簇标记为未被使用,有效地做仅与簇使用有关的在线的类似fsck检验。图6是例示根据本发公开内容的一个或多个技术使分派到一个索引节点的簇解除分配的一个实施例的流程图。如上文描述的,文件系统驱动器(诸如例如,文件系统驱动器206)可以被配置成使用于根据exFAT文件系统定义的卷和/或根据FAT12、FAT16和FAT32文件系统定义的卷的簇解除分配。流程图600提供了用于使用于根据exFAT文件系统和/或FAT12、FAT16和FAT32文件系统定义的卷的簇解除分配的示例技术。尽管参考文件系统驱动器206描述,但是可以通过计算设备100以及其部件的任何组合执行图6中例示的技术。如图6中例示的,文件系统驱动器206确定卷是根据exFAT文件系统定义的还是根据FAT12、FAT16或FAT32文件系统中的一个定义的(602)。在一个实施例中,文件系统驱动器206可以基于引导记录内包含的信息做出确定。当确定卷是根据FAT12、FAT16或FAT32文件系统中的一个定义的时,文件系统驱动器206通过将链终止符结束(EOF)值写入新的最后簇文件分配表条目内来使簇(604)解除分配,并且仅在该链终止符结束值被写入到新的最后簇条目之后,然后文件系统驱动器206将剩余的簇标记为空闲的(606)。如上文描述的,参考图5,这可以确保在发生故障时的最坏的可能结果是丢失簇。如上文描述的,对于使NO_FAT_CHAIN标志设置的exFAT索引节点,文件分配表未被使用并且目录条目可以给出分配到在指定的开始簇处开始的索引节点的连续簇的数目。因此,不像根据FAT12、FAT16或FAT32文件系统中的一个定义的卷,对于根据exFAT文件系统定义的卷,分派到一个索引节点的簇的解除分配将不一定需要更新文件分配表。如图6中例示的,当确定卷是根据exFAT文件系统定义的时,文件系统驱动程序206确定该索引节点是否使用文件分配表来描述簇链(608)。在一个实施例中,文件系统驱动器206可以基于NO_FAT_CHAIN标志是否被设置来确定该索引节点是否使用文件分配表来描述该簇链,如上文描述的。当确定文件分配表未被用来描述索引节点的簇链时,文件系统驱动器206更新目录条目记录信息(610)。在一个实施例中,更新目录信息可以包括更新参考图4A描述的字段中的一个或多个。在一个实施例中,更新目录条目信息可以包括更新校验和、时间数据、有效数据长度和数据大小中的一个或多个。如图6中例示的,继更新目录记录之后,文件系统驱动器更新分配位图(612)。在通过仅在目录信息已经被更新之后更新分配位图来使用于文件分配表中未被描述的索引节点的簇解除分配(例如,NO_FAT_CHAIN设置)的情况下,在发生故障时的最坏的可能结果可能是该分配位图与所述目录条目不一致。然而,这样的不一致将仅导致指示簇在未被分配(即,可能丢失簇)的情况下被分配的分配位图。再次参考图6,当确定文件分配表被用来描述索引节点的簇链时,文件系统驱动器206通过将链终止符结束(EOF)值写入新的最后簇文件分配表条目内来使簇解除分配(614)。在将链终止符结束(EOF)值写入新的最后簇文件分配表条目内之后,文件系统驱动器206随后更新分配位图(612)。如上文参考图5描述的,这可以确保在发生故障时的最坏的可能结果是丢失的簇。以此方式,计算设备100代表被配置成将链终止符结束值写入新的最后簇文件访问表条目并且随后将一个或多个剩余的簇标记为空闲的设备的一个实施例。如上文描述的,除了减少文件大小和使索引节点解除分配之外,修改索引节点还可以包括增加文件大小和将附加的簇分配到索引节点。图7是例示根据本公开内容的一个或多个技术将附加的簇分配到索引节点的概念图。在一个实施例中,可以通过计算设备100和/或文件系统驱动器206执行图7中例示的技术。图7中例示的实施例例示了当簇被分配到索引节点时可以如何修改文件分配表和/或分配位图,诸如例如,图3中例示的文件分配表304和分配位图。在一些实施例中,将簇分配到索引节点还可以被称为扩展索引节点的分配。图7例示了文件分配表和在以下三个状态下对应的位图:预分配状态、中间状态和分配状态。在图7中例示的实施例中,索引节点初始被配分簇05、06、07和08(在预分配状态下)并且被修改为分配的簇05、06、07、08、09和10(在分配状态下)。如图7中例示的,在中间状态下,对应于簇09的文件分配表条目被修改以指向簇10并且对应于簇10的文件分配表条目被修改以指示它是被分配到该索引节点的最后簇。如图7中进一步例示的,在中间状态下,对应于簇08的文件分配表条目没有被更新。然而,如图7中例示的,在分配状态下,对应于簇08的文件分配表条目被更新。因此,根据图7中例示的实施例,当簇被分配到索引节点时,文件系统驱动器206可以确保用于新分配的簇的文件分配表条目(即,条目09和10)在先前最后簇文件分配表条目(即,条目08)被更新之前被写入。换言之,在此实施例中,条目08被更新以使得它仅在条目09和10被更新之后指向下一个簇而不是包含“链结束符结束”。另外,在图7中例示的实施例中,分配位图可以在文件分配表被更新之前被更新。换言之,分配位图可以在文件系统驱动器206将新的值写入文件分配表条目之前被更新。通过在更新先前的链终止符结束之前将值写入新分配的簇,索引节点的文件分配表链将在发生故障(例如,电力缺失)时变得损坏的可能性变得更小。换言之,即使在预分配状态和分配状态之间发生故障,最坏的可能结果是,在文件条目表中一些簇被标记为在使用中,但是没有什么指向它们,即,它们是丢失的簇。另外,在文件分配表被更新之前更新分配位图还可以确保当簇不是空闲的时计算设备不将它们处理为空闲的。以与上文参考图5描述的方式类似的方式,文件分配表中丢失的簇可以通过未来fsck运行或chkdsk运行修缮,和/或文件系统驱动器206可以在初始装载之后执行簇使用分析并且将任何这样的丢失的簇标记为未被使用,有效地做仅与簇使用有关的在线的类似fsck检验。图8是例示根据本公开内容的一个或多个技术将附加的簇分配到索引节点的流程图。如上文描述的,文件系统驱动器(诸如例如,文件系统驱动器206)可以被配置成分配用于根据exFAT文件系统定义的卷和/或根据FAT12、FAT16和FAT32文件系统定义的卷的簇。流程图800提供了用于分配用于根据exFAT文件系统和/或FAT12、FAT16和FAT32文件系统定义的卷的簇的示例技术。尽管参考文件系统驱动器206描述,但是图8中例示的技术可以通过计算设备100以及其部件的任何组合执行。另外,应注意,在一个实施例中,文件系统驱动器206可以被配置成执行图8中例示的技术和图6中例示的技术。如图8中例示的,文件系统驱动器206确定卷是根据exFAT文件系统定义的还是根据FAT12、FAT16或FAT32文件系统中的一个定义的(802)。在一个实施例中,文件系统驱动器206可以基于引导记录内包括的信息做出确定。当确定卷是根据FAT12、FAT16或FAT32文件系统中的一个定义的时,文件系统驱动器206通过将值写入新的文件分配表条目来分配簇(804),并且仅在所述值已经被写入新的文件分配表条目之后,然后文件系统驱动器206更新包括链终止符结束(EOF)的先前的文件分配表条目(806)。如上文参考图7描述的,这可以确保在发生故障时的最坏的可能结果是丢失的簇。如上文描述的,对于使NO_FAT_CHAIN标志设置的exFAT索引节点,不使用文件分配表并且目录条目可以给出被分配到在指定的开始簇处开始的索引节点的连续簇的数目。因此,不像根据FAT12、FAT16或FAT32文件系统中的一个定义的卷,对于根据exFAT文件系统定义的卷,簇到索引节点的分配将不一定需要更新文件分配表。如图8中例示的,当确定卷是根据exFAT文件系统定义的时,文件系统驱动器206更新分配位图(808)。文件系统驱动器206确定该索引节点是否使用文件分配表来描述簇链(810)。在一个实施例中,文件系统驱动器206可以基于NO_FAT_CHAIN标志是否被设置来确定该索引节点是否使用文件分配表来描述该簇链,如上文描述的。当确定文件分配表未被用来描述索引节点的簇链时,文件系统驱动程序206更新目录条目记录信息(812)。在一个实施例中,更新目录信息可以包括更新参考图4描述的字段中的一个或多个。在一个实施例中,更新目录条目信息可以包括更新校验和、时间数据、有效数据长度和数据大小中的一个或多个。在将簇分配到文件分配表中未被描述的索引节点(例如,NO_FAT_CHAIN设置)的情况下,在文件分配表被更新之前更新分配位图还可以确保当簇不是空闲的时计算设备不将它们处理为空闲的。再次参考图8,当确定文件分配表被用来描述索引节点的簇链时,文件系统驱动器206通过将值写入新的文件分配表条目来分配簇(814),并且仅在所述值已经被写入新的文件分配表条目之后,然后文件系统驱动器206更新包括链终止符结束(EOF)的先前的文件分配表条目(816)。如上文参考图6描述的,这可以确保在发生故障时的最坏的可能结果是丢失的簇。以此方式,计算设备100代表被配置成写入用于新分配的簇的文件访问表条目并且随后更新先前最后的簇文件访问表条目以使得它指向下一个簇的设备的一个实施例。如上文描述的,修改索引节点可以包括删除索引节点、创建索引节点或或重命名索引节点。文件系统驱动器206可以被配置成删除、创建和/或重命名索引节点。在一个实施例中,文件系统驱动器206可以被配置成删除作为根据FAT12、FAT16或FAT32文件系统中的一个定义的卷的一部分所包括的和/或作为根据exFAT文件系统定义的卷的一部分所包括的索引节点。文件系统驱动器206可以被配置成以故障安全方式删除索引节点。在一个实施例中,文件系统驱动器206可以被配置成将对应于索引节点的目录条目标记为未在使用中,并且随后使与被标记为未在使用中的目录条目相关联的簇空闲。换言之,文件系统驱动器206可以被配置成将目录条目标记为未在使用中并且确保这在任何其他事情之前转到磁盘。图9是例示根据本公开内容的一个或多个技术的删除索引节点的一个实施例的流程图。流程图900提供了用于删除用于根据exFAT文件系统和/或FAT12、FAT16和FAT32文件系统定义的卷的索引节点的示例技术。尽管参考文件系统驱动程序206描述,但是图9中例示的技术可以通过计算设备100及其部件的任何组合执行。另外,应注意,在一个实施例中,文件系统驱动器206可以被配置成除了执行图9中例示的技术之外还执行图6、图8、图10和/或图11中例示的技术。如图9中例示的,文件系统驱动器206确定卷是根据exFAT文件系统定义的还是根据FAT12、FAT16或FAT32文件系统中的一个定义的(902)。在一个实施例中,文件系统驱动器206可以基于引导记录内包括的信息做出确定。当确定卷是根据FAT12、FAT16或FAT32文件系统中的一个定义的时,文件系统驱动器206设置目录条目中的字节(904)。如上文参考图4B描述的,在FAT12、FAT16或FAT32的情况下,目录条目记录的第一字节和任何相关联的长名称记录的对应字节可以被设置为指示目录条目记录未在使用中的缺省值。因此,在一个实施例中,文件系统驱动程序206可以将目录条目记录的第一字节和任何相关联的长名称记录的对应字节设置为指示目录条目记录未在使用中的缺省值。在目录条目记录被标记为未在使用中之后,文件系统驱动器206在文件分配表中将簇标记为空闲的(906)。应注意,如果索引节点是开放无链接(open-unlinked)的,则使簇的空闲可以被延迟大量时间,即,它仍然在使用中即使它已经被删除。在此情况下,一旦该文件最后一次被关闭,就可以使所述簇空闲。在目录条目中的字节的设置之后和在所有簇被标记为空闲的之前发生的故障可能导致丢失的簇。可以如上文关于分配和解除分配用于索引节点的簇描述的来处理丢失的簇。如上文描述的,一些索引节点修改可能涉及不止一个扇区(即,可以是非原子的)。在一些情况下,目录条目可以跨越多个扇区。当目录条目跨越至少两个扇区时,如对于非常长的文件名称可能发生的,在完成设置目录记录中的字节期间发生的故障可以导致所述条目的第一部分在磁盘上被标记为空闲的,但是第二扇区中的剩余的条目仍然被标记为在使用中。例如,在FAT12、FAT16或FAT32的情况中,在故障之后,一个或多个长名称目录条目记录(长名称目录条目记录454)可以最终被标记为未在使用中并且目录条目记录(例如,目录记录452)可以最终被标记为在使用中。在一个实施例中,文件系统驱动器206可以被配置成用fsck/chkdsk运行或通过稍后的读出操作来解决此类型的故障,所述稍后的读出操作可能在扇区的开始处仅找到部分目录条目记录“集”。在找到所述部分目录条目记录“集”之后,文件系统驱动器206可以将所述部分目录条目记录“集”的条目标记为未在使用中且因此完成删除。另外,应注意,在FAT12、FAT16或FAT32的情况下,当删除索引节点时,如果文件名很长使得不止一个目录条目记录被用来描述该索引节点,并且如果所述目录条目跨越两个单独的扇区,则在一个实施例中,文件系统驱动器206可以被配置成在将第一扇区写入磁盘之前将第二扇区写入磁盘以确保故障安全性。在此情况下,第一扇区可以包括长名称目录条目记录并且第二扇区可以包括目录条目记录。因此,如果故障发生在两个扇区更新之间,通过在第一扇区之前将第二扇区写入磁盘,则在故障之后卷将以第一扇区中的虚假(ghost)长名称目录条目记录结束。换言之,长名称目录条目记录不具有一致的对应的目录条目记录。在一个实施例中,虚假长名称目录条目记录可以在读取该目录时被清理。在一个实施例中,清理可以包括将虚假长名称目录条目记录标记为空闲的。相反,如果第一扇区在第二扇区之前被写入磁盘,则当两个扇区写入之间故障时,卷将以磁盘上第一扇区中被标记为空闲的长名称条目记录结束,但是第二扇区将具有一些无效的/部分的长名称条目记录。尽管可能通过将第二扇区条目标记为空闲的来清理所述第二扇区条目,但是短名称可能出现在目录列表中而不是长名称。应注意,在一些情况下,短名称通常对于用户隐藏在目录列表中,因为存在代替地显示的匹配的长名称。然而,如果不存在可用的长名称,则由于缺省,短名称可以被显示在目录列表中。因此在此情况下,在发生故障时,不仅没有使删除发生(即,文件仍然在那),而且该文件可能显现在目录列表中具有突然改变的名称。例如,如果MyLongNameDocument.doc在故障之后突然被删除,则可能存在代替地在目录列表中显露的MYLONG~1.DOC,这可能给访问此文件的用户和程序造成混乱。因此,以此方式,文件系统驱动器206可以被配置成通过将扇区写操作定序来确保故障安全操作。再次参考图9,当确定卷是根据exFAT定义的时,文件系统驱动器206改变目录条目中的类型值(908)。如上文参考图4A描述的,目录条目记录、流扩展记录、文件名称扩展记录包括类型值,并且所述类型值中的每个可以包括指示索引节点是否已经被删除的位。因此,在一个实施例中,文件系统驱动器206可以将每个类型的一个或多个的第一位的值设置为0以指示索引节点已经被删除。在目录条目记录被标记为未在使用中之后,文件系统驱动程序206在分配位图中将簇标记为空闲的(910)。如上文描述的,关于在文件分配表中将簇标记为空闲的,如果索引节点是开放无链接的,则使簇空闲可以被延迟大量时间。在此情况下,仅一旦该文件最后一次被关闭,可以使所述簇空闲。另外,在设置类型值之后和在所有簇被标记为空闲的之前发生的故障可能导致丢失的簇。可以如上文关于分配和解除分配用于索引节点的簇描述的来处理丢失的簇。以与上文关于删除FAT12、FAT16或FAT32卷中所包括的索引节点描述的方式类似的方式,exFAT卷中的目录条目也可以跨越多个扇区。在exFAT的情况下,当目录条目跨越两个扇区时,在完成设置目录记录中的字节期间发生的故障可以导致所述条目的第一部分在磁盘上被标记为空闲的(例如,目录条目记录402),但是第二扇区中的剩余的记录仍然被标记为在使用中(例如,流扩展记录404)。如上文描述的,在一个实施例中,文件系统驱动器206可以用未来fsck/chkdsk运行或通过稍后的读出操作来解决此类型的故障(即,部分写入),所述稍后的读出操作可能在扇区的开始处仅找到部分目录条目记录“集”。文件系统驱动器206可以找到该部分目录条目“集”的条目记录并且将其标记为未在使用中,因此完成删除。以此方式,文件系统驱动器206可以被配置成以故障安全方式删除索引节点。如上文描述的,修改索引节点可以包括创建索引节点。在一个实施例中,文件系统驱动器206可以被配置成创建作为根据FAT12、FAT16或FAT32文件系统中的一个定义的卷的一部分和/或用于根据exFAT文件系统定义的卷的一部分所包括的索引节点。文件系统驱动器206可以被配置成以故障安全方式创建索引节点。图10是例示根据本公开内容的一个或多个技术创建索引节点的一个实施例的流程图。流程图1000提供了用于创建用于根据exFAT文件系统和/或FAT12、FAT16和FAT32文件系统定义的卷的索引节点的示例技术。尽管参考文件系统驱动器206描述,但是图10中例示的技术可以通过计算设备100以及其部件的任何组合执行。应注意,在一些实施例中,文件系统驱动器206可以被配置成使得每次仅一个目录操作可以发生,并且这样可以不需要处理中途影响另一个操作的一个操作。如图10中例示的,文件系统驱动器206确定父目录中是否存在足够的空间用于创建索引节点(1002)。当确定父目录中不存在足够的空间时,文件系统驱动器206扩展该父目录(1004)。在一个实施例中,文件系统驱动器206可以根据上文参考图8描述的技术扩展父目录。换言之,文件系统驱动器206可以被配置成,在FAT12、FAT16和FAT32文件系统的情况下,写入用于新分配的簇的文件访问表条目并且随后更新文件访问表条目中的先前的最后簇条目以使得它指向下一个簇。另外,在exFAT文件系统的情况下,如果文件分配表未被使用,则文件系统驱动器206可以更新分配位图并且更新目录记录信息,并且如果文件分配表被使用,则写入用于新分配的簇的文件访问表条目并且随后更新文件访问表条目中的先前的最后簇条目以使得它指向下一个簇。应注意,如果故障事件发生在父目录已经被扩展之后,结果是较大的目录,这通常不是问题。一旦父目录被扩展使得存在足够的空间,则文件系统驱动器分配所需数目的目录记录(1006)。如上文描述的,所需数目的目录记录可以是基于索引节点名称的长度。如上文描述的,在FAT12、FAT16和FAT32的情况下,目录条目包括目录条目记录452并且可以包括一个或多个长名称目录条目记录454。如上文描述的,在exFAT的情况下,目录条目包括目录条目记录、流扩展记录和一个或多个文件名称扩展记录406。文件系统驱动器206用初始数据填充目录条目(1008)。在exFAT的情况下,初始数据可以是图4A中例示的字节中的一个或多个中所包括的数据。在FAT12、FAT16和FAT32的情况下,初始数据可以包括图4B中例示的字节中的一个或多个中所包括的数据。应注意,在FAT12、FAT16、FAT32和exFAT的情况下,目录的大小不允许为零。换言之,如果目录不具有被分配给它的至少一个簇,则该目录被认为无效。因此,当创建一个新的目录时,在FAT12、FAT16、FAT32和exFAT的情况下,必须始终在文件分配表中为该新的目录分配一个簇并且簇链被分配到该新的目录的目录条目。另外,在FAT12、FAT16和FAT32的情况下,除了根目录以外,所有目录必须始终包含“.”和“..”目录条目,甚至在目录原本完全为空的情况下。如图10中例示的,文件系统驱动器206确定索引节点是否是目录。当确定索引节点是目录时,文件系统驱动器206分配用于目录的簇(1012)。文件系统驱动器206初始化簇(1014)。在FAT12、FAT16和FAT32的情况下,初始化簇可以包括使目录初始化为具有“.”和“..”目录条目并且使剩余部分归零。在exFAT的情况下,初始化簇可以包括使整个簇归零。在簇被初始化之后,文件系统驱动器206将簇写入磁盘(1016)。如图10中例示的,在簇被写入磁盘之后,文件系统驱动器206将新的目录的目录条目写入磁盘(1018)。根据图10中例示的技术,在簇被配分且被初始化的状态下发生的故障事件可能导致丢失的簇,但是没有其他损坏。与图10中例示的技术形成对照,如果用于新的目录的目录条目在簇被分配、被初始化或被写入磁盘中的任何一个之前被写入磁盘,则故障事件可以导致磁盘上的目录条目,但是没有初始化的簇与其相随,所述目录条目将是损坏的目录。应注意,如果目录条目横跨扇区边界,对于非常长的文件名称可能是这样,如上面描述的,则故障可以仅导致所述条目中的一些被写入设备。此类型的故障可以用未来fsck/chkdsk运行或通过稍后的读出操作被处理,所述的稍后的读出操作仅找到有效目录条目“集”的开始并且将所述条目标记为未在使用中因此取消部分创建。在目录条目被写入磁盘之后,文件系统驱动器206然后可以将父目录元数据同步到磁盘(1020)。在一个实施例中,将父目录元数据同步到磁盘可以包括更新访问/修改次数。以此方式,文件系统驱动器206可以被配置成以故障安全方式创建索引节点。如上文描述的,修改索引节点可以包括重命名索引节点。在一个实施例中,文件系统驱动器206可以被配置成重命名作为根据FAT12、FAT16或FAT32文件系统中的一个定义的卷的一部分所包括的和/或用于根据exFAT文件系统定义的卷的索引节点。文件系统驱动器206可以被配置成以故障安全方式重命名索引节点。在一个实施例中,当重命名索引节点时,文件系统驱动器206可以被配置成确保一切首先被准备在一个卷内,且然后旧的目录集在新的目录条目集被写入之前首先被同步。这可以确保卷不可以以指向在将被有效地交叉联接的相同的簇处的两个目录条目集(即,索引节点)结束。应注意,在故障的情况下,可能旧的目录条目集可以被标记为未在使用中,然而新的目录条目集可能还未被写出来。在此情况下,被重命名的索引节点可能被完全丢失并且它的簇被丢失。虽然这可能不是期望的,但是它使卷具有一致的目录元数据。换言之,没有目录被损坏(除了如上文描述的多个扇区更新之外并且可以如上文描述的来处理它们)。以此方式,文件系统驱动器206可以被配置成以故障安全方式重命名索引节点。计算设备100和/或其部件可以执行在本文中描述的技术以允许计算机可读介质(诸如例如,系统存储器104和/或存储设备118)的更故障安全操作。以此方式,计算设备100代表被配置成使能存储设备的故障安全操作的设备的一个实施例。应注意,当文件系统驱动器206实施上文描述的技术时,只要计算设备100自身不会由于故障事件导致随机数据损坏,属于索引节点的损坏的簇链可能永远不发生。在一个或多个实施例中,可以以硬件、软件、固件或其任何组合实施描述的功能。如果以软件实施,则所述功能可以作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质传输并且通过基于硬件的处理单元执行。计算可读介质可以包括对应于有形介质(诸如,数据存储介质)的计算机可读存储介质或包括便于计算机程序从一个地方转移到另一个地方的任何介质(例如,根据通信协议)的通信介质。以此方式,计算机可读介质通常可以对应于(1)非暂时性有形计算机存储介质或(2)通信介质,诸如信号或载波。数据存储介质可以是可以通过一个或多个计算机或一个或多个处理器访问以检索用于实施在本公开内容中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。通过实施例而非限制的方式,这样的计算机可读存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁性存储设备、闪存或可以被用来以指令或数据结构的形式存储所需的程序代码并且可以被计算机访问的任何其他介质。此外,任何连接被恰当地称为计算机可读介质。例如,如果使用同轴电缆、纤维光缆、双绞线、数字用户线路(DSL)或无线技术(诸如,红外线、无线电和微波)从网站、服务器或其他远程源传输指令,则同轴电缆、纤维光缆、双绞线、DSL或无线技术(诸如,红外线、无线电和微波)被包括在介质的定义中。然而,应理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其他暂态介质,但是代替地被指向非暂态的、有形的存储介质。磁盘和光盘,如在本文中使用的,包括压缩光盘(CD)、激光光盘、光学光盘、数字通用光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘使用激光来光学地复制数据。以上的组合也应该被包括在计算机可读介质的范围内。指令可以由一个或多个处理器(诸如,一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等同的集成或分立逻辑电路系统)执行。因此,如在本文中使用的术语“处理器”可以指任何前述结构或适合于实施在本文中描述的技术的任何其它结构。此外,在一些方面,可以将在本文中描述的功能提供在专用硬件模块和/或软件模块内。此外,可以在一个或多个电路或逻辑元件中完全实施所述技术。可以在多种设备或装置中实施本公开内容的技术,所述设备或装置包括无线手持机、集成电路(IC)或一组IC(例如,芯片组)。在本公开内容中描述了多种部件、模块或单元以强调被配置成执行公开的技术的设备的功能方面,但是不一定需要通过不同的硬件单元实现。而是,如上文描述的,多种单元可以被组合到一个编码解码器硬件单元中或由可互操作硬件单元的集合连同合适的软件和/或固件提供,所述可互操作硬件单元的集合包括一个或多个如上文描述的处理器。已描述了多个实施例。这些和其他实施例在所附权利要求的范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1