CentOS 6 远程升级到 CentOS 7

由于 CentOS 6 与 CentOS 7 的目录结构有一些差异,因此 CentOS 6 难以直接升级到 CentOS 7。本文提出一种在新分区上安装 CentOS 7,再修改启动项,以实现系统的升级。整个安装过程使用 ssh 远程操作,无需使用启动 U 盘。

创建新分区

系统分区结构

/dev/sda1 # boot 分区
/dev/sda2 # 根分区
/dev/sdb1 # 新系统根分区

格式化并挂载新系统的根分区

sudo yum -y install xfsprogs xfsdump
sudo mkfs.xfs /dev/sdb1
sudo mount /dev/sdb1 /mnt

安装 chroot 系统

sudo mkdir -p /mnt/var/lib/rpm
sudo rpm --rebuilddb --root=/mnt

curl -O 'http://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/filesystem-3.2-25.el7.x86_64.rpm'
sudo rpm --root=/mnt --nodeps -i filesystem-3.2-25.el7.x86_64.rpm

curl -O 'http://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/centos-release-7-7.1908.0.el7.centos.x86_64.rpm'
sudo rpm --root=/mnt --nodeps -i centos-release-7-7.1908.0.el7.centos.x86_64.rpm
sudo rpm --root=/mnt --import /mnt/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-*

sudo mount --bind /boot/ /mnt/boot/
sudo yum --installroot=/mnt update
sudo yum --installroot=/mnt reinstall -y filesystem
sudo yum --installroot=/mnt groupinstall -y "Core" "Minimal Install"
sudo yum --installroot=/mnt install -y lvm2 mdadm # Important!

修改 /etc/fstab

sudo cp /etc/fstab /mnt/etc/

查看磁盘 UUID。

$ sudo blkid
/dev/sda1: UUID="3dba5ca3-fd24-411c-bc87-4b44f0f78eea" TYPE="ext4" 
/dev/sda2: UUID="p40eSj-OROh-yhan-OF7H-iOix-cGj3-cxdd3Y" TYPE="LVM2_member" 
/dev/sdb1: UUID="244f600a-f457-4e53-b112-5cfd8ef79514" TYPE="xfs" 
/dev/mapper/VolGroup00-LogVol01: UUID="ae11cc28-703e-4a98-ae59-cd3ee495189f" TYPE="swap" 
/dev/mapper/VolGroup00-LogVol00: UUID="4028e39e-809e-40b8-8953-6655316b4238" TYPE="ext4" 

复制 /dev/sdb1 的 UUID,编辑 /mnt/etc/fstab,修改根分区挂载点。

即将

/dev/mapper/VolGroup00-LogVol00 /                       ext4    defaults        1 1

替换为

UUID=244f600a-f457-4e53-b112-5cfd8ef79514   /                       xfs    defaults        1 1

网络配置

sudo cp /etc/sysconfig/network-scripts/ifcfg-* /mnt/etc/sysconfig/network-scripts/

Chroot 到 CentOS 7

sudo mount -t proc proc /mnt/proc
sudo mount --bind /dev /mnt/dev
sudo mount --rbind /sys /mnt/sys
sudo cp /etc/resolv.conf /mnt/etc
sudo chroot /mnt /bin/bash

更新 grub 菜单

sudo yum -y install grub2
sudo grub2-install /dev/sda # /boot 分区所在磁盘
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

SSH 服务配置

sudo yum install -y openssh-server openssh-clients
sudo systemctl enable sshd

用户配置

设置 root 密码(当前 root 密码处于未设置的状态,不设置 root 密码会导致无法以 root 用户登录)。

passwd

也可以创建一个新用户。

adduser test
passwd test
cat << EOF | sudo tee /etc/sudoers.d/test
test    ALL=(ALL)    ALL
EOF

禁用 selinux

编辑 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

重启进入 CentOS 7

退出 Chroot 系统

exit

umount 和重启

sudo umount /mnt/boot /mnt/proc /mnt/sys /mnt/dev 
sudo umount /mnt
sudo reboot

Problem

failed to connect to system bus

systemd-logind failed to connect to system bus no such file or directory

这是由于文件系统 layout 不对导致的错误。在 CentOS 7 中 /var/run 必须是指向 /run 的一个软链接。因此在安装其他软件包之前要安装 filesystem

https://forums.gentoo.org/viewtopic-t-1079204-start-0.html

lost lvm partitions

重启进入 CentOS 7 后,可能无法挂载磁盘上的 lvm 卷。

sudo yum install -y lvm2 mdadm

执行以下命令查看 lvm 卷情况,可以看出有一个 Volume Group,名为 VolGroup00,它有两个 Logic Volume,处于 INACTIVE 的状态,并且在 /dev 下找不到它们对应的设备文件 (/dev/VolGroup00/LogVol01, /dev/dm-0, etc)。

$ sudo vgscan
  Reading volume groups from cache.
  Found volume group "VolGroup00" using metadata type lvm2
$ sudo lvscan
  INACTIVE            '/dev/VolGroup00/LogVol01' [1.50 GiB] inherit
  INACTIVE            '/dev/VolGroup00/LogVol00' [38.25 GiB] inherit

执行以下命令以启用 lvm 卷。

vgchange -a y VolGroup00

查看 lvm 卷情况,可以看到这两个 Logic Volume 都处于 ACTIVE 的状态了,并且在 /dev 目录下存在它们对应的设备文件 (/dev/VolGroup00/LogVol01, /dev/dm-0, etc)。

$ sudo lvscan
  ACTIVE            '/dev/VolGroup00/LogVol01' [1.50 GiB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol00' [38.25 GiB] inherit

通过以下命令可以挂载 lvm 分区。

sudo mount /dev/VolGroup00/LogVol00 /mnt

Reference

  • https://watchmysys.com/blog/2015/02/installing-centos-7-with-a-chroot/

你可能感兴趣的:(CentOS 6 远程升级到 CentOS 7)