下边的教程以 Ubuntu 为例,使用的是 Ubuntu20.04 LiveCD(Desktop or Server版的安装镜像都可以)
准备工作
这里假设可以正常进入要备份的系统,如果无法正常进入,可以通过LiveCD的方式启动系统
假设要备份当前整个系统,备份到我的移动硬盘
下面开始分区挂载,挂载移动硬盘中的某个分区
首先使用命令:lsblk
可以查看当前系统中存在的块设备(SATA硬盘,NVMe固态硬盘,U盘等)
然后需要确认,那个设备是你的硬盘,如果不确定那个设备是移动硬盘
可以在插入硬盘前后分别使用 lsblk
,这样通过对比 应该就可以确定
插入之前:
插入之后:
我这里插入之后自动挂载了,如果你们那里没有自动挂载的话需要手动挂载,操作如下:
sudo mkdir -p /media/vzuer/LDP
# 挂载前 要确保挂载点所在目录是存在的
sudo mount /dev/sdc4 /media/vzuer/LDP
系统备份
# 最好在 bash 下执行 我当时在 fish 下执行时 echo `date +%Y-%m-%d` 就没有结果
# 先切换成 root
su -
# 进入根目录
cd /
# tar 命令开始备份
tar -czvpf /media/vzuer/LDP/backup-`date +%Y-%m-%d`.tar.gz --one-file-system /
# size 39GB
# time 13:06-13:24 18mins
–one-file-system 选项的含义:
复制文件或目录存放的文件系统必须和tar命令当前执行的文件系统相同,否则不执行;
也就是讲,不处理其他分区的文件。(可忽略mount挂载分区的问题)
备份完成的部分结果,如下所示:
从上图可知,/boot/efi
挂载的ESP分区没有备份,不过没关系,我们等会儿会重建引导
下边是不用 --one-file-system
的备份方式,这样可以手动排除不需要备份的目录
su -
cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /
tar -cvpzf /media/vzuer/LDP/backup-`date +%Y-%m-%d`.tar.gz --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/lost+found --exclude=/var/log --exclude=/var/cache/apt/archives --exclude=/usr/src/linux-headers* --exclude=/home/*/.gvfs --exclude=/home/*/.cache --exclude=/home/*/.local/share/Trash /
# time 13:31-13:49 18mins
系统还原
这里假设要将系统迁移到,一块全新的硬盘,从零开始恢复:
恢复时,最好选择同一硬件平台,要不然由于显卡驱动之类的问题,
会导致无法通过图形界面进入系统,只能通过 tty 的方式进入
分区、格式化、挂载的操作步骤如下:
# 分区前先查看并确定目标磁盘分区的设备名 类似于 /dev/sda 或者 /dev/nvme0n1之类的
fdisk -l
lsblk
# 以上两个命令都可以
# 选定要分区的块设备
fdisk /dev/sda
# 输入 m 可以查看分区工具 fdisk 的使用帮助
: m # help
# 新建磁盘分区表
# 我选择的是 GPT + UEFI 因此上边只需要输入 g
# 如果是 MBR + Legacy BIOS 的启动方式则只需要键入 o
: g # new GPT partition table
: o # new MBR/DOS partition table
# 建立新分区
: n # new partition
# n 之后的分区号和起始扇区号都可以默认,直接回车即可
# 在终止扇区号那里,输入分区大小,如下
: +512M # for ESP partition
# 然后,再次输入 n 重复上边的操作,根据需要,新建其他分区
# 最后输入 w 保存操作
: w # save, from RAM write to disk
# 格式化
# ESP 分区 需要格式化为 FAT 格式
mkfs.fat -F32 /dev/sda1
# 一般 Linux 系统分区为 ext4 格式
mkfs.ext4 /dev/sda2
# 挂载
mount /dev/sda2 /mnt
# /mnt 相当于新系统的根目录 /
# 挂载点不存在时,需先创建目录
# mkdir -p /mnt/boot/efi # -p 选项,可以递归地创建层级目录
mount /dev/sda1 /mnt/boot/efi
解压镜像
# 挂载移动硬盘
mkdir -p /media/vzuer/LDP
mount /dev/sdb4 /media/vzuer/LDP
# 解压镜像
cd /mnt
tar -xvzpf /media/vzuer/LDP/backup.tar.gz -C /mnt --numeric-owner
–numeric-owner 的含义:
以UID和GID代替用户名和组名,这样可以避免 tar 命令去匹配 LiveCD 中的用户和组
LiveCD 中实际上也没有备份文件所属的用户和组
重建引导
# 写入新硬盘的 UUID 以实现开机自动挂载此硬盘
# 如果是 Arch 的 LiveCD 可以使用下面的命令
genfstab -U /mnt >> /mnt/etc/fstab
# 不是的话比如 Ubuntu 则需要先查看新硬盘的 UUID
sudo blkid
# 然后 再通过 nano vim gedit 等编辑器
# 手动写入到 /etc/fstab
# 查看是否写入成功
cat /mnt/etc/fstab
# 新建 目录 比如 dev proc sys 等备份时排除的目录
cd /mnt
mkdir dev proc sys run tmp lost+found mnt media
# 将Live CD中的 dev proc sys 绑定到新系统
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
# 切换到新系统
chroot /mnt
# 切换为 root
# su -
sudo -s
# 安装grub 重建引导
# MBR Legacy
grub-install --target=i386-pc /dev/sdX
# GPT UEFI
grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck
# 更新配置文件 grub.cfg
# update-grub
grub-mkconfig -o /boot/grub/grub.cfg
# 退出新系统
exit
# 重启系统
reboot
https://blog.csdn.net/weixin_26913055/article/details/116703291
https://blog.csdn.net/weixin_28909289/article/details/116577564
https://help.ubuntu.com/community/Fstab
最后是我当时在操作过程中遇到的一些问题:
问题 1:
EFI variables are not supported on this system
这个问题发生在给新系统安装 grub
时,当时我用的是 ArchLinux LiveCD
推测是 Arch LiveCD 的原因 改用 Ubuntu LiveCD 后问题解决
问题 2:
/dev/sda2: clean, 876670 files, 13769241/39193339 blocks
Finished Terminate Plymouth Boot Screen
Finished Set console scheme
主要是因为驱动的问题,因为我将实体机上的系统迁移到了虚拟机上,
而实体机上当时装的是 Nvidia 的图形驱动,如果迁移的硬件平台一致的话,就不会有这个问题
虽然卡在这个界面不动,但是按Ctrl+Alt+F2
,通过没有图形界面的 tty2 就可以登录
登录后,安装 VM ware 虚拟机的显卡驱动
可以直接, 自动检测安装:sudo ubuntu-drivers autoinstall
也可以先查看,再手动安装:sudo ubuntu-drivers devices
vzuer@hp-288-pro ~> sudo ubuntu-drivers devices (base)
== /sys/devices/pci0000:00/0000:00:0f.0 ==
modalias : pci:v000015ADd00000405sv000015ADsd00000405bc03sc00i00
vendor : VMware
model : SVGA II Adapter
driver : open-vm-tools-desktop - distro free
安装 VM ware 虚拟机的显卡驱动
sudo apt install open-vm-tools-desktop
也可以安装vm-tools:sudo apt install open-vm-tools
下面是当时参考的链接:
问题 3:
在 ubuntu 的 tty 模式下 不能正常显示中文 需要修改语言环境
使用
vim
编辑器,将所有的zh_CN
替换为en_US
即可
先打开此文件:sudo vim /etc/default/locale
在命令模式下,查找替换::%s/zh_CN/en_US/g
最后,保存退出::wq