| |
|
阅读网 -> 游戏动漫 -> 为什么 Steam 删除 80G 的游戏只用了一秒? -> 正文阅读 |
|
[游戏动漫]为什么 Steam 删除 80G 的游戏只用了一秒? |
[收藏本文] 【下载本文】 |
为什么 Steam 删除 80G 的游戏只用了一秒? 关注问题?写回答 [img_log] 游戏 Steam steam社区 为什么 Steam 删除 80G 的游戏只用了一秒? |
卸游戏大伙已经给你解释清楚了,我不知道你有没有删过创意工坊啊。 如果你订阅了一堆mod,不卸载只是取消全部订阅,就会发现steam压根没删任何文件。 然后可能某一时间steam突然想起来,我草,忘了删文件了,才在你的下载界面弹出一个更新创意工坊内容。 |
写入:房客入住房间。 删除:宣布房间为空,可以入住。 覆盖:让新房客进去把老房客捅死。 文件修复:法医缝缝补补把尸体补全。 分区:成立子酒店。 碎片文件:把新房客分成好多块散到各个房间。 写保护:把房间锁死。 格式化:纳粹认为酒店里全是犹太人,派出党卫军抓捕。 |
这个问题下截止到目前的回答还没看到一个特别准确的。 既然是80G的Steam游戏,默认操作系统是Windows,文件系统是NTFS。Windows支持的其它文件系统,FAT/FAT32分区最大只有8G/32G(理论上FAT32分区大小可以是2T,但Windows不允许用FAT32格式化大于32G的分区),放不下80G的游戏,exFAT默认只能用来格式化移动存储设备不能用来格式化固定磁盘,所以这个问题下用FAT来解释的回答大概率都是错的。ReFS估计没几个人在用吧? 在NTFS分区里面,一个文件,根据文件大小的不同,有3处或者5处相关的信息: 在$MFT里面的FILE记录,大小固定为1K。$MFT(Master File Table,主文件表)是NTFS最重要的文件,默认隐藏不能访问,记录着这个分区内所有的目录和文件信息。一个文件在$MFT里面的记录主要记录了文件名、所在文件夹的记录号、大小、创建/上次修改/上次修改$MFT记录/上次访问时间等属性。如果这条1K记录剩余的空间大于文件大小,使用一个特殊的属性直接在记录中保存文件的数据,这个属性在NTFS称为常驻属性;如果剩余空间小于文件大小,文件数据需要使用额外的簇保存,使用另一种属性记录这个保存这个文件数据所占用的簇,这个属性称为非常驻属性。在上级文件夹的索引数据中的记录,大小不定,通常在88~600字节之间。每个文件夹(包括根目录)在内,会记录本文件夹下所有子文件夹、文件的信息,包括文件在$MFT里面的记录号、大小、创建/上次修改/上次修改$MFT记录/上次访问时间等属性,这些信息占用82字节。此外还有这个文件/子文件夹的文件名,最大255个字符,每个字符占使用unicode编码,占两个字节。最后会补齐8个字节。此外,为了兼容DOS的8.3文件名,每个文件/子文件夹通常会有另一条文件名是8.3格式的记录,这条记录的大小一般不会大于96字节。在$Secure里面的记录,数量和大小不定。$Secure记录每个文件的权限,例如某个用户/组对这个文件具有什么样的权限。对于家用情况,没多少用户/组,一个文件的权限数据通常很小不会超过4K。在$Bitmap中对应的位。NTFS分区中每一簇按顺序对应$Bitmap文件中的1bit,0表示这一簇未被占用,1表示被占用。如果是文件在$MFT记录中的数据属性为非常驻属性,文件所占用的每一簇在$Bitmap文件中对应的bit置1。文件数据实际占用的簇。一般来说稍微大一点的文件,都很可能会形成多个碎片,但这个问题是删除文件,无需考虑碎片的情况,这个后面会提到。 根据第1项的说明,如果文件夹数据/文件大小很小的话,上面4、5两项是没有的。如果是簇大小为4K的NTFS分区,80G的文件在$bitmap中占用80×1024×1024÷4=20Mbit=2.5MB。如果考虑到这些簇可能散乱分布在整个分区中的不同位置,需要把整个$Bitmap文件更新一遍的话,一个1TB的分区的$Bitmap文件是32MB。 所以,每删除一个文件/文件夹,都要更新1~4项的信息。第5项无需更新,文件所使用的簇在$Bitmap中对应的位置0后,将来如果这些簇用来保存新的文件数据会直接覆盖。当然,如果是使用固态硬盘的话,Windows会发送trim指令给固态的主控,主控会在空闲的时候根据磨损算法回收对应的Page。 如果是机械硬盘的话,在没有缓存的前提下,单是找到1~3项的记录通常就需要十多次寻道。每一处记录的更新必然有一次寻道,但对于固态来说只要文件数量不是太多,这个寻道(固态其实应该叫寻址更合适点)时间都可以在1秒内完成。而每一处信息更新通常只需要写入1簇(4K)的数据,就算是机械硬盘,这个数据传输时间也是基本可以忽略的,固态就更不用说了。 最后,根据前面的论述,如果一个游戏有1024个文件的话,写入数据量是1024×12KB=12MB,加上$Bitmap文件的2.5~32MB,总计是14.5MB~44MB。SATA固态硬盘通常4K随机读性能在20MB/s以上,4K写性能100MB/s以上,在这些数据都在缓存中的前提下,还是可以在1秒内完成的。如果文件数量更少,就更加没有压力了。 某些回答里面猜测的这些索引记录是否会在Steam安装游戏的时候使用预分配空间是使得这些记录集中在一起,我可以肯定不是。下图中灰色底色的行是我电脑上的Steam里面泰坦之旅这个游戏的文件夹以及文件夹下若干个文件的起始簇编号、扇区地址: |
|
可以看到,这几个文件/文件夹不管是$MFT记录号还是簇编号,都并不连续。另外,这个游戏的文件加上目录数量不超过600。 |
|
Steam能做的,估计是把这些记录所在的扇区缓存到内存中,减少读取数据的寻道/寻址次数。毕竟前面的计算已经足以说明,就算几个游戏加起来如果有一千个文件,这些数据加起来也就12MB,一万个也就120MB(不算$Bitmap),对于今天的主流配置来说这点内存占用完全可以忽略。而不管是删除游戏还是我们平时打开游戏来玩,就不需要从硬盘中读取这些数据了。 最后,关于NTFS分区上如何找到一个文件的$MFT记录号、上级文件夹的索引数据,有兴趣的朋友可以看看我前几天写的文章: 木头龙:为什么说固态硬盘的4K性能很重要?983 赞同 · 221 评论文章 |
|
|
手机删除软件是系统负责 安卓:你给我滚 软件:好的,我马上滚 电脑删除软件是软件自己的删除程序负责 删除程序:主人,真的要我滚吗?(问了几遍) 然后还留一个是否删除配置的选项,不勾日后就秽土转生 至于steam Steam:哥们儿,那儿啥东西也没有,真的 系统:好 |
硬盘就像一个公告墙,可以往上面不断地贴海报。80G游戏就是80寸的“巨幅海报”贴的时候要废不少功夫,但是当我们不需要他的时候并不需要把它撕下来,而是标记一下“这个海报不用了”就行,之后贴其他海报的时候直接贴在他上面。 |
steam向你的电脑花了一秒钟解释那里没东西,然后你的电脑信了 |
简单地说。 steam的删除方式就是在你的硬盘上这个游戏占用的这块空间上画了个拆。 意思是这块地方是空的了。 你别管这块地上有什么东西。 你想盖什么就直接往上盖就行了。 |
因为它的删除逻辑是“哥们儿,相信我,这里没有任何东西” |
@pansz 提出了5个猜想: steam其实在后台删除,只不过先告诉你删完了,实际上他还在后台继续做删除工作呢。 steam使用了类似windows回收站的机制,删除的瞬间直接把游戏移动到steam内部的私有回收站,这样的操作就必定极快,给用户造成了秒删除的感觉。 前两者结合,先移动到私有回收站让你看起来游戏已经没了,然后在后台继续做删除工作。steam的空间预分配,或许本质上就是它的私有回收站。 题主的硬盘真的就那么快,80G确实可以秒删,现在的高速NVME结合操作系统缓存或许真能做到。 可能还有其它可能,但具体情况要具体分析。 我用Process Monitor 监控了一下: 动作:用steam卸载dota2 效果:经过三十秒钟之后,steam表示卸载完成 环境:Win10系统,固态硬盘 procmon表示: 从 2021/8/6 11:47:51.6472076 到 2021/8/6 11:48:30.1125172 这半分多钟的时间里,steam.exe反复对C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\里的文件调用 CreateFile QueryAttributeTagFile CloseFile 这三个操作。(也就是删除操作) 所以,我提出一个新的猜想: steam就是老老实实的做删除的。题主提到的那个80G的游戏才是重点,是否那个游戏自身做了固实存储?(请题主告诉大家那个游戏的名字 更新:评论区有人说steam删了游戏立刻重新安装是秒安。我实验了一下,不是秒安,是重新下载。 |
额。。。计算机专业。 其他答案都关注在“删除文件只是删除索引”,是的,这没错,可我们平时手动删文件也是这样的,这跟STEAM为什么更快没有关系。 80G数据,如果是一个文件,你手动删除也是秒删,硬盘读写灯都不带亮的。 但是一般游戏都是一大堆文件,数据也不连续,有一大堆索引要去废弃,一秒是很难做到的。 我觉得steam是做了个异步删除,仅此而已。 对了,想起来steam在安装游戏时有个空间预分配,我怀疑这biaozi是申请了一整块连续空间,这样读写都会更快,索引大概也在索引扇区连续,这样也是快的因素。 11.26 感谢评论区的同学们。 有人提到了steam做了“固实”化存储,我找不到直接证据,因为这些文件看起来是散列的,最多是有些游戏把资源文件做了打包(你可以看到好几个GB的 .res 或者类似文件),这个跟steam没有关系。 关于下载前的预分配为什么慢,倒是有了点进展,其实是把游戏的所有文件展开并建立空间了,文件越是杂乱,肯定越慢,想象一下瞬间建立1万个带大小的文件。。。 这是一个相关答案:Steam 的下载原理是怎样的? - komm的回答 - 知乎 https://www.zhihu.com/question/346550500/answer/835306491 下图是下载情况,可以看出所有文件被展开建立了。一个4GB的游戏,在800MB的安装数据下载完成前,4GB空间全部分配,并且内部所有文件都按它该有的大小建立了。下载完成(解压并写真实数据完成)后,这些文件被从downloading文件夹移动到common文件夹下面,就算完成了。 |
|
|
|
那么问题来了,为什么删除会那么快呢,由于我这个硬盘本身比较快,这点东西也秒删了,我来不及判断是否是异步删除,现在问题回到了原点。 我甚至怀疑steam里面删除真的比我手动删这个文件夹要快吗???验证这一点,需要找个慢速机械硬盘+下载80G的游戏(杰洛特高清版?给TA爱?)去。。。 |
|
图片来源网络 |
这么解释吧 没下载游戏→空房间 下载游戏→有人的房间 删除游戏→把他捅死,说他已经不住这里了,但其实尸体和行李都还在这里,但这里对外宣称已经是空房间了 自动清理→慢慢处理尸体和行李 覆盖安装→就清理到这吧,剩下的让下一户清理去 重新下载→释放舍利子回魂把他复活一下,如果东西还没给他清理完那只需要复活他的本体 |
几岁了,用过录音磁带么? 当一盘录满了的磁带不需要再播放的时候,我们无需费时间把磁带整个抹除一遍,只要拿一只笔在磁带盒的纸上写:“空白”。 几秒钟的事情 。 |
打个比方来说,磁盘空间就像是一片堆满砖头的工地,存进去的数据就像是在这片工地里用砖头堆了个建筑出来并且给它办好了各种文件手续。 然后删除文件的时候就像是拿红油漆给这个建筑刷上一个大大的 拆 字儿。然后把它的相关文件手续也注销了。此时这个建筑还在但是它已经没用了。 最后下一次要在这个位置盖新建筑的时候,才会给它拆成砖头重新盖成新建筑。 |
你 80G 的游戏一般也就几百个文件,处理起来快得很 删除慢的都是大量细碎小文件的情形,比如这种 |
|
|
你以为的删除,往文件脑门上来一枪,送去火化。 实际的删除,人还在,身份证被注销了, |
这就是我很苦恼的原因:电脑里的H片删除了,却不是真的删除了。狗头。 |
你以为的下载、删除: 电脑:黑板 下载:板报写满黑板 删除:慢慢把黑板擦干净 实际上的下载、删除: 电脑:黑板 下载:板报写满黑板 删除:“啪”一张大黑纸覆盖黑板,还嚷嚷一句:“黑板擦好了!” |
对于steam我没有什么研究。但是我想指出几点重要的因素: 文件和目录的删除速度只和被删除的对象数量有关,与其存储大小基本上无关(因为只是从索引当中删除文件入口)。所以诸如80G并不是一个好的参考指标。这点其它回答也有提到;很多人都是在和系统当中手动删除进行比较,但是我估计很多人所谓的手动删除是指在图形界面按DEL或者右键菜单删除。这种删除原本就是很慢的,因为你会注意到它在真正进行删除之前会进行好长时间的计算统计,后面还要图形化显示进度。如果你改用命令行(DEL/RMDIR)会发现整个删除过程只需要图形界面的1/10-1/20左右的时间(当有数万+文件的时候)。Steam显然是通过API进行的删除,相当于命令行删除。 |
新硬盘:00000 安装游戏后:10010(数据) 删除后:10010(假装删除) 安装新游戏后:11100(直接覆盖) 格式化之前:11010(某不可见人的图片) 虚假的格式化之后:11010(可复原) 真正的格式化之后:00000(彻底看不到了) |
跟大小没关系,主要看文件数量。 对于机械硬盘还得考虑文件的存放分布位置。 Windows的删除只是标记一下,告诉系统这个文件被删除了。 如果只有一个文件,哪怕8TB都只是标记一下的事。 如果有一亿个文件,还散乱分布到硬盘的不同扇区和磁道,哪怕只有1g,那估计你要删到天黑。 还有,如果仔细观察,就会发现steam在下载前,会有一个预分配空间 的过程。这个操作通过优化文件的位置,可以发挥机械硬盘的连续读写优势,让游戏读盘更快。删除的时候当然也更快????? |
额,没证据,按照经验胡诌两句。 首先稍微懂点计算机的都知道,大多数常用文件系统的删除就是将文件标记为被删除,内容是不管的。实际上操作非常非常小。 但这个其实不解释Steam删除为啥那么快,因为Steam看起来比文件管理器删除更快。 为什么?当然可以解释为Steam只是把操作放在后台了。有可能,但个人以为不是,因为有更好更快的方法。 这里涉及到一个细节,就是当我要删除一个文件目录的时候,系统会怎么做?这个问题的答案实际上是复杂的,并不是简单地把一个目录标记为删除那么简单。因为现代文件系统里不仅仅只管文件本身,还有各种对象比如挂载点、Shell Object之类的;除此之外,还涉及文件的权限,权限背后又是个复杂的系统;再加上用户配额系统、卷影副本等。这些事情放在一起,导致一般情况下删文件一定是要一个一个文件枚举出来删的。这个过程其实非常慢(相比理想中的放置一个删除标记)。 这就像为啥把文件夹挪到回收站是瞬间完成,清空回收站却花时间一样,因为前者是真的只改一个文件夹的标志,而后者要走完整的枚举删除过程。 然而,Steam客户端是有足够信息来简化这个枚举删除过程的。游戏有涉及什么文件,Steam客户端是知道的,这就可以避免至少绝大部分的枚举工作;然后游戏的资源权限又是Steam管理的,可以避免权限检测的大部分工作,可以跳过许多其他不必要的操作。于是,Steam完全可以直接用完整的文件和文件夹列表来自底向上删除,避免大部分读取操作和系统对象访问,实现极快的删除。遇到有非受管文件的例外的时候也有各种小技巧可以处理。 当然,没有实验验证,所以只当抛砖引玉。 |
贴吧看到的回答 |
|
|
粗一看这是个简单的问题,仔细一想,事情并没有那么简单。 首先我说另外个事: 平时我删文件也是秒删的,因为我一般会启用回收站,并且去掉【确认删除】的对话框。因此只要目录尺寸不超过回收站大小,点击删除键一定就是秒删。 回收站秒删的原理在于:它只删除了父目录,目录内的所有文件跟子目录根本就不需要动。因此无论目录有多大,里面有多少个文件,删除的都只有最高一级目录,无论目录有多大都等同于只删除了一个单一文件,所以回收站删除会比删除几千个文件要快。 —— 现在来说题主的问题,题主的问题是删80G的游戏,而这个游戏的空间大于大多数用户的回收站大小,因此正常情况下,它的删除必定会触发真正的删除流程,要删除的文件如果很多,就会稍微慢一些。但 steam 删除得很快,推测有几种可能: steam其实在后台删除,只不过先告诉你删完了,实际上他还在后台继续做删除工作呢。steam使用了类似windows回收站的机制,删除的瞬间直接把游戏移动到steam内部的私有回收站,这样的操作就必定极快,给用户造成了秒删除的感觉。前两者结合,先移动到私有回收站让你看起来游戏已经没了,然后在后台继续做删除工作。steam的空间预分配,或许本质上就是它的私有回收站。题主的硬盘真的就那么快,80G确实可以秒删,现在的高速NVME结合操作系统缓存或许真能做到。可能还有其它可能,但具体情况要具体分析。 具体哪种可能,题主自己研究一下具体情况吧。 |
当初陈老师也是以为下达了一个删除命令,文件就真的没了, |
因为别的游戏和软件运行在电脑上需要安装,删除就需要依次删除分布在硬盘各处的文件、清理注册表、向厂商发送卸载信息。而steam给游戏提供了免安装的环境,删除游戏就只是删除一个文件夹。再加上steam安装游戏时对游戏目录进行了固实处理(预分配空间的时候就创建了一个固实文件,然后越过文件系统直接在固实文件里按位写入,因为是NTFS的特性所以windows也能读取到固实文件内部)删除一个文件夹在文件系统层面上只是删除一个文件,所以删除一个游戏就是删除一个文件。 |
这个和文件系统有关 你可以把电脑磁盘理解为一本特大特厚的书。既然是书,你想快速的找到你想要的内容就需要一个目录,对吧,以此来进行索引。 计算机存储系统也类似,有一个地方专门存文件放在哪里,也就是我们所理解的“目录”。而删除的过程,就是把对应的目录给“撕了”,计算机找这个“目录”发现没有想要的文件,就认定该文件在计算机中不存在。以此达到删除的目的。但目录删了,文件还是真实存在的。 下次要写入文件时,如果要用到这部分空间,但查找目录,发现没有文件占用这部分空间,就直接进行覆盖了。如此一来,避免了删除文件时的大量读写,有利于磁盘的性能和寿命。 删除游戏时,steam告诉系统,我要删了这部分文件,系统收到了,告诉文件系统,这部分空间里的文件我不要了,于是文件系统就把这部分目录撕了。 —————————————— 更新: 之前刚看题的时候以为就是个简单的文件删除,在仔细读了题和参考大家的回答后写下本次更新。 经测试,被删游戏无论是数G还是数十G,平均删除时间约为一秒。删除过程中任务管理器磁盘占用无明显变化,CPU占用同磁盘一样,无明显变化,由此基本可以判定,steam不是异步删除。 根据答主平时使用steam时的观察,steam在游戏实际下载之前,会有一个预分配空间的操作。因此,答主猜测这个预分配空间应该是在寻找硬盘中一段连续的、足够整个游戏大小的存储空间。这也就是为什么每个玩家预分配空间所花费的时间不一样。 且预分配空间操作完成时,磁盘占用就已经完成,尽管你游戏并没有开始下载。这有点类似于先把位置占好,有货物来就直接按序摆放。 以此,steam删除快的原因可能是因为分配的空间是连续的,所以索引并不需要特别多的时间。 以上仅为答主的个人猜测与推断,仅代表个人观点。 ——————- 再次更新: 之前的猜测被推翻了,这个回答证实了我的猜想是错误的(被打脸),各位以这个回答为准吧)狗头 |
假设空硬盘是这样的: 00000000000000 装了游戏后这样的: 10101010101010。然后steam宣布这片地方名花有主(一般是提前宣布) 你删除了游戏 steam宣布10101010101010这片地方空了,想用就来吧。 这时数据是可以恢复的,本质上没被删除。 如果你又下载了东西,是11111111111。 电脑就把原来的0变成1就可以了。 |
这个跟你说吧,删除呢是这样的。 经过残酷的高考,四个高中不好好学习的家伙考入了某农大的计算机专业。学校给每个人都有发了一个学生证,学校就靠学生证来区别每个学生。四个家伙的学号分别是23,24,25,26号。好巧不巧四个家伙分到一个寝室,(这就存到硬盘了) 于是臭味相投,天天在寝室玩csgo,经过了好几个学期,四个同学csgo都到了大地球了,但是他们也挂了很多科,这时教育局说大学生现在不能毕业清考了,(你要把存在硬盘的文件删了) 所以他们四个要被劝退,于是教导主任(系统)收回了他们的学生证,并告诉教育局(也就是要删文件的你)你看我已经把他们的学生证收了,他们已经被劝退了。 这四个家伙人傻了,咋办,被劝退了,回家要被打。那我能去哪?突然他们发现教导主任并没有把他们赶出寝室,于是他们就呆在寝室,能拖多久拖多久吧。反正教导主任没事不会下寝室的。(这些文件就呆在你的硬盘里) 新的学期到了,有新生来了,(要存其他新的文件夹)教导主任想起那四个家伙的寝室,于是教导主任就把他们赶出去,让新生住进去了。至于那四个家伙回家会怎么样,就不是我们关心的了,哈哈哈哈。 所以这一秒钟并没有干什么,只是教育局得到了四个学生的学生证,由此推断出他们离校了。 |
跟你说个事吧,我亲生经历的。 我用斯丁母购买了帝国时代3年代版,下载回来后发现只有一个原版也就是只有欧洲国家选的版本,还全是英文,我想换中文,被告知,没有汉字。 我一气之下也顾不得自己花了几百块人民币的事实,在斯丁母操作删除,退出了斯丁母。接着怒而下载某游下载白嫖,反正老子给正版交了钱了,问心无愧。 然后我在某游找到了帝国时代3简体中文版,全补丁,下载。 下载完毕后,我打开游戏,你猜怎么着? 斯丁母启动了~ 不仅启动了,还进了游戏,游戏全部都是简体中文!惊不惊喜,进去打一局,连游戏时间记录都有了。 |
|
[收藏本文] 【下载本文】 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
古典名著
名著精选
外国名著
儿童童话
武侠小说
名人传记
学习励志
诗词散文
经典故事
其它杂谈
小说文学 恐怖推理 感情生活 瓶邪 原创小说 小说 故事 鬼故事 微小说 文学 耽美 师生 内向 成功 潇湘溪苑 旧巷笙歌 花千骨 剑来 万相之王 深空彼岸 浅浅寂寞 yy小说吧 穿越小说 校园小说 武侠小说 言情小说 玄幻小说 经典语录 三国演义 西游记 红楼梦 水浒传 古诗 易经 后宫 鼠猫 美文 坏蛋 对联 读后感 文字吧 武动乾坤 遮天 凡人修仙传 吞噬星空 盗墓笔记 斗破苍穹 绝世唐门 龙王传说 诛仙 庶女有毒 哈利波特 雪中悍刀行 知否知否应是绿肥红瘦 极品家丁 龙族 玄界之门 莽荒纪 全职高手 心理罪 校花的贴身高手 美人为馅 三体 我欲封天 少年王 旧巷笙歌 花千骨 剑来 万相之王 深空彼岸 天阿降临 重生唐三 最强狂兵 邻家天使大人把我变成废人这事 顶级弃少 大奉打更人 剑道第一仙 一剑独尊 剑仙在此 渡劫之王 第九特区 不败战神 星门 圣墟 |
网站联系: qq:121756557 email:121756557@qq.com 阅读网 |