共计 1561 个字符,预计需要花费 4 分钟才能阅读完成。
背景
新单位有1台运行 11年 老旧的服务器设备,近期频繁发生自动重启,但是从服务器日志未发现明显异常,初步判断系硬件问题。
发生硬件问题,首先需要备份数据,只要数据在其他都好说。
好在机器上未运行生产服务,可以在非工作时间停机维修。
故障服务器信息如下:
- CPU:I7 4970K
- 旧硬盘:Intel SSDSC2KW512G8
- 新硬盘:WD_Green_2.5_1000GB
硬盘迁移
迁移方案选择
迁移方案分为两类:
- 完整克隆(块级克隆):逐位复制,包含所有数据,例如
dd
命令,Clonezilla
等。- 优势
- 完全一致的副本,包括空白区域
- 保留所有元数据和隐藏信息
- 适合系统迁移和灾难恢复
- 劣势
- 速度较慢(复制所有扇区)
- 占用空间大
- 目标设备需要≥源设备容量
- 文件级同步:只复制实际文件和目录,例如
rsync
,cp
等。- 优势
- 速度快(只复制有用数据)
- 节省空间
- 支持增量同步
- 跨平台兼容性好
- 劣势
- 可能丢失某些系统级信息
- 不适合完整系统迁移
选择DD方式最方便快捷。
硬盘迁移过程
硬盘迁移需要停机冷迁,因为操作系统和其他软件运行时产生的数据可能无法被完整复制。
迁移步骤如下:
- 预估迁移耗费时间,使用rsync命令大约估算即可
-
制作U盘启动盘,例如Ubuntu 20.04 live CD镜像
- 服务器停机断电
- 插入新硬盘和U盘
- 开机,使用CD模式引导U盘,进入Ubuntu 20.04 试用模式
-
使用DD命令进行迁移,需注意目标硬盘不能写错,否则会导致数据丢失
dd if=/dev/sda of=/dev/sdb bs=1M conv=noerror,sync status=progress
- 若新硬盘比旧硬盘大,需要执行扩容分区
# 使用parted扩展分区 sudo parted /dev/sdb (parted) print (parted) resizepart [分区号] 100% (parted) quit # 扩展文件系统 sudo resize2fs /dev/sdb1 # 假设根分区是sdb1
- BIOS中配置新硬盘为第一优先级启动盘并引导启动
迁移过程踩坑
这里遇到一个坑点,由于服务器还有其他硬件问题,在执行dd过程中会触发Live cd 模式直接卡死,我连续执行了十余次都失败了。
咨询AI后也没有明确结论,将U盘切换为 Clonezilla 这类专业用于磁盘备份的系统,也是失败,表现为复制的吞吐速率持续下降,而Inode号卡住不增长。
最后将硬盘带回家里,插入在家中服务器使用DD一次性成功复制完。(单位没有冗余的设备可以操作)
虚拟化引导
由于旧服务器服役时间太长,明显其他硬件也存在问题。加急采购了1台服务器安装PVE虚拟化,计划将硬盘迁移到虚拟机启动。
方式为将硬盘直通给1台新创建的虚拟机作为启动盘。
虚拟化过程
旧服务器和新服务器CPU都是Intel的,架构一致,理论上不存在兼容性问题。
但是由于是首次尝试,担心将硬盘直通给虚拟机后产生意外(写入了虚拟化相关数据),导致虚拟化失败,旧机器也无法引导,那就麻烦了。(实际很顺利,并不会写入额外数据)
因为此时新旧两块盘数据一致,用旧硬盘尝试是否可以直通并虚拟化。
- 新服务器查看网卡 mac 地址并复制保存
- 旧服务器拔掉新旧两块硬盘,插入新服务器(支持硬盘热插拔)
- 执行 lsblk,确认硬盘编号
- PVE创建新虚拟机(机器编号:199),确保网卡MAC一致,CPU指令集一致:硬件 –> 处理器 –> 类别 –> host
-
PVE命令行执行命令,将旧硬盘直通给 虚拟机:199
qm set 199 --sata0 /dev/disk/by-id/ata-INTEL_SSDSC2KW512G8_PHLA7520003J512DGN
- PVE上修改启动配置,虚拟机 –>选项 –> 引导顺序,将直通的硬盘调高启动优先级
- 开机验证
- 验证完毕,关闭此测试机。再开1台新虚拟机,重复上述流程,但是硬盘直通换为新硬盘的ID。