仅拥有Ubuntu服务器文件,如何在Virtual Box中恢复VPS系统?
把Ubuntu Server 16.04 VPS全文件备份恢复到VirtualBox本地虚拟机的完整指南
我帮你一步步搞定这个恢复操作,核心就是把备份的系统文件放到VirtualBox的虚拟磁盘里,再修复引导和配置,让它能正常启动。下面是详细步骤:
一、先把准备工作做足
- 确保你已经下载并解压好VPS的全文件备份(就是包含bin、boot、etc那些目录的压缩包)
- 安装好最新稳定版的VirtualBox,避免兼容性坑
- 下载一个Ubuntu 16.04 Server的安装镜像(用来当救援盘修复引导,必须和原系统版本一致)
- 本地磁盘留够空间,至少比原VPS系统实际占用的大20%,避免不够用
二、创建VirtualBox虚拟机的基础框架
- 打开VirtualBox,点「新建」,给虚拟机起个名字(比如“Recovered Ubuntu 16.04”),类型选「Linux」,版本选「Ubuntu (64-bit)」(原VPS是32位就选对应版本)
- 分配内存:尽量和原VPS一致,实在不行至少1GB(Ubuntu Server 16.04最低要512MB,但恢复时需要更多内存)
- 创建虚拟硬盘:
- 选「创建虚拟硬盘现在」,下一步
- 硬盘类型选「VDI(VirtualBox磁盘镜像)」,下一步
- 存储类型选「动态分配」(省空间)或者「固定大小」(性能更好),看你需求
- 设置硬盘大小:一定要比原VPS系统占用的空间大,比如原VPS用了20GB,就设25GB以上,选好存储位置后点创建
三、把备份文件复制到虚拟硬盘里
这一步需要把虚拟硬盘挂载到本地系统,再把备份文件拷进去,不同系统操作不一样:
如果本地是Linux/macOS
- 在VirtualBox里找到刚创建的虚拟机,右键「设置」→「存储」,记下虚拟硬盘的路径(比如Linux下可能是
~/VirtualBox VMs/Recovered Ubuntu 16.04/Recovered Ubuntu 16.04.vdi) - 建个临时挂载目录:
sudo mkdir /mnt/vbox_disk - 挂载虚拟硬盘:
- Linux:先用
sudo fdisk -l /path/to/your.vdi(GPT分区用gdisk)找到主分区(一般是/dev/loopXp1),然后sudo mount /dev/loopXp1 /mnt/vbox_disk;如果是整个磁盘没分区,直接挂/dev/loopX - macOS:用
hdiutil attach -readonly /path/to/your.vdi,然后把对应的分区挂载到/mnt
- Linux:先用
- 复制备份文件:
sudo cp -a /path/to/your/backup/* /mnt/vbox_disk/(-a参数一定要加!它会保留文件权限、所有者、时间戳,这对系统正常运行至关重要) - 复制完卸载磁盘:
sudo umount /mnt/vbox_disk
如果本地是Windows
- 下载安装「DiskInternals Linux Reader」(免费工具,能直接读取EXT4分区)或者「VirtualBox Disk Utility」
- 打开工具,找到你的VDI文件,挂载里面的EXT4分区
- 用管理员权限打开文件管理器,把备份的所有文件(包括隐藏文件)复制到挂载的分区根目录,覆盖原有的空文件(如果有的话)
- 复制完成后卸载虚拟硬盘
四、修复系统引导和配置(最关键的一步)
直接复制文件后虚拟机大概率启动不了,得用Ubuntu安装镜像做救援:
- 在VirtualBox的虚拟机设置里,「存储」→「控制器: IDE」,点「添加光盘」,选择下载好的Ubuntu 16.04 Server镜像
- 启动虚拟机,开机时按F12(或者VirtualBox提示的启动菜单键),选从光盘启动
- 进入安装界面后,选「Rescue a broken system」(Server版的救援模式,直接选这个就行)
- 救援模式会自动扫描磁盘,找到我们恢复的系统分区,选择它作为「/」分区挂载,然后进入shell
- 修复GRUB引导:
- 先挂载必要的系统目录:
mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys - 切换到恢复的系统环境:
chroot /mnt - 重新安装GRUB到虚拟硬盘:
grub-install /dev/sda(注意是/dev/sda,不是分区,GRUB要装到磁盘的MBR) - 更新GRUB配置:
update-grub
- 先挂载必要的系统目录:
- 调整网络配置(可选,但建议做):
原VPS的网络配置是针对服务商的,VirtualBox默认用NAT,所以改成动态获取IP更方便:
编辑/etc/network/interfaces,确保内容类似:
这里的auto lo iface lo inet loopback auto enp0s3 iface enp0s3 inet dhcpenp0s3是VirtualBox默认的网卡名,如果不一样,用ip addr查看实际名称 - 退出chroot:
exit,然后卸载挂载的目录:umount /mnt/dev /mnt/proc /mnt/sys /mnt,重启虚拟机,记得把光盘镜像移除
五、验证系统是否正常
重启后如果能进入Ubuntu Server 16.04的登录界面,就成功一大半了,再做几个验证:
- 检查原VPS的用户账号是否存在(比如root或你的普通用户)
- 运行
df -h看磁盘空间是否正常 - 启动原VPS上的服务(比如nginx、MySQL),测试能不能正常运行
- ping一下百度,看看网络能不能正常连接
小提示:如果恢复后出现权限问题,大概率是复制文件时没保留权限,回到救援模式运行
chown -R root:root /mnt(针对系统目录),或者给对应文件设置正确的所有者就行。
内容的提问来源于stack exchange,提问作者Alexander Ostapenko




