从 CentOS 到 CentOS 之无媒介重装云服务器

AliCloud 出了一款轻量应用服务器,很便宜,然而如何洗掉 AliCloud 著名的云盾,就需要重装云服务器了。


1、前言

重装系统很多人都会,但是现在没有任何的媒介(U 盘,光盘)也没有任何的其他分区,你需要在这个分区内安装新的系统并且清空原有数据,这时候就很麻烦了。

本文在源环境为 CentOS7 的情况下,重装 CentOS7 最小化安装版,文章内采用联网的方式制作,实际你完全可以离线实施。


2、实施准备

准备工具

Linux Server

SSH Client

CentOS Minimal Install ISO (离线安装时)

前提要素

在线安装时保证网络不会中断

建议提前创建磁盘快照防止失误


3、实施流程

操作流程比较多,请坐和放宽
如果采用离线安装,请先上传 CentOS.iso 镜像源文件到根目录下(本例为 /root/ 目录下)


3.1、准备临时系统

首先我们创建一个临时系统所需要的文件夹

mkdir /templinux/

接着我们需要向里面安装系统,我们可以采用 yum 安装 ( util-linux 为 mount 挂载命令所需的组件包)
输入完命令后,会显示需要安装 131 个数据包 Install 3 Packages (+128 Dependent packages)

yum --installroot=/templinux --releasever=7 -y install yum centos-release util-linux

如果说你由于其他原因不能使用 yum,你可以使用 rpm 安装(如果安装校验报错可以在后面添加上 –force –nodeps  强制安装)

rpm --root /templinux -i http://mirror.centos.org/centos/7.6.1810/os/x86_64/Packages/centos-release-7-6.1810.2.el7.centos.x86_64.rpm

复制网络相关的配置文件

cp /etc/resolv.conf /templinux/etc
mkdir -p /templinux/etc/sysconfig/network-scripts/
cp /etc/sysconfig/network-scripts/ifcfg-e* /templinux/etc/sysconfig/network-scripts/

为虚拟系统挂载设备等文件夹

mount --bind /dev/ /templinux/dev/
mount -t proc procfs /templinux/proc/
mount -t sysfs sysfs /templinux/sys/

如果你的系统是 UEFI 引导的,你需要额外挂载 EFI 相关文件

mount -t efivarfs efivarfs /templinux/sys/firmware/efi/efivars/

操作完毕后,就可以进入临时系统了


3.2、进入临时系统并删除原盘文件

进入临时系统,注意进入后你的 Shell 界面将变成 bash-4.2#

chroot /templinux

创建新目录,将磁盘挂载到此目录方便操作

mkdir /newlinux
mount $(df -a / | grep -o "/dev/[a-z]\{3\}[0-9]") /newlinux

进入新系统,删除所有文件(注意一定要排除临时系统所在的目录)
此命令同时排除了 selinux 文件夹是为了防止系统本身运行 selinux 导致的权限问题,一般用不到。

chroot /newlinux
find / \( ! -path '/dev/*' -and ! -path '/proc/*' -and ! -path '/sys/*' -and ! -path '/selinux/*' -and ! -path "/templinux/*" \) -delete 2>/dev/null || true
exit

操作完毕后的 exit 将退回临时系统,此时请不要再退出一次否则将直接死机
新系统与临时系统的 Shell 都一模一样,只能通过 ls  命令并依据根目录是否有临时系统的文件夹来判断。


3.3、开始部署新系统

首先我们和第一步一样,需要向里面安装系统,我们仍然使用 yum 安装

yum --installroot=/newlinux --releasever=7 -y install yum centos-release util-linux

依然复制网络相关的配置文件

cp /etc/resolv.conf /newlinux/etc
mkdir -p /newlinux/etc/sysconfig/network-scripts/
cp /etc/sysconfig/network-scripts/ifcfg-e* /newlinux/etc/sysconfig/network-scripts/

为虚拟系统挂载设备等文件夹

mount --bind /dev/ /newlinux/dev/
mount -t proc procfs /newlinux/proc/
mount -t sysfs sysfs /newlinux/sys/

如果你的系统是 UEFI 引导的,你需要额外挂载 EFI 相关文件

mount -t efivarfs efivarfs /newlinux/sys/firmware/efi/efivars/

操作完毕后,就可以准备进入新系统配置了,但是为了防止有误操作请不要使用 exit 退回而是 chroot 进入。


3.4、对新系统进行简单配置


3.4.1、安装基础软件

新的系统,首先我们就要在里面安装系统所需的基本软件

yum install -y yum centos-release @core @base

如果你的磁盘分区是 Raid,LVM,XFS 等格式,则需要这些格式的软件包

yum install -y mdadm lvm2 xfsprogs

