自己闲置的笔记本安装了centos7.3,配置好了一些环境。现在想给笔记本的光驱改成硬盘位,添加一块硬盘。把新的硬盘做为系统盘,原来的硬盘做为数据盘。如果是在当前的硬盘上备份或还原系统还是很简单的,这样的教程之前也有收集。
现在是要把系统备份之后,弄到新的硬盘上恢复,这就涉及到系统迁移的问题。
首先来捋一捋思路。
原硬盘称为A盘,新硬盘称为B盘。
A盘装系的时候是用U盘引导安装的,在GUI界面下安装,不知道是用的MBR启动的还是EFI启动的。
通过df -h命令查看磁盘挂载情况,没有efi分区,说明是通过MBR启动的。
这样的情况只要直接打包根分区即可。通过度娘查到大佬的教程,推荐在备份系统前清空日志。
清空日志的操作步骤:
cd /var/log/
find . -type f | xargs rm -f
关闭selinux:
sed -i '/^SELINUX=/cSELINUX=disabled' /mnt/etc/selinux/config
然后就直接打包根分区:
tar zcpf /centos7.tgz --exclude=/centos7.tgz --one-file-system /
如果是EFI启动的话,还需要把EFI分区一起打包:
假设 efi 分区挂载在 /boot/efi 下
tar zcpf /centos7.tgz --exclude=/centos7.tgz --one-file-system / /boot/efi
对比之前收集的教程中打包的命令:
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=backup.tgz /
还是有些不同的,一个是tar的参数不同。有大佬只用了zcpf四个参数,有大佬用了cvpzf五个参数。
通过tar --help命令查看到这些参数的意义:
c:创建一个新归档
p:解压文件权限信息,用大佬的话来解释就是:保持权限(保留所有东西原来的权限)
v:详细地列出处理的文件
z:通过gzip压缩
f:使用归档文件或 ARCHIVE 设备
还有一个是有没有把proc、lost+found、mnt、sys等等目录除外。这个--one-file-system是不是就是把这些目录除外了?
通过度娘查询资料,知道了--one-file-system是什么意思。
--one-file-system 选项的含义:
复制文件或目录存放的文件系统必须和tar命令当前执行的文件系统相同,否则不执行;
也就是说,不处理其他分区的文件。(可忽略mount挂载分区的问题)
如果不使用--one-file-system选项,就可以手动排除不需要备份的文件系统。
也就是说可以用--one-file-system选项自动的排除一些文件系统,不使用--one-file-system选项的话,就需要手动指定要排除的文件系统。
打包好之后,就要把打包好的文件复制到新的硬盘中,再到新的硬盘中进行系统恢复,或者在备份的时候就直接将文件备份到挂载好的新硬盘中。
如果是把文件直接备份到新硬盘中的话,首先要对新硬盘进行处理,如果是备份好之后再复制到新硬盘中的话,也同样要对新硬盘进行处理。
所以,最好就是先把新硬盘处理好,分好区,格式化,挂载。
硬盘分区:
假设 /dev/sdb 是 B 的系统硬盘 MBR 启动时,分区表是 dos,只分一个根分区即可。
EFI启动时,分区表是 gpt,需要分一个 512MB 的 efi 分区和一个根分区。
fdisk /dev/sdb
#n 创建新分区
#t 指定分区类型 1 (即 efi system)
格式化:
MBR 启动
mkfs.xfs /dev/sdb1
EFI 启动
mkfs.vfat -F32 /dev/sdb1
mkfs.xfs /dev/sdb2
挂载:
MBR 启动
mount /dev/sdb1 /mnt/
EFI 启动
mount /dev/sdb2 /mnt/
mkdir -p /mnt/boot/efi
mount /dev/sdb1 /mnt/boot/efi/
部署系统:
解压之前打包的 /centos7.tgz
tar zxpf /centos7.tgz -C /mnt/
替换 fstab 中的 uuid 信息
#获取 B 的系统硬盘分区的 uuid 信息
lsblk -f /dev/sdb
#把结果中的 uuid 替换到 /mnt/etc/fstab 中的相应位置
如果打包时未关闭 selinux,此时可以修改配置文件
sed -i '/^SELINUX=/cSELINUX=disabled' /mnt/etc/selinux/config
删除网卡硬件标识(推荐)
sed -i -e '/HWADDR/d' -e '/UUID/d' /mnt/etc/sysconfig/network-scripts/ifcfg-{eth,enp}*
删除 ssh 主机密钥(推荐)
rm -rf /etc/ssh/ssh_host_*
部署 grub
MBR 启动
mount --bind /dev/ /mnt/dev/
mount -t proc procfs /mnt/proc/
mount -t sysfs sysfs /mnt/sys/
chroot /mnt grub2-install /dev/sdb
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
EFI 启动
mount --bind /dev/ /mnt/dev/
mount -t proc procfs /mnt/proc/
mount -t sysfs sysfs /mnt/sys/
mount -t efivarfs efivarfs /target/sys/firmware/efi/efivars/
chroot /mnt
efibootmgr -c -p 1 -d /dev/sdb -L "centos"
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
exit
启动操作系统
卸载B盘
umount -R /mnt
关机,拆下刚部署好操作系统的硬盘,接到原来A盘的位置,将A盘接到光驱改的硬盘位。
在把A盘接到光驱位的时候,应该要先格式化,防止和B盘冲突,无法启动系统。