当前位置: 首页 > news >正文

数据无忧:Ubuntu 系统迁移备份全指南

唠唠闲话

最近电脑出现了一些故障,送修期间,不得不在实验室的台式机上重装系统,配环境的过程花费了不少时间。为避免未来处理类似事情时耗费时间,特此整理一些备份策略。

先做以下准备:

  • U盘启动盘,参考 Rufus 制作 Ubuntu 启动盘
  • 安装了 Ubuntu系统的硬盘 A
  • 用于数据备份的硬盘 B

除了通过硬盘备份,Ubuntu 还有类似 Time Machine 的工具,教程将在后边介绍。

硬盘备份

通过 lsblk 命令查看硬盘信息,假设硬盘A为 /dev/sda,硬盘B为 /dev/sdb

使用 ddddrescue 进行数据拷贝

dd 是主要用于低级别的数据复制和转换。

使用dd命令拷贝数据:

dd if=/dev/sda of=/dev/sdb bs=4M status=progress

参数说明:

  • if:输入文件(硬盘A)
  • of:输出文件(硬盘B)
  • bs:块大小,建议设置较大以提高拷贝速度
  • status:显示拷贝进度

ddrescue 是一个专门用来从损坏的硬盘、光学介质或其他损坏的存储设备中尽可能多地恢复数据的高级工具。它比 dd 更智能、更有效率,适合用于数据恢复工作。

使用 ddrescue 命令进行断点续传:

ddrescue -f /dev/sda /dev/sdb rescuefile.log
  • -f:强制覆盖目标硬盘

修改 UUID

dd 这类命令会完全拷贝硬盘,包括分区的 UUID 信息。为避免潜在的 UUID 冲突,可对新设备进行修改。

假设系统盘挂载在 /dev/sdb2,使用 tune2fs 命令修改 UUID:

tune2fs /dev/sdb2 -U random

通过 blkid 查看修改后的 UUID:

sudo blkid /dev/sdb2

修改后,直接重启系统还会遇到 UUID 识别失败问题。此时,需更新 /etc/fstab 文件中的UUID设置。

挂载硬盘和修改系统配置

  1. 挂载新硬盘
mkdir /mnt/mydisk
mount /dev/sdb2 /mnt/mydisk
  1. 挂载系统目录

为了正常进入系统,需要挂载系统的一些目录:

mount --bind /dev /mnt/mydisk/dev
mount --bind /proc /mnt/mydisk/proc
mount --bind /sys /mnt/mydisk/sys
  1. 进入新系统环境

使用 chroot 命令更改根目录到新硬盘的系统环境:

chroot /mnt/mydisk
  1. 修改/etc/fstab 和更新 grub

编辑 /etc/fstab 文件中的 UUID,然后更新 grub:

nano /etc/fstab
update-grub
  1. 退出 chroot 环境并卸载硬盘
exit
umount /mnt/mydisk/dev
umount /mnt/mydisk/proc
umount /mnt/mydisk/sys
umount /mnt/mydisk

完成上述步骤后,重启系统即可。

特殊处理

  • 硬盘大小相同:直接使用 dd 完全拷贝即可。

  • 硬盘A 比硬盘B 小

    • 使用 dd 拷贝后,通过 gparted 扩大硬盘B的分区,调整 /dev/sdb 及其子分区的大小。
  • 硬盘A 比硬盘B 大,但使用量更少

    • 使用 gparted 缩小硬盘A的分区,再使用 resize2fs 调整文件系统大小:
      resize2fs /dev/sdb1
      
    • 在调整后再进行拷贝。

此外,对于第三种情形,实测在 dd 拷贝过程中终止,且拷贝量大于硬盘A的实际使用量时,也可以正常使用,不需要额外的调整操作。

文件系统检查

操作完成后,建议使用 e2fsck 检查文件系统的完整性:

e2fsck -f /dev/sdb

通过以上步骤,你可以高效、安全地完成硬盘之间的数据迁移和备份。

使用 Timeshift 进行备份

Timeshift 是一个功能强大的工具,可以在 Ubuntu 系统上实现类似于 Mac 的 Time Machine 的备份功能。以下是如何安装和使用 Timeshift 进行系统备份和恢复的详细步骤。

