Linux实例数据恢复
当误删文件导致实例无法启动,即系统盘数据丢失时,您可以选择利用另一台可以正常启动的Linux实例进行数据恢复,或利用快照进行数据恢复。详细步骤如下。
- 关机原实例。
- 卸载需要恢复数据的系统盘,参考卸载云硬盘。
单击“确定”后等待片刻观察到卸载的硬盘已经不在原实例后,进行下一步。
- 为无法正常启动的Linux系统恢复磁盘数据,必须要利用能够正常启动的Linux系统实现,主要原理是将原实例的系统启动盘作为数据盘,挂载到正常Linux实例上,然后进行数据恢复操作。在华为云上有两种方案可以选择。
- 利用另一台正常的Linux实例实现。
- 利用快照技术实现。
为确保数据安全,请务必在进行数据恢复前为原硬盘创建快照。若无法通过现有方式恢复数据,可以利用快照恢复硬盘后,使用专业的数据恢复软件进行数据恢复工作。
- 执行lsblk和fdisk -lu命令查看磁盘信息,图中/dev/vdb为需要恢复数据的云硬盘,可以观察到/dev/vdb1说明磁盘分区信息正常,以实际需要恢复的云硬盘设备名为准。
- 执行mount /dev/vdb1 /mnt命令将磁盘挂载到/mnt路径。
执行cd /mnt命令查看原实例系统盘的数据,根据需要从对应路径下查找恢复数据即可。
- 再次执行lsblk和fdisk -lu命令查看磁盘信息,图中/dev/vdb是需要恢复的磁盘,但由于分区信息损坏或丢失,无法显示/dev/vdb1。
- 执行fdisk /dev/vdb命令进行磁盘分区。
在用fdisk进行磁盘分区的过程中出现咨询“Do you want to remove the signature? [Y]es/[N]o”时,说明fdisk识别到存在旧的分区表。
- 选择“No”会保留旧的分区表,然后输入w保存旧分区表。
- 若选择“Yes”会清除原分区表,创建新的分区,虽然数据不会被立刻覆盖,但可能无法直接访问原有文件。
- 执行mount /dev/vdb1 /mnt命令挂载云硬盘到/mnt挂载点。
- 根据需要从对应的路径下查找恢复的数据即可。
- 安装testdisk。
- CentOS系统操作命令:sudo yum -y install testdisk
- Ubuntu系统操作命令:sudo apt install -y testdisk
- 进入testdisk的修复界面,执行testdisk /dev/vdb,请按需更换设备名。
testdisk界面中,以方向键进行选择,回车键进行确认,其余功能键位会在屏幕下方进行提示展示。
- 选择[Proceed],按下回车键。
- 选择待扫描的分区表类型,一般为[Intel],若为GPT分区则选择[EFI GPT],按下回车键。
- 选择[Analyse],按回车键。
- 若未看到分区信息,提示“No partition is bootable”,选择[Quick Search],按回车键。
待搜索完成后可以看到分区信息,如下图所示,一般会默认选中该分区。
- 选择[Write]后继续按回车键保存分区。
根据提示保存分区按Y键。
按照默认选择的[OK],按回车键。
退出testdisk后执行partprobe /dev/vdb手动刷新分区表。
重新挂载分区,查看磁盘数据情况,根据路径查到文件。
- 使用方向键到需要恢复的文件或文件夹,按C键进行复制。
使用方向键选择目标目录,可以看到Directory后显示的当前路径,本次以恢复到/root为例,在/root目录按C键。
复制成功后可以看到提示“Copy done!”并且会提示复制成功和失败的文件数。如果复制的是文件夹,会需要等待复制完成。
多次按Q键直到退出testdisk界面,进入目标路径/root的目录下查看,数据已恢复。
在粘贴时会将待恢复数据的文件结构一起复制到目标路径中。如本次将原磁盘文件系统中root/fake.py文件复制到/root目录成功后,实际fake.py的路径会变成/root/root/fake.py。