有时出于某些需要,我们要为磁盘的可用空间做一些限制。比如一些移动硬盘或闪存盘等移动存储设备,为了避免其他人写入文件带来病毒,希望对设备的部分可用空间进行“伪装”,使得看上去可用存储空间不足,但是自己需要使用时又可以方便地调整出可用空间。对于类似的存储空间管理,可以借助fsutil命令创建“稀疏文件”(Sparse File)来实现。
一、了解稀疏文件
稀疏文件是应用程序生成的一种特殊文件,这类文件尺寸可以非常大,主要由“00”构成的,实际占用很少的磁盘空间,但是会向系统声明其所需要的总空间。稀疏文件可以通过系统自带的fsutil命令创建。例如,以管理员身份启动命令提示符,输入命令“fsutil file createnew d:\system 157286400”,回车执行后即可在D盘(分区需采用NTFS格式)中创建一个名为system的文件。输入并执行命令“dir d:”可以看到其大小为150MB。
命令解释:
“157286400”表示创建大小为157286400字节(即150MB的文件,1MB=1048576B)的文件,如果要创建其他大小的文件,请自行换算。
继续输入并执行下列的命令(命令尾部的冒号及其后面的内容为注释,实际操作时不用输入):
fsutil sparse setflag d:\system :可以将该文件转换为稀疏文件
fsutil sparse queryflag d:\system :查看文件是否为稀疏文件
fsutil sparse setrange d:\system 0 157286400 :将文件稀疏范围设置为0~157286400字节,即将150MB空间全部设置为稀疏空间。
现在打开D盘,右击system并选择“属性”,在属性窗口中可以看到该文件的大小为150MB,但是占用的空间却显示为0字节,这正是稀疏文件的典型特征。这里需要注意的是,只有在NTFS格式的分区中创建的稀疏文件才不会占用创建数值大小的空间。
对于稀疏文件内容则可以借助DiskGenius软件来查看。启动程序后打开D盘,在右侧的窗格中找到并双击system文件,在打开的窗口中可以看到文件数据都是显示为“00”。
二、用活稀疏文件
通过上文的介绍了解了稀疏文件的含义及其创建的过程,在实际使用中就可以利用稀疏文件来为一些操作服务。如前言所述的可用空间管理案例,由于移动硬盘经常要借给同事使用,现在可以借助稀疏文件来更好地对可用空间进行个性化管理。
1.确定分区可用空间的数值
假设移动硬盘的盘符为D,首先将其回收站中的文件清空,接着查看移动硬盘的可用空间,如本例数值是151MB。
2.快速创建指定大小的稀疏文件
启动记事本程序并新建一个批处理文件1.bat,放置在D:\备用,代码如下:
set free1=1048576
set /p free2=请输入可用空间倍数(MB):
set /a free3=%free2%*%free1%
fsutil file createnew d:\system %free3%
fsutil sparse setflag d:\system
Attrib +h +s d:\system
这里可以使用稀疏文件尽可能地占用移动硬盘的可用空间,如设置稀疏文件占用150MB。运行上述批处理后在打开的窗口中输入150,回车即可。
此时再打开D盘查看创建文件前后的可用空间并加以比较,可以看到创建稀疏文件后可用空间就只剩余1.8MB(Windows对容量计算会略有误差)。
3.快速释放可用空间
为了方便自己使用,继续创建一个批处理文件2.bat,也放置在D:\备用,代码如下:
set free11=1048576
set /p free22=请输入需要使用空间倍数(MB):
set /a free4=%free22%*%free11%
fsutil sparse setrange d:\system 0 %free4%
在以后如果需要使用其中的100MB可用空间存储文件时,运行2.bat后输入100,那么稀疏文件的“0~104857600”字节空间(即100MB)就变为可用的存储空间。
再次打开D盘的“属性”窗口,可以看到此时的可用空间已经变为101MB了(含之前剩余的1MB)。这样自己需要使用多少空间就释放多少,释放完成后如果要重新填满空间,可以根据剩余空间大小,删除“d:\system”后再次运行1.bat,重新填充即可。
从上面的操作可以看到,本文介绍的方法和只是在移动硬盘中简单地存储无用文件来填充空间操作不同,通过fsutil命令可以在极短的时间内快速创建指定大小的“稀疏文件”。如有需求,可以在1秒内创建100GB大小的文件来填充空间,并可以快速设置稀疏区域来释放可用空间,非常适合对可用空间存储有特定需求的用户使用。
这是水淼·帝国CMS站群文章更新器的试用版本更新的文章,故有此标记(2023-04-18 08:56:15)