数据无忧:Ubuntu 系统备份全指南
唠唠闲话
最近电脑出现了一些故障,送修期间,不得不在实验室的台式机上重装系统,配环境的过程花费了不少时间。为避免未来处理类似事情时耗费时间,特此整理一些备份策略。
先做以下准备:
- 一个U盘启动盘,制作方法参考 服务器硬盘维护 | 学习笔记。
- 硬盘 A 上安装了 Ubuntu系统。
- 硬盘 B 用于数据备份。
除了硬盘备份,Ubuntu 有类似 Time Machine 的工具。教程后边将介绍 Timeshift 这一备份工具的用法。
rsync 拷贝数据
rsync
是一个功能强大的文件和目录同步工具,广泛用于在本地和远程之间复制文件。它的优势在于可以增量传输,即只传输文件的差异部分,从而提高效率。以下是 rsync
的基本用法和一些示例:
基本语法
1 | rsync [options] source destination |
source
:源文件或目录。destination
:目标文件或目录。
常用选项:
-v
:verbose,详细输出。-r
:recursive,递归处理子目录。-a
:archive,归档模式,等同于-rlptgoD
,保留多种文件属性。-z
:compress,传输时压缩数据。-P
:显示进度信息,并在传输中断时支持继续。-e
:指定远程 shell,例如ssh
。
示例
-
本地复制目录或文件
将
src_directory
复制到dst_directory
:1
rsync -av /path/to/src_directory /path/to/dst_directory
-
同步并删除目标中多余的文件
使目标目录与源目录完全相同,自动删除目标中多余的文件:
1
rsync -av --delete /path/to/src_directory /path/to/dst_directory
-
仅更新已存在的文件
仅同步已存在的文件,不传输源中新文件:
1
rsync -av --existing /path/to/src_directory /path/to/dst_directory
-
使用压缩传输
对于大型文件,使用压缩可以加快传输速度:
1
rsync -avz /path/to/src_directory user@example.com:/remote/path
根据具体需求,使用 man rsync
可以查看更详细的文档和选项。
硬盘备份
通过 lsblk
命令查看硬盘信息,假设硬盘A为 /dev/sda
,硬盘B为 /dev/sdb
。
使用 dd
或 ddrescue
进行数据拷贝
dd 主要用于低级别的数据复制和转换。
使用dd
命令拷贝数据:
1 | dd if=/dev/sda of=/dev/sdb bs=4M status=progress |
参数说明:
if
:输入文件(硬盘A)of
:输出文件(硬盘B)bs
:块大小,建议设置较大以提高拷贝速度status
:显示拷贝进度
ddrescue 是一个专门用来从损坏的硬盘、光学介质或其他损坏的存储设备中尽可能多地恢复数据的高级工具。它比 dd 更智能、更有效率,适合用于数据恢复工作。
使用 ddrescue
命令进行断点续传:
1 | ddrescue -f /dev/sda /dev/sdb rescuefile.log |
-f
:强制覆盖目标硬盘
修改 UUID
dd
这类命令会完全拷贝硬盘,也包括分区的 UUID 信息。为避免潜在的 UUID 冲突,可对新设备进行修改。
假设系统盘挂载在 /dev/sdb2
,使用 tune2fs
命令修改 UUID:
1 | tune2fs /dev/sdb2 -U random |
通过 blkid
查看修改后的 UUID:
1 | sudo blkid /dev/sdb2 |
修改后,直接重启系统还会遇到 UUID 识别失败问题。此时,需更新 /etc/fstab
文件中的UUID设置。
挂载硬盘和修改系统配置
- 挂载新硬盘
1 | mkdir /mnt/mydisk |
- 挂载系统目录
为了正常进入系统,需要挂载系统的一些目录:
1 | mount --bind /dev /mnt/mydisk/dev |
- 进入新系统环境
使用 chroot
命令更改根目录到新硬盘的系统环境:
1 | chroot /mnt/mydisk |
- 修改
/etc/fstab
和更新 grub
编辑 /etc/fstab
文件中的 UUID,然后更新 grub:
1 | nano /etc/fstab |
- 退出
chroot
环境并卸载硬盘
1 | exit |
完成上述步骤后,重启系统即可。
特殊处理
-
硬盘大小相同:直接使用
dd
完全拷贝即可。 -
硬盘A 比硬盘B 小:
- 使用
dd
拷贝后,通过gparted
扩大硬盘B的分区,调整/dev/sdb
及其子分区的大小。
- 使用
-
硬盘A 比硬盘B 大,但使用量更少:
- 使用
gparted
缩小硬盘A的分区,再使用resize2fs
调整文件系统大小:1
resize2fs /dev/sdb1
- 在调整后再进行拷贝。
- 使用
此外,对于第三种情形,实测在 dd
拷贝过程中终止,且拷贝量大于硬盘A的实际使用量时,也可以正常使用,不需要额外的调整操作。
文件系统检查
操作完成后,建议使用 e2fsck
检查文件系统的完整性:
1 | e2fsck -f /dev/sdb |
通过以上步骤,你可以高效、安全地完成硬盘之间的数据迁移和备份。
使用 Timeshift 进行备份
Timeshift 是一个功能强大的工具,可以在 Ubuntu 系统上实现类似于 Mac 的 Time Machine 的备份功能。以下是如何安装和使用 Timeshift 进行系统备份和恢复的详细步骤。
安装 Timeshift
- 打开终端并添加 Timeshift 的 PPA 仓库:
1
2sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update - 安装 Timeshift:
1
sudo apt-get install timeshift
配置 Timeshift
安装完成后,运行 Timeshift 配置向导:
1 | sudo timeshift-gtk |
按照向导的指引进行设置:
- 选择备份类型:选择“RSYNC”或者“BTRFS”。大多数用户选择“RSYNC”。
- 选择备份存储位置:选择一个存储设备或分区来存储备份快照,确保备份位置有足够的空间。
- 设置计划任务:可以设置每日、每周或每月的自动备份时间,以定期创建系统快照。
手动创建快照
在 Timeshift 主界面中,点击“创建”按钮手动创建系统快照。这可以在需要进行重大系统更改前手动备份当前系统状态。
恢复系统
当系统出现问题时,可以使用 Timeshift 恢复到之前的快照:
- 打开 Timeshift。
- 选择一个可用的快照。
- 点击“恢复”按钮,然后按照向导操作恢复系统。
恢复到新的硬盘
如果需要将系统恢复到一个新的硬盘上,请按照以下步骤操作:
准备新的硬盘
- 使用 Ubuntu live CD 或 USB 启动计算机,并将新的硬盘连接到系统。
- 使用磁盘工具(例如 GParted)在新的硬盘上创建适当的分区,并格式化为 ext4 文件系统。
安装并运行 Timeshift
在 live 环境下,打开终端并安装 Timeshift:
1 | sudo apt-add-repository -y ppa:teejee2008/ppa |
运行 Timeshift:
1 | sudo timeshift-launcher |
设置目标设备并恢复快照
- 在 Timeshift 的设置中,将目标设备设置为新的硬盘分区。
- 选择一个可用的快照,然后点击“恢复”。在恢复选项中,选择新的硬盘分区作为目标。
- 按照提示完成恢复过程。
安装引导程序(GRUB)
恢复完成后,需要在新硬盘上安装引导程序(GRUB)。假设新的硬盘是 /dev/sdb
,可以执行以下命令:
1 | sudo mount /dev/sdb1 /mnt |
完成这些步骤后,你应该能够从新的硬盘启动系统。