如果你想使用一些命令,比如 lsb_release cat ls 等命令,在标准镜像包中你可以安装这些软件

yum install -y coreutils redhat-lsb-core dracut-tools dracut-config-generic dracut-config-rescue

如果你想使用一些命令,比如 cat ifconfig 等命令,在最小化镜像包中你可以安装这些

yum install -y net-tools openssl curl

如果你还想使用一些命令,比如 epel 源 vim wget  等命令,在标准镜像包中你可以安装这些

yum install -y epel-release git vim wget unzip screen

以上操作完毕后,请注意如果你是软 Raid 用户,你需要运行下面的命令

mdadm --detail --scan > /etc/mdadm.conf

安装好这些基本的 RPM 包后,则开始手动安装一个 Linux 系统的其他内容


3.4.2、制作 Grub 引导

首先需要了解一下安装 GRUB 相关的 RPM 包

yum install -y grub2 grub2-efi efibootmgr

然后我们可以制作 grub 文件

cat > /etc/default/grub << EOF
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.auto rhgb quiet consoleblank=0"
GRUB_DISABLE_RECOVERY="true"
EOF

然后我们生成正式的 GRUB2 引导

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

如果你是 UEFI 引导的系统,则你需要运行下面命令

efibootmgr -c -p 1 -d /dev/sda -L "centos sda" -l '\EFI\centos\grubx64.efi'
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

操作完毕后你的引导就做好了


3.4.3、网络设置

首先我们需要配置开机启动网络

echo "NETWORKING=yes" > /etc/sysconfig/network

然后我们可以查看网络设备虚拟名,并在/etc/sysconfig/network-scripts/中修改配置名称

[[email protected] ~]# udevadm test-builtin net_id /sys/class/net/* 2> /dev/null
ID_NET_NAME_MAC=enx000c2970505eID_OUI_FROM_DATABASE=VMware, Inc.ID_NET_NAME_PATH=enp2s1ID_NET_NAME_SLOT=ens33

输入此命令后就可以看到本机所有网卡的 ID_NET_NAME_SLOT 名字,本例则对应的 ifcfg-ens33.cfg


3.4.4、启用 journald 日志系统
mkdir /var/log/journal
chgrp systemd-journal /var/log/journal
chmod 2755 /var/log/journal
systemctl enable systemd-journald

3.4.5、配置 SElinux 开关

在下次系统创建时并激活 SELINUX 相关配置

touch /.autorelabel

修改 selinux 配置文件并关闭 selinux

sed 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

3.4.6、配置 fstab 并挂载根分区

查看设备分区清单

lsblk

查看每个分区的 UUID

blkid

根据 UUID  添加根目录挂载到 fstab,请注意 UUID 需要修改你需要的 UUID

echo "UUID=026f00e4-cc0e-466d-af91-f36e247325a2  /  ext4  defaults  0 0" >> /etc/fstab

3.5、完成安装

配置主机密码

passwd

取消挂载所有设备

mount |grep target |awk '{ print $3 }' |xargs umount -lf

准备重启

reboot

(可选) 重启后配置语言环境和 hostname

hostnamectl set-hostname linux.example.com
localectl set-locale LANG=en_US.utf8

4、实施讲解

简单讲解一些操作注意的地方


4.1、挂载 ISO 到本地作为本地镜像源

本地源镜像的优点就是可以离线部署,并且免除了下载速度慢的烦恼
默认 CentOS 自带了本地镜像源的配置,但是没有启动罢了。
所以我们直接调用本地镜像源即可使用。

mkdir /etc/yum.repos.d/backup/
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
cp /etc/yum.repos.d/backup/CentOS-Media.repo /etc/yum.repos.d/CentOS-Media.repo
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS-Media.repo

yum 源配置好了,接下来我们就要把镜像挂载到对应的文件夹下

mkdir /media/CentOS
mount -o loop CentOS-7-x86_64-Minimal-1804.iso /media/CentOS

当两个都配置好了时,我们就可以使用 yum 本地源了。

yum clean all
yum update

当然,如果你觉得本地源用完了想恢复回去,也很简单

