ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SQL Server备份还原与修复实战:从恢复模式到灾难恢复完整指南

SQL Server备份还原与修复实战:从恢复模式到灾难恢复完整指南 简介SQL Server备份、还原与修复是数据库运维中的核心环节。这份docx文档面向数据库管理员、运维工程师以及SQL Server初学者系统梳理了完整备份、差异备份与事务日志备份的适用场景并详细说明如何通过SSMS执行手动单次备份以及利用维护计划向导配置自动化备份任务同时给出备份介质选择、压缩与密码保护等可选配置建议。还原部分涵盖备份文件校验、还原前准备、覆盖策略和事务日志处理等关键环节修复部分重点介绍PhotoRec软件在数据被删除或勒索病毒加密时的恢复思路以及Data Numen SQL Recovery对损坏MDF文件的修复方法修复后可自动将数据导回SQL Server。压缩包共1个文件为docx格式文档大小约660KB内容按备份、还原、修复三大模块组织步骤清晰便于对照实践。目前已有717人学习下载适合需要快速掌握SQL Server数据保护与故障恢复能力的读者。1. SQL Server 备份、还原、修复这三件事平时没人当回事出事全靠它SQL Server 备份、还原、修复这三件事平时最容易被当成例行脚本真到要用的时候每一步都可能变成事故现场。凌晨两点被电话叫醒生产库报 824 错误数据库变成疑似损坏你打开备份目录昨天的全量备份文件好好躺在那里于是开始还原——先报 3154再报 3633最后库一直停在“正在还原”。这不是段子是很多 SQL Server 使用者第一次做灾难恢复的真实开场。这里不讲官方案例只讲我从日常运维里攒下来的做法恢复模式怎么选、备份脚本怎么写、RESTORE 命令哪些参数不能省、数据库损坏后先跑哪个命令以及五条容易翻车的踩坑记录。新手可以照着一路还原成功熟手重点看边界时间点还原的缺口在哪、REPAIR 能修什么不能修什么、没有备份时到底还能救多少。2. 把备份做对全量、差异、日志备份的选型与 T-SQL 脚本2.1 恢复模式决定备份上限简单、完整、大容量日志怎么选很多人把“做了备份”理解成“跑了 BACKUP DATABASE”但还原能恢复到多细是由恢复模式决定的。恢复模式是数据库级属性决定事务日志怎么记录、怎么截断也直接决定你能用哪几种备份类型。做备份策略的第一件事不是写脚本是先把每个库的恢复模式定下来。恢复模式支持日志备份支持时间点还原日志截断方式典型场景简单 SIMPLE不支持不支持检查点后自动截断开发/测试库能接受丢最后一段数据完整 FULL支持支持只有日志备份后才截断生产 OLTP 库业务不能丢数据大容量日志 BULK_LOGGED支持但不完整受限同完整模式大批量导入、索引重建的窗口期生产库默认应该选 FULL。SIMPLE 模式下日志备份功能直接被关掉你永远做不了“还原到删除表那一刻”日志文件也不会因为备份而截断只能靠检查点自动清理。BULK_LOGGED 在我看来只是一个过渡状态大批量操作时用最小日志记录来提速操作完立刻切回 FULL并马上补一次日志备份否则日志链覆盖不到批量操作期间的数据。ALTER DATABASE [TradeDB] SET RECOVERY FULL; ALTER DATABASE [TradeDB] SET RECOVERY SIMPLE; GO切到 FULL 之后要立即做一次全量或差异备份给日志链建一个基准点。注意一个常见误解恢复模式写成 FULL 不等于安全还要有配套的日志备份计划。我见过不少库是 FULL 模式日志文件涨到 200GB却一份日志备份都没有——因为没有人告诉它“日志备份才会让日志截断”日志文件只会只涨不缩。注意SIMPLE 切 FULL 后再做第一次全量备份之前事务日志的早期部分没有对应的还原基准这段日志即便备份出来也无法单独还原。2.2 一套可落地的备份脚本BACKUP 参数与落盘检查常见做法是生产库用 SQL Agent 作业全量每天 1 次、差异每 4 到 6 小时 1 次、日志每 15 到 30 分钟 1 次。三类备份分开落盘、分开命名不要混在一个文件里否则还原时找 Position 能把人绕晕。我先给全量-- 全量备份每天 01:00 执行覆盖同名旧文件 DECLARE file VARCHAR(300); SET file ND:\SQLBackup\TradeDB_Full_ CONVERT(VARCHAR(8), GETDATE(), 112) N.bak; BACKUP DATABASE [TradeDB] TO DISK file WITH INIT, CHECKSUM, COMPRESSION, STATS 10;逻辑说明INIT 覆盖目标文件避免上一次的文件残留影响判断CHECKSUM 在备份集里写入校验和还原时可以提前发现介质损坏COMPRESSION 默认压缩率高代价是 CPU凌晨跑全量完全没问题STATS 10 每完成 10% 打印一次进度作业日志里能看到进度而不是干等。文件名带日期后面做保留策略轮转时按日期删就行。差异备份依赖最近一次全量备份全量被删、被覆盖或者换盘之后旧的差异备份全部失效。所以每次全量备份重做之后原来的差异文件就应该进入清理名单否则还原时很容易把跨全量基准的差异拿来用直接报 LSN 不连续-- 差异备份每 4 小时一次只备份自上次全量以来变更过的区 BACKUP DATABASE [TradeDB] TO DISK ND:\SQLBackup\TradeDB_Diff_ CONVERT(VARCHAR(8), GETDATE(), 112) N_ REPLACE(CONVERT(VARCHAR(5), GETDATE(), 108), :, ) N.diff WITH DIFFERENTIAL, CHECKSUM, COMPRESSION;日志备份是还原粒度关键频率直接决定你最多丢多少数据。每 15 分钟一次日志备份灾难发生时最多丢 15 分钟每 6 小时一次丢了 6 小时。日志备份文件本身很小不要在这种文件上省空间-- 日志备份每 15 分钟一次完整恢复模式下必配 BACKUP LOG [TradeDB] TO DISK ND:\SQLBackup\TradeDB_Log_ REPLACE(CONVERT(VARCHAR(19), GETDATE(), 120), :, ) N.trn WITH INIT, CHECKSUM;保留策略用 forfiles 清理 N 天前的备份文件避免备份目录被撑满。备份目录满掉之后作业会开始报错但这类错误经常被作业历史淹没等你发现时日志链已经断了好几天forfiles /p D:\SQLBackup /s /m *.trn /d -3 /c cmd /c del path forfiles /p D:\SQLBackup /s /m *.bak /d -7 /c cmd /c del path注意备份到网络共享UNC 路径时SQL Server 服务账号要对共享目录有写权限默认的 NT Service\MSSQLSERVER 经常因为共享权限写不进去。作业显示成功文件却没生成的情况太常见了。判断标准只有一个RESTORE VERIFYONLY 能过备份才算数。2.3 日志备份链与版本兼容为什么日志断一天就做不了时间点还原还原顺序永远是全量 → 最后一次差异 → 按时间顺序的日志 → 收尾 RECOVERY。每一步都必须满足 LSN 衔接SQL Server 用 FirstLSN 和 LastLSN 判断下一份备份能不能接上。中间缺一份日志还原到缺口之后的任何备份都会报“too recent to apply”时间点还原只能退到缺口之前。所以日志备份的价值不在单份文件而在整条链。还原前把当前库的尾部日志备份出来是避免丢最近一段数据的最后机会尤其是在数据文件已经损坏、日志文件还完好的情况下-- 还原前备份尾部日志NO_TRUNCATE 保留已提交但未备份的日志 BACKUP LOG [TradeDB] TO DISK ND:\SQLBackup\TradeDB_Tail_20250101.trn WITH NO_TRUNCATE;NO_TRUNCATE 的意思是只备份不截断哪怕数据库处在异常状态只要日志文件可读就能把已提交事务尽量捞出来。数据文件坏了但日志文件还在时这条命令是抢救最近数据的关键一步能跑就先跑。版本兼容是另一个高频翻车点。很多人问“sql server 2012 的数据库备份 2008 能用吗”答案是备份只能往同版本或更高版本还原不能往下。2008 的备份可以还原到 2012 或更高版本反过来拿 2016 或 2019 的 .bak 往 2008 上还原会直接报备份集版本过新。跨版本降级唯一的办法是导出导入BCP、SSMS 导入导出向导表结构、索引、作业全部要重建那不是还原是重建。从 2016 到 2022BACKUP 和 RESTORE 的核心语法没有变过升级迁移时还原操作是一致的。3. 还原数据库的完整路径从 RESTORE 命令到还原后的收尾检查3.1 还原前先看备份集RESTORE HEADERONLY 与 FILELISTONLY凭文件名猜备份内容是最不靠谱的尤其备份文件是同事交接下来的名字可能写“Full”实际是差异。还原前先读备份头确认库名、备份类型、时间、LSN 范围再决定怎么还原RESTORE HEADERONLY FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak;输出里重点看这几列DatabaseName 是原库名BackupType 里 1 代表数据库备份、2 代表日志备份、5 代表差异备份BackupFinishDate 是完成时间Position 是第几套备份集FirstLSN 和 LastLSN 决定这份备份能不能跟其他备份接上。一个文件里可以塞多套备份Position 决定 RESTORE 时的 FILE 参数填几。接着看备份集里的文件清单还原时 MOVE 参数要用到它RESTORE FILELISTONLY FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak;FILELISTONLY 返回备份内每个文件的 LogicalName、物理路径和类型D 是数据文件L 是日志文件。SSMS 图形界面里“还原数据库”对话框的“将数据库文件还原为”那一栏填的就是这里的结果。原文路径不存在或者不想覆盖原路径时MOVE 是唯一正确的改法。3.2 最小还原命令NORECOVERY、REPLACE、MOVE 三个参数怎么配合还原一套完整备份链第一步是还原全量并保持“正在还原”状态等待后续差异和日志应用RESTORE DATABASE [TradeDB] FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak WITH FILE 1, NORECOVERY, MOVE NTradeDB TO ND:\SQLData\TradeDB.mdf, MOVE NTradeDB_log TO ND:\SQLLog\TradeDB_log.ldf;FILE 1 对应备份集中的第一套备份集NORECOVERY 表示“我还有后续备份要应用”还原完数据库停在 Restoring 状态对外不可访问MOVE 把备份里的逻辑文件映射到目标盘真实路径目标目录必须存在且 SQL Server 服务账号有写权限。接下来按顺序应用差异和日志最后一步才收尾RESTORE DATABASE [TradeDB] FROM DISK ND:\SQLBackup\TradeDB_Diff_20250101_0600.diff WITH NORECOVERY; RESTORE LOG [TradeDB] FROM DISK ND:\SQLBackup\TradeDB_Log_20250101_0615.trn WITH NORECOVERY; -- 全部应用完最后才执行 RECOVERY RESTORE DATABASE [TradeDB] WITH RECOVERY;REPLACE 的边界要讲清楚当目标库已存在同名库、且备份集来自另一个数据库 GUID 时不加 REPLACE 会报 3154。REPLACE 是“覆盖现有库”的旗标适合把测试库从生产备份刷成最新、或者重建一个被删掉的同名库。生产环境还原不要顺手加 REPLACE它会覆盖目标库现状加之前必须确认目标库就是要被覆盖的那个。3.3 还原到时间点与恢复到新库的两个场景误删数据之后的经典操作是还原到删除动作之前一刻。全量还原之后在日志还原时用 STOPAT 指定目标时间RESTORE DATABASE [TradeDB] FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak WITH NORECOVERY, MOVE NTradeDB TO ND:\SQLData\TradeDB.mdf, MOVE NTradeDB_log TO ND:\SQLLog\TradeDB_log.ldf; RESTORE LOG [TradeDB] FROM DISK ND:\SQLBackup\TradeDB_Log_20250101_0615.trn WITH STOPAT N2025-01-01T10:30:00, RECOVERY;STOPAT 是日志还原的参数目标时间必须落在该日志备份的范围内并且前面所有日志都按顺序还原过。如果误删发生在 10:32就选 10:30 或更早不要选刚好卡在操作中间的时间。注意 STOPAT 不能用在全量还原阶段它只作用于日志备份。恢复到新库是另一个高频需求拿生产备份给测试环境或前端联调用。做法是换库名同时用 MOVE 换掉所有逻辑文件的落盘路径RESTORE DATABASE [TradeDB_Test] FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak WITH MOVE NTradeDB TO ND:\SQLData\TradeDB_Test.mdf, MOVE NTradeDB_log TO ND:\SQLLog\TradeDB_Test_log.ldf;这里不写 NORECOVERY还原完直接进入可用状态。这个场景最常踩的坑是忘记 MOVESQL Server 会尝试把数据文件写回原库的路径与现有文件冲突直接报 3633。新库名、新路径、新逻辑文件名三者都核对一遍再执行。3.4 还原后必做的三件事孤立用户、权限与一致性验证备份在 A 服务器还原到 B 服务器之后库里用户还在但 B 上没有同 SID 的登录表现为“登录名能建但连不上库”。先看清单再逐个映射-- 列出孤立用户 EXEC sp_change_users_login report; -- 把已有登录映射回库用户两边用户名一致时 ALTER USER [app_login] WITH LOGIN [app_login];sp_change_users_login 是旧接口SQL Server 2016 里仍然可用report 参数先列清单再逐个改。如果 B 服务器从未建过这个登录要先 CREATE LOGIN 再 ALTER USER顺序不能反。权限要查两层。第一层是文件系统SQL Server 服务账号要能读备份文件、能写数据目录还原报 3633 基本都是这一层。第二层是库内权限还原过来的库如果带着 SID 错乱的用户或者权限过宽的账号按业务最小权限重新授一遍。数据库级别权限不在备份集的一致性范畴里但它一定会在上线当天咬人。一致性验证是最后一道闸。还原成功不等于数据完好备份文件如果有物理损坏而此时未被发现还原照样成功查询到坏页才报 824。从异地拷回来的备份文件尤其要过这一关DBCC CHECKDB (NTradeDB) WITH NO_INFOMSGS;输出 0 个分配错误和 0 个一致性错误再放行。环境版本不同也要在这里确认高版本备份往低版本还原会直接失败这个问题在应急预案里就要写清楚不要等到演练那天才发现。4. 数据库受损后的修复顺序DBCC CHECKDB 到从备份抢救数据4.1 先读 DBCC CHECKDB 的输出823、824 与一致性错误怎么看数据库报“可疑”suspect或者应用连不上第一反应不是卸载重装是先看 ERRORLOG 和 DBCC 结果。823 和 824 是 I/O 错误意思是 SQL Server 从磁盘读数据失败了根源多半在硬件、虚拟化存储或链路8921、8931 是分配结构损坏8909 是页归属错误。这两类问题的处理方向完全不同I/O 错误先修存储再考虑还原逻辑损坏才有 REPAIR 的余地。用系统视图确认数据库当前状态再用错误日志定位具体错误SELECT name, state_desc FROM sys.databases WHERE name TradeDB; -- 在 ERRORLOG 里搜 824 相关记录 EXEC xp_readerrorlog 0, 1, N824;state_desc 里 ONLINE 是正常RESTORING 是等待收尾SUSPECT 是启动或检查时发现损坏。xp_readerrorlog 的第一个参数 0 表示当前日志1 表示类型为错误信息第三个参数是过滤关键字。这个组合能快速定位错误发生在哪个文件、哪个页号。然后裸跑一次完整的 DBCC CHECKDB别用 GUI 的快速检查DBCC CHECKDB (NTradeDB) WITH NO_INFOMSGS;正常输出是 0 个分配错误和 0 个一致性错误。有问题的库会打印具体对象名、索引 ID、页号这些信息是后续判断“能不能只修索引”的依据。跑 CHECKDB 顺便看耗时耗时异常拉长也是存储性能恶化的信号。4.2 REPAIR_REBUILD 与 REPAIR_ALLOW_DATA_LOSS 的边界修复有两条铁律修复前先做一次最后的备份哪怕只是尾部日志修复必须在单用户模式下执行。反过来硬闯的后果是修复到一半遇到锁冲突库卡死在更坏的状态。-- 1. 踢掉所有连接进入单用户模式 ALTER DATABASE [TradeDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; -- 2. 能不动数据就用 REPAIR_REBUILD DBCC CHECKDB (NTradeDB, REPAIR_REBUILD) WITH NO_INFOMSGS; -- 3. 恢复正常状态 ALTER DATABASE [TradeDB] SET MULTI_USER;REPAIR_REBUILD 只重建损坏的索引和分配结构不删数据但要求底层页还能读出来。如果坏页本身读不出来或者分配错误已经波及系统表REBUILD 会失败。这时才考虑 REPAIR_ALLOW_DATA_LOSS它允许删除无法修复的页——名字写得很直白拿数据换库的可用性。用之前把损失范围书面确认一遍能先归档的数据先归档。提示REPAIR 是“把库救活”的手段不是“把数据救回来”的手段。库活着但数据少了业务照样不接受。所以 REPAIR 永远排在还原之后先确认有没有比这个库更接近目标时间的备份再做修复决定。实例级启动失败错误 3313、3414时先查 ERRORLOG 定位是哪个文件起不来能还原就还原不能还原再考虑同版本修复安装。修复安装是覆盖安装数据文件还在原地比重装后附库稳得多SQL Server 2016、2019 都支持。但操作之前必须备份 master 相关的配置信息否则修复后登录、作业、链接服务器配置可能对不上。4.3 没有干净备份时的救场日志尾部备份与数据导出最尴尬的场景备份策略长期失效数据文件坏了库里只剩在线日志。如果恢复模式是 FULL先抢日志尾部这是唯一能往前续的东西BACKUP LOG [TradeDB] TO DISK ND:\SQLBackup\TradeDB_Tail.trn WITH NO_TRUNCATE;成功的话这份尾部日志能接着最后一轮常规备份往后续还原出来的库只丢最后一次日志备份到故障点之间的数据。失败也没关系至少确认了日志文件已经不可读后面就不用再浪费时间试还原了。数据文件坏到连日志都取不出来时把库置为应急状态能查多少算多少ALTER DATABASE [TradeDB] SET EMERGENCY; ALTER DATABASE [TradeDB] SET SINGLE_USER;EMERGENCY 模式把库变为只读诊断状态允许执行 DBCC 和有限查询然后把还能读的业务表用 BCP 或 SELECT INTO 导到新库。注意这是求生路径不是常规还原导出的表不带外键约束和完整索引导入后要手工重建数据也可能有缺失。没有备份又删了表怎么恢复第 5.5 节单独讲。5. 备份还原修复的典型翻车点5 个问题按现象排查5.1 还原报错 3154 与 3633备份集和文件路径错位现象还原时报 “The backup set holds a backup of a database other than the existing TradeDB database”或者报操作系统错误 5拒绝访问。原因3154 是备份里的数据库名和你指定的目标库名不一致或者目标库已经存在来自不同数据库 GUID 的同名库3633 是 SQL Server 服务账号对目标数据目录没有写权限或者 MOVE 到的目录根本不存在。解决先跑一次 RESTORE HEADERONLY 确认备份里的 DatabaseName。想还原成别的库名用 MOVE 参数指定新的逻辑路径想覆盖现有库加 REPLACE 并确认覆盖目标无误。3633 按“文件权限修复”处理给服务账号授予目标目录的修改权限或者把 MOVE 指向一个有权限的路径改完重新执行还原。这个错和备份文件本身无关不要反复重拷文件浪费时间。5.2 数据库一直显示“正在还原”NORECOVERY 没收尾现象还原作业显示成功库名后面挂着Restoring...所有应用连接超时登录名能进但库不可用。原因脚本最后一步写的是 WITH NORECOVERY后续没有执行 RECOVERY或者备份链还没有应用完有人提前把连接指向了这个库。解决确认所有要用的日志都已经还原完毕然后执行收尾RESTORE DATABASE [TradeDB] WITH RECOVERY;注意如果后面还有待应用的日志备份不要急着 RECOVERY。一旦收尾日志链在这里截止后面的日志备份都接不上时间点还原范围会被砍掉一截。先数清楚手上有几份日志要还原再决定什么时候收尾。5.3 日志备份链断裂缺了一段日志怎么补救现象还原到某份日志时报 “The log in this backup set begins at LSN xxx, which is too recent to apply to the database”或者 STOPAT 目标时间落在缺口之后还原直接失败。原因最常见的三种——日志备份文件被手工清理掉、备份作业停过一段时间、有人把恢复模式切成 SIMPLE 做过检修又切回 FULL。每一条都会在 LSN 链上留一个洞。解决先按 2.3 的方法确认缺口位置。目标时间在缺口之前继续还原没问题目标在缺口之后只能回到缺口前最后一个可用点或者找另一台服务器上同期拷贝的日志文件补上。所以生产环境的日志备份轮转周期不能太短并且要做异机冗余。根治手段是给还原链加监控任何一份日志缺失立即告警不要等还原失败才发现。5.4 备份文件坏了才发现RESTORE VERIFYONLY 与 CHECKSUM现象平时备份作业天天绿真到还原时 RESTORE 报备份文件损坏或 CRC 校验失败。原因备份介质坏道、断电写坏、从共享目录复制时网络中断。没有经过校验的备份等于没备份——文件躺在那里但里面是什么状态没人知道。解决备份时打开 CHECKSUM每次备份完成后紧接着跑验证RESTORE VERIFYONLY FROM DISK ND:\SQLBackup\TradeDB_Full_20250101.bak WITH CHECKSUM;VERIFYONLY 会读取整个备份集并校验但不还原数据速度快可以放进备份作业的下一步。重要库还可以把备份拆到两个文件TO DISK 路径1, DISK 路径2一份介质坏了另一份还能顶上再往异机拷贝一份离线备份是另一层后悔药。5.5 生产库没备份被删了表能救和不能救的边界现象开发在测试环境习惯性 DELETE连错了生产库查作业发现该库从部署起就没有任何备份。库还活着数据文件还在但删除操作已经提交。原因根源是建库时没有配恢复模式和备份策略。这类库多半是临时部署没人审计作业清单里也没有它。解决按严重程度排列。恢复模式是 FULL 且事务日志没有被循环覆盖时先做尾部日志备份BACKUP LOG ... WITH NO_TRUNCATE再用日志解析类第三方工具把 DELETE 之前的旧版本数据捞出来但前提是日志空间没有被后续写入覆盖。恢复模式是 SIMPLE且删除操作已经过了一个检查点常规手段到此为止。如果数据文件还在、服务器没重启部分数据恢复工具还能从磁盘未覆盖区域读到旧页但那是专业数据恢复商的事不是 DBA 能承诺的。这条要写进运维规范生产库的恢复模式、全量备份、日志备份三项建库当天就配齐否则“删了表怎么恢复”只能看运气。6. 把备份还原做成交付物恢复演练脚本与自动化核对6.1 每周的还原演练真正的安全感来自“每个季度把备份真的还原一次”而不是备份作业的绿色对勾。做法把最新的全量、差异、日志拷到测试服务器按第 3 章的完整命令跑一遍还原然后跑 DBCC CHECKDB再抽样对比几张核心表的行数。演练能暴露的问题平时作业栏里全部看不到备份集缺文件、版本不兼容、MOVE 路径不对、孤立用户、日志链缺口。演练记录本身就是运维资产下次出事故时照着它还原比临时翻文档靠谱得多。6.2 用 msdb 视图做备份健康核对备份系统要可持续就把它变成可查询的东西。msdb 里的 backupset 视图记录了每一次备份的元数据按数据库和类型聚合就能知道备份策略是否在运转-- 最近 24 小时内各类备份的运行情况任一类型缺失即告警 SELECT type_desc, MAX(backup_finish_date) AS last_run, COUNT(*) AS backup_count FROM msdb.dbo.backupset WHERE database_name TradeDB AND backup_finish_date DATEADD(hour, -24, GETDATE()) GROUP BY type_desc;type_desc 里 DATABASE 是全量DATABASE DIFFERENTIAL 是差异LOG 是日志。24 小时窗口内三类都必须有记录任一缺失就说明作业停了或者恢复模式被人改过。把这个查询包进 SQL Agent 告警比翻作业历史可靠也比肉眼看目录文件名快。备份还原不存在玄学只存在没验证过的假设。我的习惯是每次数据库结构变更或服务器迁移都把“备份 → 校验 → 还原演练 → 检查孤立用户”从头跑一遍并把还原脚本、备份保留周期、演练日期写进交接文档。备份系统在真正还原成功之前都只是一堆占磁盘的文件。希望帮到你。本文还有配套的精品资源点击获取
返回列表