虚拟机里删除/data和/system会怎样?破坏性实验与恢复指南
2026/9/9 20:22:57 网站建设 项目流程

如果你一直好奇:虚拟机里的/data/system到底能不能删?删掉之后系统会变成什么样?会不会把宿主机也一起搞崩?这次我们直接在一台测试虚拟机里做这个破坏性实验。

先说结论:能删,但删完系统基本没法正常用/data删掉后,应用和设置全部清空,系统勉强能走到开机向导附近,随后就是各种崩溃和无限重启;/system删掉后更直接,系统框框架文件都没了,引导阶段就可能卡死、黑屏或者循环重启。不过虚拟机和宿主机是隔离的,所以这套实验不会伤到你的物理电脑;真正救命的是实验前打好的快照,一秒钟就能回到删除前。

这篇文章会带你完成一次完整的“破坏性实验”:从环境准备、打快照、删除/data、观察现象、恢复快照,再到删除/system、观察现象、恢复系统。每一步都有命令和预期结果,最后还会整理恢复方案和常见坑位。

1. 核心结论速览

项目说明
实验对象虚拟机内部的/data/system目录
适用环境VMware、VirtualBox、PVE 中的 Android 虚拟机,Android 模拟器 AVD,Linux 虚拟机
/data作用存放应用、账号、设置、数据库、媒体文件,是“用户数据分区”
/system作用存放系统应用、框架、动态库、开机脚本,属于“系统程序分区”
删除/data结果应用数据全部清空,系统设置丢失,大概率进入向导崩溃、无限重启或无法正常使用
删除/system结果系统框架文件缺失,引导卡 logo、黑屏或重启,基本等于系统损坏
对宿主机影响无直接影响,VM 磁盘对宿主机只是文件
最安全恢复方式实验前创建快照,删除后一键恢复
物理设备风险极高,真机这么操作很可能变砖,不建议

这个实验适合三类人:想搞懂 Android 分区结构的开发者、做虚拟化和系统测试的运维工程师、以及纯粹想验证“脚本 rm -rf 到底会删坏什么”的技术爱好者。

2. 为什么敢在虚拟机里做这个实验

很多人看到rm -rf就害怕,这是对的。但虚拟机给了我们一个低成本的“后悔药”机制。

虚拟机里的“硬盘”并不是一块真实的物理盘,而是宿主机上的一个镜像文件,例如 VMware 的.vmdk、VirtualBox 的.vdi、QEMU/KVM 的.qcow2。你在虚拟机里删除/data/system,实际修改的是镜像文件内部的数据块,不会直接操作宿主机的物理磁盘扇区。因此,只要你在删除前创建了快照,删除后系统再怎么崩溃,都可以通过快照把虚拟机磁盘状态恢复到删除前。

不过要注意,虚拟机隔离不等于“完全没有风险”。如果删除操作正好在快照创建之后、打掉旧快照之前触发了大量写盘,宿主机磁盘空间可能被快照文件占满;如果删除的目录本身是虚拟磁盘镜像的挂载点,也可能影响 VM 正常读写。更极端的情况是,你在宿主机上误删了.vmdk文件,那虚拟机同样会损坏。所以实验中最重要的纪律是:先打快照,再做破坏操作

如果你在企业里维护 PVE 或者 VMware ESXi,这个实验还能帮你理解“分区数据丢失”和“VM 无法启动”之间的关系,方便以后排查真实故障。

3. data 和 system 到底是什么

要理解删除后的现象,得先搞清楚这两个目录在系统里的位置。

3.1 Android 虚拟机视角

在 Android 系统中,/data/system是有明确分区定位的挂载点。

/system是系统分区,通常是只读挂载的 ext4 镜像,存放系统应用、系统框架文件、动态库、开机需要的基础命令。内容包括:

  • /system/app:系统内置应用
  • /system/framework:Android 框架的 jar 包和 odex 文件
  • /system/lib/system/lib64:系统动态库
  • /system/bin:shell 命令和二进制工具
  • /system/build.prop:系统版本属性