rm -f /etc/yum.repos.d/*.repo
mv /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d/
rm -rf /etc/yum.repos.d/backup/
umount -v /media/CentOS/
rm -rf /media/CentOS/
yum clean all

如果你不想要默认的位置挂载 yum 源,可以直接自己配置路径 (下方配置路径为/templinux/localyum/)

echo "[local-yum]
name=CentOS-$releasever - Media
baseurl=file:///templinux/localyum/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" > /etc/yum.repos.d/centos-localyum.repo

请注意如果你想在上面的操作里使用本地源挂载,你需要注意在临时系统和新系统下,文件路径的不同问题。


4.2、网络配置文件的说明

对于 CentOS,网络配置文件默认在/etc/sysconfig/network-scripts/中,以 ifcfg 为前缀的文件名。

关于系统网卡设备的信息,可以以下命令查看,下方我们可以查看到我们的网卡设备名为 ens33

[[email protected]ux ~]# ls /sys/class/net/
ens33  lo
[[email protected] ~]# udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null
ID_NET_NAME_MAC=enx000c2970505eID_OUI_FROM_DATABASE=VMware, Inc.ID_NET_NAME_PATH=enp2s1ID_NET_NAME_SLOT=ens33
[[email protected] ~]# nmcli dev show ens33
GENERAL.DEVICE: ens33GENERAL.TYPE: ethernetGENERAL.HWADDR: 00:0C:29:70:50:5EGENERAL.MTU: 1500GENERAL.STATE: 100 (connected)GENERAL.CONNECTION: UpLink-ens33GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2WIRED-PROPERTIES.CARRIER: onIP4.ADDRESS[1]: 192.168.188.129/24IP4.GATEWAY: 192.168.188.2IP4.DNS[1]: 192.168.188.2IP4.DOMAIN[1]: localdomainIP6.ADDRESS[1]: fe80::5630:67a0:6589:e171/64IP6.GATEWAY: --
[[email protected] ~]# nmcli con show
NAME UUID TYPE DEVICEUpLink-ens33 07773715-e357-4e62-866c-afeb9731f992 802-3-ethernet ens33

首先放一份标准的静态 IP 的配置文档 ( /etc/sysconfig/network-scripts/ifcfg-eth0 )  参考文章 [链接 ]
请注意下方配置中的”**网络设备关联**”的配置至少关联一个,用于配置文件对应网络设备。

TYPE=Ethernet 
网络类型=以太网
EthernetNAME=UpLink-ens33
网络显示名称=UpLink-ens33(这个备注的名字只是方便管理用的)
UUID=07773715-e357-4e62-866c-afeb9731f992
**网络设备关联**UUID=(注意参考上访的网卡设备 UUID)
HWADDR=00:0C:29:70:50:5E
**网络设备关联**MAC 地址=00:0C:29:70:50:5E(物理地址)
DEVICE=ens33
**网络设备关联**设备名=ens33
ONBOOT=yes 是否开机加载配置=是

BOOTPROTO=none
网络地址状态=none 不启用协议 (可以视作静态地址),static 是静态地址,dhcp 是自动获取地址
IPADDR=10.1.0.25
IPV4 网络地址=10.1.0.25
PREFIX=24
IPV4 掩码长度=24(表示网络位和位数),另一种表示子网掩码的方式为 NETMASK=255.255.255.0
GATEWAY=10.1.0.1
IPV4 网关地址=10.1.0.1
DEFROUTE=yes
是否为默认 IPV4 网关=是
PEERDNS=no
是否自动获取 IPV4 的 DNS=否 (开启会刷新/etc/resolv.conf)
PEERROUTES=no
是否自动获取 IPV4 网关=否
IPV4_FAILURE_FATAL=no
IPV4 配置失败是否关闭端口=否,(配置失败后不关闭端口, 比如使用 IPV6)
DNS1=1.1.1.1
配置第 1 个 DNS 解析服务器地址 (添加此配置会刷新/etc/resolv.conf)

IPV6INIT=yes
是否启用 IPV6=是
IPV6_AUTOCONF=yes
是否启用 IPV6 的自动配置=是
IPV6ADDR="2001::2001/64"
IPV6ADDR="2001::2002/64"
IPV6 网络地址=(IPV6 可以配置多个 IPV6 地址)
IPV6_DEFROUTE=yes
是否为默认 IPV6 网关=是
IPV6_PEERDNS=yes
是否自动获取 IPV6 的 DNS=是 (开启会刷新/etc/resolv.conf)
IPV6_PEERROUTES=yes
是否自动获取 IPV6 网关=是
IPV6_FAILURE_FATAL=no
IPV6 配置失败是否关闭端口=否,(配置失败后不关闭端口,比如使用 IPV4)
DNS2=2606:4700:4700::1111DNS3=2606:4700:4700::1001
配置第 2 个 DNS 解析服务器地址 (添加此配置会刷新/etc/resolv.conf)

5、后期修订

20181203、应他人需求添加一份自动脚本,推荐 Vicer 的 Linux 脚本地址 [链接脚本如出现问题请联系作者


6、相关链接

CentOS 7 镜像站列表 [ 链接 ]

CentOS 7 RPM 包文件列表 [ 链接 ]

Linux RPM 包信息查询站点 [ 链接 ]

CentOS 7 WIKI  手动安装说明 [ 链接 ]

Vps2Arch Github  脚本地址 [ 链接 ]

NMCLI 网卡管理工具自动生成的配置文件讲解 [  链接 ]

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注