安装 Timeshift

  1. 打开终端并添加 Timeshift 的 PPA 仓库:
    sudo apt-add-repository -y ppa:teejee2008/ppa
    sudo apt-get update
    
  2. 安装 Timeshift:
    sudo apt-get install timeshift
    

配置 Timeshift

安装完成后,运行 Timeshift 配置向导:

sudo timeshift-gtk

按照向导的指引进行设置:

  • 选择备份类型:选择“RSYNC”或者“BTRFS”。大多数用户选择“RSYNC”。
  • 选择备份存储位置:选择一个存储设备或分区来存储备份快照,确保备份位置有足够的空间。
  • 设置计划任务:可以设置每日、每周或每月的自动备份时间,以定期创建系统快照。

手动创建快照

在 Timeshift 主界面中,点击“创建”按钮手动创建系统快照。这可以在需要进行重大系统更改前手动备份当前系统状态。

恢复系统

当系统出现问题时,可以使用 Timeshift 恢复到之前的快照:

  1. 打开 Timeshift。
  2. 选择一个可用的快照。
  3. 点击“恢复”按钮,然后按照向导操作恢复系统。

恢复到新的硬盘

如果需要将系统恢复到一个新的硬盘上,请按照以下步骤操作:

准备新的硬盘
  1. 使用 Ubuntu live CD 或 USB 启动计算机,并将新的硬盘连接到系统。
  2. 使用磁盘工具(例如 GParted)在新的硬盘上创建适当的分区,并格式化为 ext4 文件系统。
安装并运行 Timeshift

在 live 环境下,打开终端并安装 Timeshift:

sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install timeshift

运行 Timeshift:

sudo timeshift-launcher
设置目标设备并恢复快照
  1. 在 Timeshift 的设置中,将目标设备设置为新的硬盘分区。
  2. 选择一个可用的快照,然后点击“恢复”。在恢复选项中,选择新的硬盘分区作为目标。
  3. 按照提示完成恢复过程。
安装引导程序(GRUB)

恢复完成后,需要在新硬盘上安装引导程序(GRUB)。假设新的硬盘是 /dev/sdb,可以执行以下命令:

sudo mount /dev/sdb1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install /dev/sdb
update-grub
exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev
sudo umount /mnt

完成这些步骤后,你应该能够从新的硬盘启动系统。

以上。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 汇川CodeSysPLC教程03-2-14 与HMI通信
  • Java泛型的定义与运用
  • Linux | 安装lb-toolkits 1.2.4库
  • 信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
  • STM32 SPI世界:W25Q64 Flash存储器的硬件与软件集成策略
  • Riscv 架构的合规测试
  • 【简历】湖南某一本大学:JAVA实习简历指导,面试通过率比较低
  • CBCOI招人啦!!!!!!!!
  • jenkins学习
  • 【安全设备】堡垒机
  • pcie 基础
  • Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
  • 安全及应用(更新)
  • 深入理解MySQL中的EXPLAIN及type列
  • 华为HCIP Datacom H12-821 卷34
  • 2017年终总结、随想
  • Apache的基本使用
  • JavaScript异步流程控制的前世今生
  • java概述
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Laravel Mix运行时关于es2015报错解决方案
  • maven工程打包jar以及java jar命令的classpath使用
  • nfs客户端进程变D,延伸linux的lock
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 简析gRPC client 连接管理
  • 聊聊flink的TableFactory
  • 马上搞懂 GeoJSON
  • 探索 JS 中的模块化
  • 为视图添加丝滑的水波纹
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Linux权限管理(week1_day5)--技术流ken
  • 湖北分布式智能数据采集方法有哪些?
  • ​TypeScript都不会用,也敢说会前端?
  • ​第20课 在Android Native开发中加入新的C++类
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (39)STM32——FLASH闪存
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Python) SOAP Web Service (HTTP POST)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)c52学习之旅-点亮LED灯
  • (三)Honghu Cloud云架构一定时调度平台
  • ****三次握手和四次挥手
  • ./configure,make,make install的作用
  • .gitignore文件设置了忽略但不生效
  • .java 9 找不到符号_java找不到符号
  • .net 7和core版 SignalR
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net Web项目创建比较不错的参考文章
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET下ASPX编程的几个小问题