如果你删掉了/system,相当于把操作系统本身的“程序文件”全部删除。系统在下次开机时,找不到zygote、找不到system_server、找不到启动动画,自然无法进入桌面。

/data是用户数据分区,存的是每次开机后动态生成的数据:

  • /data/app:用户安装的应用
  • /data/data:应用私有数据
  • /data/system:系统设置数据库、锁屏信息、用户列表
  • /data/media:媒体文件
  • /data/dalvik-cache:应用运行前的缓存编译产物

如果你删掉了/data,应用和用户设置全部消失。系统框架虽然还在,但SettingsProviderPackageManagerService等关键服务读取不到数据库和包信息,就会出现空指针、崩溃循环、设置向导无法完成。

3.2 注意“删 data”和“格式化 data”的区别

热词里有一条是“格式化data相当于几清”,这里需要展开。

  • rm -rf /data/*只删除目录下的文件和子目录,不改变文件系统元数据和分区表。系统分区还是原来的 ext4/f2fs,加密标记可能还在。
  • 格式化 /data是重建文件系统,通常用于恢复出厂设置或刷机前清空用户数据。在 TWRP 等 Recovery 环境里,“Format Data”会连加密标记一起清掉,所以经常说“格式化 data 相当于一次彻底清除”。

如果你的目标是“看看系统能不能启动”,删除目录就够;如果你的目标是“模拟恢复出厂设置后的首次开机”,可以尝试格式化 data 分区。但无论哪种,都属于破坏性操作,必须在快照保护下进行。

3.3 Linux 虚拟机的对应概念

如果标题里的datasystem指的不是 Android,而是 Linux 虚拟机,那情况稍微不同。Linux 根目录下本身没有标准/system,但/usr/lib/bin/etc承担类似角色。很多发行版的数据目录习惯挂在/home/var

在 Linux 虚拟机里执行rm -rf /usrrm -rf /home,效果和 Android 里删除/system/data类似:前者删掉运行工具和库,系统起不来;后者删掉用户数据,系统还能到登录界面,但所有用户文件都没了。

这篇博客主要以 Android 虚拟机为实验对象,Linux 的对应实验思路可以触类旁通。

4. 实验环境准备

做这个实验不需要高配置,普通办公电脑就能跑。关键在于虚拟机软件和系统镜像的选择。

4.1 软硬件建议

项目建议
宿主机Windows 10/11、Linux 或 macOS,内存不低于 8GB
虚拟机软件VMware Workstation、VirtualBox、PVE 任一即可
测试系统Android x86 9/11 ISO,或 Android 模拟器 AVD
虚拟硬件2 核 CPU、4GB 内存、20GB 虚拟磁盘
网络NAT 即可

如果你用 VMware,可以创建一台全新虚拟机,加载 Android x86 的 ISO 安装镜像,跟着安装向导完成安装。如果你不想安装整个系统,也可以直接用 Android Studio 自带的 Android Emulator,创建 AVD 后启动,自带adb root,做实验更省事。

4.2 务必先创建快照

实验开始前,先把虚拟机恢复到桌面可用状态,然后创建快照。快照是一个磁盘状态副本,恢复后虚拟机就和快照创建时一模一样。

VMware Workstation 创建快照:

虚拟机 -> 快照 -> 拍摄快照 快照名称建议:before_data_delete

VirtualBox 创建快照:

控制 -> 生成备份 备份名称建议:before_data_delete

如果是 Android 模拟器,虽然没有传统快照按钮,但 AVD 本身支持数据分离。只要你不手动-wipe-data,重置 AVD 也可以恢复初始状态。不过这里还是建议用 VMware 或 VirtualBox 做完整快照,效果最直观。

5. 删除 /data 的完整实验

实验流程分五步:启动虚拟机、进入 root shell、查看挂载、删除、重启观察。

5.1 启动虚拟机并进入 shell

启动 Android 虚拟机后,打开终端,使用adb连接。

如果使用 Android 模拟器:

adb shell su

如果使用 Android x86 的 VMware 虚拟机,可能需要先打开调试模式或者在终端里执行su。只要能进入 root shell,后面的操作逻辑一致。

5.2 查看 data 挂载情况

删除之前先确认/data确实是独立分区:

mount | grep -E " /data | /system "

正常情况下会看到类似输出,不同镜像可能略有差异:

/dev/block/vdc /data ext4 rw,seclabel,relatime ... /dev/block/vda /system ext4 ro,seclabel,relatime ...

同时查看两个分区当前占用:

df -h /data /system

这一步的目的是让你清楚知道操作对象的状态。如果/data/system都没有显示,说明系统挂载异常,不要继续实验。

5.3 先做最小破坏测试

不建议直接一把梭删掉整个/data。先删一个关键应用数据,观察系统反应。

rm -rf /data/data/com.android.settings sync adb reboot

重启后,系统设置可能打不开,或者设置页面不断崩溃。这就已经能看出/data对系统关键服务的重要性。

5.4 完整删除 /data

恢复快照后,重新进入 root shell,执行:

rm -rf /data/* rm -rf /data/.* 2>/dev/null sync adb reboot

注意,第二条命令会尝试删除/data下的隐藏目录。由于部分运行中的文件可能还在被进程占用,删除时可能出现Text file busy的提示,这是正常现象。重启后,内存中的进程退场,系统再要读取/data下的文件,会发现文件已经不存在了。

5.5 预期结果

完整删除/data后,不同 Android 版本的故障表现略有不同,但通常能看到以下几种:

  • 开机动画正常播放,但进入桌面时卡死或闪回动画。
  • 进入 SetupWizard 设置向导,但无法保存向导数据,循环重启。
  • 桌面启动器崩溃,提示“System UI 已停止运行”。
  • 大量系统应用显示“应用未安装”,点击后无反应。

根本原因很好解释:PackageManagerService在开机时扫描/data下的包信息,发现空目录后只能返回空列表;SettingsProvider读取数据库失败,其他服务一启动就空指针。系统框架本身没有坏,但“用户态数据”已经等于零,所以系统无法完成正常工作。

5.6 恢复快照

观察够了之后,恢复快照:

虚拟机 -> 快照 -> 恢复到 before_data_delete

恢复完成后,重新启动虚拟机,确认桌面正常。这一步非常重要,相当于把实验环境重置到干净的起点,方便接下来对/system做破坏实验。

6. 删除 /system 的完整实验

删除/system是更重的破坏。开始前同样要恢复到干净快照。

6.1 重新挂载 system 为可写

/system默认只读,删除前需要重新挂载为读写。

Android 模拟器中可以使用:

adb root adb remount

如果提示 remount 失败,可能是 dm-verity 校验导致。测试环境中可以关闭:

adb disable-verity adb reboot adb root adb remount

注意,disable-verity只在测试虚拟机中操作,不要在需要完整安全校验的设备上随意关闭。这一步的目的是把只读分区改成可写,模拟“拥有 root 权限后删除系统分区”的场景。

6.2 完整删除 /system

进入 root shell:

mount -o rw,remount /system rm -rf /system/* rm -rf /system/.* 2>/dev/null sync adb reboot

执行后,系统会尝试重启,但这已经从“数据损坏”升级成了“系统程序文件缺失”。

6.3 预期结果

删除/system后的表现通常比删除/data更严重:

  • 开机停在品牌 LOGO 或虚拟机的 BIOS 启动界面。
  • Android 引导动画始终无法加载,屏幕黑屏。
  • 反复自动重启,无法进入 Recovery 或桌面。
  • 通过串口或 adb 查看日志,能看到init找不到/system/bin下的关键进程,zygote起不来。

原因是/system里放着系统启动和运行所需的最基本文件。init进程需要启动zygote,而zygote会从/system/framework加载核心库。核心库和可执行文件都不存在了,后续所有环节都会连锁失败。

这跟删除/data的本质区别是:删/data只是“没有用户数据”,框架进程还活着;删/system是“没有程序文件”,连框架都拉不起来。

6.4 如果连引导都没了

在某些 Android x86 虚拟机里,/system不只是一个分区,还可能承载了 GRUB 引导时依赖的内核和 ramdisk。如果删除范围覆盖了这部分文件,虚拟机可能在引导加载器阶段就失败,连 Linux 内核都不会启动。这时候你只能恢复快照,或者重新挂载系统镜像。

6.5 恢复快照

同样恢复快照:

虚拟机 -> 快照 -> 恢复到 before_system_delete

如果之前只建了一个快照,恢复到实验开始时的状态即可。

7. 恢复方法盘点

快照是最快的恢复方案,但它不是唯一方案。实际工作中,你可能遇到没有快照、快照被删、或者虚拟磁盘损坏的情况。下面按优先级整理恢复手段。

7.1 方法一:虚拟化软件快照恢复

适用 VMware、VirtualBox、PVE。

VMware: 虚拟机 -> 快照 -> 快照管理器 -> 转到 VirtualBox: 控制 -> 恢复备份 PVE: 执行 qm rollback <vmid> <snapname>

快照恢复会把整个虚拟磁盘恢复到快照创建时刻的状态,掉落的文件和数据都能找回来,前提是快照还存在于宿主机上。

7.2 方法二:Android 模拟器重置

如果你用的是 Android Studio 的 AVD,删除/data后可以用-wipe-data重置用户数据分区:

emulator -avd 你的AVD名称 -wipe-data

但这个方法只对/data生效,不能修复/system的损坏。如果/system也被删了,最可靠的方式是删除 AVD,重新创建一个全新的虚拟设备。

avdmanager delete avd -n 你的AVD名称 avdmanager create avd -n test_avd -k "system-images;android-33;google_apis;x86_64"

7.3 方法三:fastboot 重新刷入系统镜像

适用 Android 测试机或特殊的 Android 虚拟机环境。如果你有system.imguserdata.img

fastboot flash system system.img fastboot flash userdata userdata.img fastboot reboot

刷入操作会覆盖对应的分区,相当于把系统程序和数据分区恢复到镜像出厂状态。注意,这个操作会清空设备数据,必须在测试环境和授权范围内进行。

7.4 方法四:Linux 虚拟机进入修复模式

如果实验对象是 Linux 虚拟机,删除/usr/home后:

  1. 在 VMware/VirtualBox 挂载一个 LiveCD ISO。
  2. 从 ISO 启动,进入“试用”模式。
  3. 挂载虚拟机的根分区,恢复核心包。
  4. 或者直接重新安装系统,保留/home数据。
mkdir -p /mnt/root mount /dev/vda1 /mnt/root mount --bind /dev /mnt/root/dev mount --bind /proc /mnt/root/proc mount --bind /sys /mnt/root/sys chroot /mnt/root

进入 chroot 环境后,可以用包管理器重新安装系统工具。但这个操作有较大风险,最好还是靠快照或备份。

7.5 方法五:PVE 备份恢复

PVE 环境中有定期备份机制,备份文件通常是.vma.tar。如果虚拟机损坏,可以:

pve 管理界面 -> 选择虚拟机 -> 备份 -> 恢复

没有备份时,可以考虑只恢复磁盘文件到新虚拟机,但成功率取决于损坏程度。备份才是最后的底线,快照和备份都别省。

8. 删除 data/system 常见问题排查

问题现象可能原因排查方式解决方案
开机一直停在品牌 LOGO/system关键文件缺失或内核引导文件损坏查看虚拟机开机日志、串口输出恢复快照,或重新刷入系统镜像
系统无限重启/data下设置数据库缺失导致系统服务崩溃尝试adb logcat查看崩溃堆栈恢复快照,或adb shell am force-stop无效后重刷
SetupWizard 无法完成/data清空后首次启动无法写入向导数据观察日志中 SettingsProvider 异常恢复快照,或执行-wipe-data后再走一遍向导
大量应用提示“未安装”/data/app/data/data被清空检查/data/app目录恢复快照或重新安装所有应用
Android 模拟器提示 System UI 崩溃/system下的框架 APK 被删adb shell dumpsys查看 SystemUI 状态恢复快照,或重新创建 AVD
VMware Workstation 提示无法连接虚拟机快照恢复后 vmx 路径异常、vmware-vmx.exe 进程残留检查 vmx 文件路径、任务管理器结束 vmware-vmx.exe以管理员身份运行 VMware,重新打开虚拟机
删除快照后宿主机磁盘空间满快照文件占用了宿主磁盘检查.vmdk和虚拟机快照文件大小清理旧快照,迁移虚拟磁盘到其他分区
adb remount 失败/system被 dm-verity 保护执行adb disable-verity后重启测试环境中关闭校验后重试
执行 rm 后提示 Text file busy被运行中进程占用的文件无法删除忽略该提示,重启后再观察只要目录内容被清空,系统已经无法正常使用
虚拟磁盘文件损坏无法启动删除命令影响到虚拟机镜像文件本身检查 vmdk/qcow2 文件完整性从备份中恢复磁盘文件

这些排查思路不仅适用于本次实验,也适用于平时虚拟机系统崩溃、启动卡死、数据丢失的真实故障恢复。

9. 最佳实践与安全边界

实验做完了,有几个实践原则值得沉淀。

第一,所有破坏性操作都先打快照或备份。删除目录不是难题,难题是如何在删错之后把数据拿回来。快照和备份是唯一可靠的后悔药。

第二,建立专用测试环境。不要拿主力开发虚拟机或存放重要数据的虚拟机做这种实验。单独创建一台 2 核 4GB 的测试 VM,用完后直接销毁。

第三,使用最小权限和明确路径。如果没有必要,不要用rm -rf /data/*这种通配方式,而是先删除单个子目录验证效果。命令里的路径一定要看清楚,rm -rf / datarm -rf /data天差地别。

第四,禁止在生产环境执行类似命令。云服务器、公司生产虚拟机、正在提供服务的系统,任何一条rm -rf /systemrm -rf /usr都可能造成不可恢复故障。如果企业环境确实需要验证,也要先申请变更窗口,确认备份完整。

第五,涉及真实设备和数据时必须合法合规。如果要对真机做类似测试,必须获得设备所有人的明确授权;涉及隐私数据的部分,要先脱敏、备份、确保不泄露。实验结束后及时清理测试数据。

第六,不要把实验结论代入生产。虚拟机里的 Android 删了/data可以一键恢复,不代表真实手机上也能这么容易恢复。真实设备的分区布局、bootloader、加密方式各不相同,恢复难度远高于虚拟机。

10. 总结与下一步

这次实验把两个关键问题验证得很清楚:

  • 删除/data,本质上是“清空用户数据”。系统框架还在,但所有应用、设置、账号信息全部丢失,通常表现为向导崩溃、桌面反复重启或应用无法识别。
  • 删除/system,本质上是“删除系统程序文件”。系统框架缺失,引导阶段就可能卡 LOGO、黑屏或无限重启,比删除/data严重得多。
  • 虚拟机的价值体现在隔离性和可恢复性:宿主机不受影响,快照能让你一秒钟回到实验前。
  • 格式化/data和删除/data还不一样,前者重建文件系统,恢复出厂后首次开机的表现可以作为下一个实验话题。

如果你接下来想继续深入,建议先验证这几个方向:

  1. 在一个 Linux 虚拟机里分别删除/usr/home/etc,对比三种故障表现,加深对根文件系统结构的理解。
  2. 研究 Android 加密分区:删除/data前先开启 FBE 加密,观察解密阶段的报错行为。
  3. 学习 adb 和 fastboot 的刷机流程,在测试设备上完整走一遍system.imguserdata.img的刷写和恢复。
  4. 尝试在 PVE 环境中做快照回滚和备份恢复,掌握企业级虚拟机的救急手段。

无论从哪个方向继续,都要记住同一句话:先备份,再操作,最后才是结论。建议收藏备用,下次遇到虚拟机系统目录损坏或无法启动,这篇文章里的排查表和恢复命令可以直接参考。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询