虚拟机用着用着,突然发现密码忘了,这事儿我碰见过不止一次。尤其是VMware Workstation现在个人免费之后,身边用虚拟机的人越来越多,问题也跟着来了:装的系统太多,密码记混;临时起的测试机密码随手一敲,放几天就没人记得;更尴尬的是帮同事处理一台虚拟机,交接文档里压根没写密码。
说实话,虚拟机密码忘记这种事,比起物理机来要友好得多。因为虚拟机的本质是一个磁盘文件加一份配置文件,你完全可以用各种方式“绕过”系统启动流程去改密码,不用拆机、不用刷BIOS,更不用担心弄坏了没地方哭。这篇文章就把虚拟机密码重置这件事讲透,覆盖Linux、Windows、以及虚拟机里装的中间件(Artifactory、Elasticsearch)密码找回,基本都是我自己实际操作验证过的路子,照着做就行。
1. 动手之前,先想明白三件事
1.1 虚拟机密码重置和物理机到底有什么不一样
很多人一听到“重置密码”就头皮发麻,觉得这是件很危险的事。实际上,虚拟机的架构决定了它的容错性远高于物理机。
物理机改密码,你只能进系统里操作,或者靠PE、LiveCD这些外部介质引导。一旦引导过程中断电、操作失误,机器可能就起不来了。而虚拟机不一样,它的“身体”就是宿主机上的一个虚拟磁盘文件(比如VMware的vmdk、VirtualBox的vdi),再加上一份记录硬件配置的vmx/vbox文件。你要改密码,本质上就是对这个磁盘文件做“离线修改”或者“引导修复”。
这意味着三件事:
- 第一,你可以随意挂载别的启动介质(ISO镜像、PE工具盘),因为虚拟光驱和虚拟USB想怎么配就怎么配。
- 第二,你可以给虚拟机拍快照,改密码之前拍一张,改坏了秒回滚,物理机可没有这个待遇。
- 第三,哪怕虚拟机彻底进不了系统,只要那个虚拟磁盘文件还在,把磁盘挂到另一个能用的虚拟机上,照样能找回密码。
所以虚拟机密码重置的第一原则是:不用慌,虚拟机一般不会被你“折腾死”,就怕你不做任何备份就直接上。我见过太多人连快照都不拍就冲进去改密码,最后把一套环境搞得乌烟瘴气,反而花了更多时间恢复。
1.2 先备份还是先折腾,我的建议是先拍快照
这是所有操作之前必须做的一步,不是可选步骤。
在VMware Workstation里,操作路径很简单:右键虚拟机 -> 快照 -> 拍摄快照。快照名称建议写清楚,比如“改密码前_20241120”。VirtualBox里就是“备份 -> 生成备份”。
有些人的顾虑是“虚拟机太大,快照拍半天”。这里给个实用建议:快照不是完整拷贝,绝大多数虚拟化软件的快照走的是“增量”机制,拍摄速度很快,占用空间也不会像复制整个vmdk那么大。哪怕这个虚拟机有20个G,拍一张快照也就十几秒到半分钟的事。
除了快照,如果条件允许,我还会顺手把虚拟机的配置文件(vmx)复制一份,再把关键数据目录备份一下。这样万一真出问题,至少能恢复到操作前的状态。至于那些连“关闭虚拟机”都懒得的急性子,我劝你还是多等那半分钟,虚拟机开着的时候动虚拟磁盘,属于给自己挖坑。
备份之后,正式开始重置密码之前还要确认一件事:当前虚拟机处于关机状态,或者至少不在处理重要任务的状态。修改密码涉及写系统关键文件,如果系统还在跑服务,强行改文件可能导致文件系统损坏,那就不是重置密码的问题了。
1.3 准备一套趁手的“工具箱”
不同系统、不同场景,需要的东西不一样,但万变不离其宗,我一般会备好这几样:
- 系统安装ISO镜像:CentOS、Ubuntu、Windows的安装盘镜像都留着。它们不仅能装系统,还能进“修复模式”“恢复环境”,是重置密码的万能钥匙。
- WinPE镜像:对Windows虚拟机来说,PE盘就是“手术台”。网上有微PE、通用PE等很多免费PE,做成ISO文件就能挂到虚拟机光驱里。
- 应急工具集:像NTPWEdit(Windows密码工具)、Passwd(Linux下的密码修改命令)、chntpw(离线改Windows注册表和SAM文件的命令行工具)这些,用的时候再下也行,但提前备好在PE镜像里更省事。
- 基本的概念储备:GRUB菜单怎么进、BIOS/UEFI启动顺序怎么调、磁盘分区怎么识别。这些概念不搞懂,手上有再好的工具也使不出来。
我这里特别提醒一句:很多PE工具盘是带图形界面的,对新手友好,但部分PE在虚拟机里可能因为驱动问题启动异常。所以我通常会准备两个PE镜像,一个图形界面版的,一个纯命令行精简版的,哪个能启动用哪个。这个细节看起来小,实际踩坑时能救你命。
2. Linux虚拟机密码重置实操
2.1 CentOS 7用rd.break重置root密码
CentOS 7是我平时用得最多的虚拟机系统,重置root密码的思路也最成熟。核心是利用GRUB引导菜单的编辑功能,让系统在进入正式环境之前进入一个临时shell,然后修改密码。步骤如下:
- 开机后,在GRUB菜单界面按e键进入编辑模式。VMware里要注意,客户机屏幕弹出后要立刻点击进去,不然键盘焦点可能还在宿主机上,按键没用。
- 找到以
linux16(或linux)开头的那一行,通常在尾部有quiet字样,在行尾追加一个参数rd.break。 - 按Ctrl+X或者F10启动,系统会进入一个initramfs里的紧急shell,界面显示类似
switch_root:/#的提示符。 - 此时根文件系统还是只读挂载的,需要先重新挂载为可写,执行:
mount -o remount,rw /sysroot - 切换进真正的系统根目录:
chroot /sysroot - 用passwd修改root密码:
按提示输入两遍新密码。密码强度要够,不然有的系统策略会拒绝。passwd root - 如果系统开启了SELinux,需要执行:
这一步的作用是让系统重启时重新标记文件的安全上下文,否则SELinux标签错乱可能导致你改完密码后反而登不进去或者登录异常缓慢。touch /.autorelabel - 连续输入
exit退出chroot和shell,或者直接输入reboot重启。重启后你就能用新密码登录root了。
为什么这里推荐rd.break而不是老的single参数?因为CentOS 7执行到single时可能受SELinux或者其他服务影响,比较“脆”;而rd.break在initramfs阶段就停下来了,还没加载真正的系统服务,操作面更单纯,成功率更高。两者都会用,能在不同系统版本间游刃有余。
2.2 备选方案:单用户模式与init参数修改
如果用的是CentOS 6、老版本Ubuntu或者某些精简Linux发行版,rd.break未必适用。这时候可以用传统的单用户模式。
同样的,开机进GRUB编辑界面,找到linux16所在行,这次把行尾的ro改成rw,并追加一个参数single(有的系统是数字1或init=/bin/bash)。启动后系统会直接进入单用户root shell,然后直接passwd root就能改密码。
这条路子最关键的一点是:一定要把ro改成rw。我见过很多新手忽略了这一步,进去之后执行passwd报“无法打开影子文件”之类的错误,因为根分区是只读的。其实就算忘了改,也可以先进shell再用mount -o remount,rw /补救,但多一步操作总归多一处风险,不如在GRUB里一次性改对。
另外,用init=/bin/bash启动的系统,很多时候PATH环境变量不全,你执行passwd可能会提示找不到命令。这时候直接用绝对路径:
/usr/bin/passwd或者先export PATH=/sbin:/usr/sbin:/bin:/usr/bin再操作。这种小细节,遇到的时候真的能卡你十分钟。
2.3 Ubuntu虚拟机怎么重置密码
Ubuntu和CentOS不太一样,因为很多Ubuntu虚拟机默认没有主动开启root登录,你日常用的可能是一个普通sudo用户。重置密码同样有两条路。
第一条路,走系统自带的恢复模式。开机在GRUB菜单时按住Shift键(Ubuntu的GRUB菜单默认是隐藏的,不按Shift可能根本看不到),然后选择Advanced options for Ubuntu,再选Recovery mode,进入后会有一个菜单,选择root - Drop to root shell prompt。接下来就是熟悉的mount -o remount,rw /和passwd 用户名。如果忘记的是普通用户密码,直接用passwd 你的用户名即可;如果想顺带把root密码也设置一下,执行passwd root。
第二条路,用Ubuntu安装ISO进Live环境。把Ubuntu安装镜像挂到虚拟光驱,开机从光驱引导,选择“试用Ubuntu(Try Ubuntu)”,进入桌面后用lsblk或fdisk -l查看磁盘分区,找到根分区(通常是sda1、sda2之类),然后:
sudo mount /dev/sda1 /mnt sudo chroot /mnt passwd 用户名Live环境的好处是图形化界面直观,对新手很友好。缺点是得想办法把英文的图形界面玩明白,但也就那几步,问题不大。
这里补充一个特殊情况:如果你改的是普通用户的密码,而这个用户有sudo权限,那完全可以借道其他用户来重置。比如你记得root密码但忘了普通用户密码,登录root后一条sudo passwd 用户名就搞定了。很多人不知道这个,绕了一大圈去进恢复模式,其实没必要。
2.4 UOS和银河麒麟虚拟机的重置方法
热词里有人问UOS重置密码、银河麒麟虚拟机管理系统,这两个属于国产Linux发行版,在虚拟机里用的人也在变多。它们基本都是基于Debian或CentOS体系做的二次开发,重置密码的思路和Ubuntu/CentOS大同小异,但多了个官方工具。
UOS(统信桌面操作系统)在开机GRUB菜单里选Advanced options for UOS进入恢复模式,选择root shell,同样passwd改密码。新版UOS还有个更省事的办法:在登录界面连续按几次Ctrl+Alt+F2(或F3-F6)切到tty终端,如果系统没锁root就直接登录改;如果root也没有密码,还是得走GRUB这条路。
银河麒麟(Kylin)虚拟机的系统管理工具做得更全,有的版本自带“重置密码”功能入口,可以在系统安装介质里找到,比如“系统修复” -> “重置用户密码”。这个功能是图形界面引导的,跟着提示走就行,比命令行友好太多。不过它也不是万能的,如果虚拟机系统损坏严重,还是得靠Live CD挂载修改。
这类系统的坑主要在以下几个方面:一是root密码和普通用户密码要分清,有时候你只想改普通用户的密码,却因为习惯性输入passwd root,结果报“用户不存在”之类的错;二是这些系统的SELinux或者AppArmor策略可能更严,改完密码如果登录异常,先别急着怀疑是密码错了,看看安全策略日志。
3. Windows虚拟机密码重置实操
3.1 准备WinPE启动镜像并挂载到虚拟机
Windows虚拟机密码忘了,思路比Linux还简单粗暴:用PE盘启动,直接改系统里的SAM数据库。SAM文件就是Windows存储密码哈希的数据库,PE里的小工具能直接编辑它。
首先,准备一个WinPE镜像。微软官方有Windows PE工具包,但对普通用户来说,微PE、优启通这些第三方PE更友好,图形界面中文,自带密码工具。下载PE后,利用它的“生成ISO”功能做一个可启动的ISO文件。这一步非常关键,因为虚拟机光驱直接挂ISO最方便,没必要U盘启动折腾来折腾去。
在VMware里,双击“CD/DVD”设备,选择“使用ISO映像文件”,浏览选中刚做好的PE ISO,然后重点来了:开机后立刻按F2进BIOS设置,或者按F12弹出启动菜单,把光驱/ISO启动调到第一位。有的虚拟机默认引导顺序里光驱在硬盘后面,你不调顺序,开机还是会直接进Windows,然后提示密码错误,白忙活。
如果你手里的PE不是ISO,而是U盘,也可以把U盘制作成镜像再挂载,或者直接用DiskGenius把U盘转换成vmdk虚拟磁盘挂到虚拟机上。我一般不推荐这条路,因为要多一步转换,而且U盘里往往有大量临时文件,镜像会很大。除非你只有一个U盘PE且宿主机没法直接读它,否则还是老老实实做ISO吧。
3.2 用PE里的密码工具重置Windows密码
PE启动成功后会进入一个精简版Windows桌面。找到密码工具,最常见的是NTPWEdit、PCUnlocker,或者“密码恢复”类工具。以NTPWEdit为例,操作流程如下:
- 打开NTPWEdit,它会自动读取到Windows系统目录下的SAM文件。如果识别不对,手动指定到
X:\Windows\System32\config\SAM(X是PE里的系统盘盘符,需要根据实际情况改)。 - 点击“打开”,软件会列出系统里的所有本地用户账号。
- 选中要重置密码的用户(比如Administrator),在“新密码”输入框里填入新密码,也可以留空表示清空密码。
- 点击“写入”或“应用”,保存修改。
- 关闭工具,从PE里正常关机(别直接拔电源,别直接关闭虚拟机电源),然后在VMware里把光驱重新改为“使用物理驱动器”或移除ISO,开机进系统,用新密码登录。
这里有几点经验:
- NTPWEdit这类工具改的是本地账号密码。如果是微软账号登录的Windows(比如Microsoft Account),这个方法不一定有效,因为微软账号的密码验证在云端。好消息是,虚拟机里大多数人用的是本地账号,没绑Microsoft Account。
- 改密码后,Windows可能会提示“你已使用临时配置文件登录”之类的,这是因为本地安全策略的某些缓存状态变了,一般重启一两次就能正常,不用紧张。
- 如果密码工具提示“无法写入SAM文件”,大概率是PE里对系统盘没有写权限,换个PE镜像(比如64位Windows PE)或者用“以管理员身份运行”再试。
3.3 不借助第三方工具的两个“笨办法”
如果不想下载PE,或者虚拟机里的Windows因为某些原因就是没法从PE启动,还有两个利用系统自带功能的路子,原理很巧妙。
第一个办法,替换粘滞键程序。Windows的粘滞键程序是sethc.exe,当你按5次Shift时会弹出来。我们把这个程序替换成cmd.exe,然后在登录界面按5次Shift,就等于在系统权限下打开了命令行。步骤如下:
- 用系统安装ISO启动虚拟机,在安装界面按Shift+F10打开命令提示符。
- 这个命令提示符所在的环境是安装环境,但能够访问硬盘。先查看磁盘盘符,通常系统盘是C::
dir C:\Windows\System32\sethc.exe - 备份并替换:
copy C:\Windows\System32\sethc.exe C:\Windows\System32\sethc.exe.bak copy C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe - 关机重启,拔掉安装ISO,正常进Windows。在登录界面按5次Shift,弹出的是命令行窗口,在里面用
net user命令修改或清空密码:net user net user Administrator 新密码 - 改完后建议恢复sethc.exe,把备份文件拷回去,免得留下安全后门。虽然虚拟机里无所谓,但习惯要养好。
第二个办法,替换轻松使用工具(utilman.exe)。逻辑跟上面一模一样,只是把目标从sethc.exe换成了utilman.exe,操作入口是登录界面右下角的“轻松使用”按钮。这个办法的好处是不会误触5次Shift,缺点是多一步点击。
这两个办法的本质是“利用Windows安装环境访问系统文件,篡改可交互的可执行文件来获得高权限命令行”。听起来很“黑客”,但在自己的虚拟机上救急是没问题的。要注意的是,如果系统盘开启了BitLocker加密,这些方法都会失效,需要BitLocker恢复密钥才能访问文件。
4. 虚拟机里中间件密码重置补充
4.1 Artifactory忘了admin密码怎么救
热词里有“artifactory重置密码”,这是JFrog出的制品仓库管理工具,很多团队会在虚拟机里装一个给开发用。admin密码忘了,其实不需要重装系统,Artifactory里的admin密码存储位置是可以直接处理的。
Artifactory的配置文件通常是$ARTIFACTORY_HOME/etc/security.access.access或者etc/security/security.xml。早期版本(6.x及以前)的admin密码在security.xml里有相关字段,新版Artifactory(7.x及以上)改成了基于内部数据库存储。实操中最通用的办法是:
- 停止Artifactory服务。
- 进入
$ARTIFACTORY_HOME/etc/security/目录,找到access相关的文件夹或文件。 - 对于6.x版本,可以直接编辑
security.xml,找到admin用户对应的password字段,删掉或者改成空,保存后重启Artifactory,它会提示你重新设置admin密码。 - 对于7.x版本,更推荐用官方提供的密码恢复脚本,位于
$ARTIFACTORY_HOME/app/bin/下,具体名称可能随版本略有不同,但一般都有类似recoverPassword或者“password reset”功能的脚本,执行后会生成一个临时链接,通过链接重设密码。 - 如果这些都不行,终极手段是直接操作Artifactory内置的Derby数据库(如果是内嵌Derby),找到
users表,把admin的密码字段置空。这个操作比较硬核,建议在官方文档指导下进行,而且要提前备份整个$ARTIFACTORY_HOME目录。
Artifactory这块我实际踩过的坑是:很多教程让你直接删除security.xml里的密码字段,但新版Artifactory重启后如果发现配置文件不完整,可能直接把服务干挂。所以我每次都坚持先备份配置文件再动手,这位移成本极低但收益极高。
4.2 Elasticsearch 7.4.2内置用户密码重置
热词里有“es7.4.2密码忘记怎么重置密码”,正好ES 7.4.2是我很熟的一个版本。这个版本如果开启了x-pack安全认证,内置的elastic用户密码忘了,会导致Kibana登录不进去、API调用全部401。
ES 7.4.2不像新版本那样有elasticsearch-reset-password这么便捷的命令,但有个经典的改法:
- 找到ES安装目录下的
config/elasticsearch.yml,先看安全配置:xpack.security.enabled: true - 最稳妥的方式是停掉所有ES节点,把
xpack.security.enabled临时改成false,然后启动集群。 - 启动后,使用
elasticsearch-users命令来管理用户。比如重置elastic用户的密码:
这个命令会直接修改内部安全索引里的用户密码哈希。bin/elasticsearch-users userpasswd elastic -p 新密码 - 改完后,把
elasticsearch.yml里xpack.security.enabled重新改回true,重启所有节点。
为什么强调要临时关闭安全认证?因为ES在安全认证开启的情况下,重置密码的API也需要有效凭据才能调,而你就是因为密码丢了才来的,这个死循环只能通过临时关闭认证来打破。关闭认证期间ES是不设防的,所以这个操作一定要快,而且不要在生产环境的公网上搞。
另外,ES7.4.2有个坑:如果你直接手动改内部安全索引里的哈希值,格式很容易搞错。用官方elasticsearch-users命令就不会有这个问题,它知道正确的哈希算法和存储位置。除非你确认自己熟悉它的内部结构,否则别碰“直接改索引”这条路。
4.3 虚拟机里各层密码遗忘的排查思路
上面聊的是两个典型中间件。实际上虚拟机里最常见的密码场景分三类,我在这里顺手理一下:
第一类是系统层密码。Linux的root/普通用户、Windows的管理员,用前半篇讲的方法就能搞定。
第二类是数据库密码。比如虚拟机里装了MySQL、PostgreSQL,密码忘了。MySQL可以改配置文件跳过授权表验证(skip-grant-tables),然后再执行update user set authentication_string=password('新密码')之类的命令。PostgreSQL则是编辑pg_hba.conf临时改成trust认证,重启后alter user改密码。数据库密码重置的核心思路也都是“临时绕过认证”,跟我上面讲ES的思路一模一样。
第三类是应用层密码。像GitLab的root密码、Jenkins的admin密码、Jira的admin密码,每个软件都有自己的恢复机制。GitLab有Rails控制台可以直接改,Jenkins可以直接改config.xml文件里的密码哈希,Jira需要操作内部数据库。这些不在本文展开,但思路是相通的:先备份,再找到密码存储的位置,用该应用官方的恢复手段绕过去。
5. 常见问题与避坑经验
5.1 进不了GRUB菜单怎么办
好多人卡在第一步:开机根本见不到GRUB菜单,直接进系统了,按e也没反应。
原因通常有两个。第一个是GRUB菜单被隐藏了,Ubuntu尤其常见。解决办法:开机后立刻长按Shift(BIOS引导)或快速连按Esc(UEFI引导),多按几次总没错。第二个原因是VMware客户机没有获得键盘焦点,你按键都落在宿主机上了。解决方案是在虚拟机窗口出现的第一时间点击窗口内部,然后再按热键。
还有一个更隐蔽的原因:虚拟机的引导模式和你进的GRUB版本不匹配。比如系统是用UEFI装的,但你在VMware里把引导设置成了BIOS(或者相反),GRUB根本不会正常加载。这时候要先进BIOS确认启动模式是对的。
如果实在进不了GRUB,那就不进GRUB了,直接用LiveCD/安装ISO挂载磁盘修改。把安装镜像挂到光驱,从光驱启动进rescue模式或Live系统,然后chroot进去改密码。这条路肯定能走通,只是多花点时间。
5.2 密码改完虚拟机无法正常启动怎么办
这是最让人头大的情况。我把它拆成几个常见原因和对应的排查方法:
- SELinux标签问题:现象是登录界面无限转圈,或者登录后系统异常卡顿。解决方法是回到GRUB的
rd.break环境,执行touch /.autorelabel,再重启。这个我在前面已经提过,但忍不住再强调一次,因为我第一次亲手踩坑时,就是因为忘了这步,密码改了但系统也“半残”了。 - 根文件系统只读:现象是改密码时报“无法打开影子文件”。解决办法是检查是否执行了
mount -o remount,rw /或mount -o remount,rw /sysroot。很多人在chroot进去之后忘了这一步,折腾半天。 - /etc/shadow文件被锁定:有些系统安全加固过,给shadow文件加了不可变属性。用
lsattr /etc/shadow查看,如果有i标志,用chattr -i /etc/shadow解除后再改密码,改完建议恢复锁定。 - Windows系统损坏:用PE工具改完密码后Windows蓝屏或无法启动,多半是PE版本和系统版本架构不匹配(比如64位PE去改32位系统导致的注册表操作问题),或者PE里的某个工具动了不该动的东西。遇到这种就回滚快照,换个更主流的PE重新来。
5.3 快照之外,建议你长期养成的两个习惯
第一个习惯:设置好密码之后,立刻给虚拟机拍一张名为“已配置密码_初始状态”的快照。这样将来再出问题,你有一个干净的出发点,而不是只能往回找N天的旧快照。我自己的虚拟机通常保留三个快照:干净的初始状态、改密码后、系统升级前。每次出问题都能快速定位该回滚到哪。
第二个习惯:把虚拟机的账号信息记录到密码管理器里。不是让你明文写在桌面的记事本里,而是用KeePass、Bitwarden这类工具统一管理。每条记录写清楚:虚拟机名称、系统版本、IP地址、用户名、密码、用途。没有这个习惯的人,三天两头就会陷入“这台机器密码是多少来着”的焦虑中。
5.4 给新手的几句实在话
重置密码这事儿,说难不难,说简单也不简单,关键看你手上有多少“备选方案”。我的建议是,新手先从简单路径练手:Linux用GRUBrd.break,Windows用PE工具,每个路径只练两遍,第一遍跟着教程走,第二遍尝试在出错时自己排查问题。
另外要强调,改了密码后,如果用SSH连接虚拟机,带宽和防火墙也要确认没问题。有次我改了CentOS的root密码,本以为万事大吉,结果宿主机连不上虚拟机,查了半天发现是虚拟机的IP变了(因为我之前在GRUB里动过引导参数),跟密码压根没关系。所以密码改完后,先确认虚拟机IP和网络状态,再谈其他。
最后说一个很小但很容易被忽略的细节:在VMware里,从GRUB编辑启动后,虚拟机的时间可能异常(因为跳过了一些初始化),这会影响按时间戳记日志的应用。改完密码后最好在系统里重新同步一下时间,timedatectl set-ntp true一条命令的事,别让这个细节坑了后面的排查工作。
结尾
说句掏心窝子的话,我在实际工作中重置过太多次虚拟机密码了,从CentOS到Windows再到奇奇怪怪的中间件,每次都提醒自己同一个原则:没有快照不折腾,没有备份不装高手。现在凡是拿到一台新虚拟机,我的第一件事不是急着配环境,而是先拍一张初始快照、记录好账号密码、确认SELinux和防火墙状态,这三件事做完,后面怎么折腾都不怕。
再分享一个实用的小技巧:如果虚拟机密码真的频繁忘,可以给root账号配置SSH免密登录(仅限于你的个人测试虚拟机),等于给自己留了一把“备用钥匙”。这把钥匙藏好了,下次再遇到密码丢失,直接SSH进去一条命令重置,比前端交互绕来绕去快得多。
希望这篇偏实战的文章能帮你把“虚拟机密码重置”这个问题一次性解决。操作时保持耐心,遇到问题就回头看快照,虚拟机这东西的好处就在这:容错率极高,只要你没删文件,就总有办法救回来。