使用 Rescue 模式安装 Linux 系统

IT, SeedBox
没有评论

在进行一些独立服务器运维的时候,我们有可能遇到一些后台面板功能不正常,或者后台功能不完整,导致我们无法自定义安装 Linux 系统的时候,就可以通过进入 Rescue 模式重新部署系统。Rescue 模式只涉及到 PXE 网启,通常来说大部分的服务商都会提供,且不容易出现问题。

使用 Rescue 模式安装的基本要求

首先你需要准备好一份网络配置,这通常可以通过老的系统提取,或者直接从 Rescue 模式的 Linux 系统中直接提取,接着你需要准备好一个合适的镜像源,后续的安装都完全依赖这个镜像源,因此一个稳定高速的镜像尤为重要。

在执行安装之前请打开 screen/tmux 等终端复用器以保证安全的安装。

下面以 Debian/Ubuntu 为例进行安装

Step 1

处理分区

安装必要的软件

apt-get update && apt-get install parted mdadm sfdisk -y

假设老旧系统中的重要文件已经完成了备份,我们就可以开始重新分区。

清理掉老旧分区

mdadm --stop /dev/md*
mdadm --zero-superblock /dev/sd*
wipefs --all --force /dev/sd*

以上的操作将会删除原有的所有分区,包括软阵列。

为第一块磁盘创建分区表作为模板

parted -s /dev/sda mklabel gpt
parted -s /dev/sda mkpart primary 1 2M
parted -s /dev/sda mkpart primary 2M 512M
parted -s /dev/sda mkpart primary 512M 8G
parted -s /dev/sda mkpart primary 8G 100%

如果是单盘大于 3TB 需要使用 GPT 分区表。这里我计划使用 500M 空间作为 /boot ,7.5G 空间作为 Swap 剩余空间均分配给 / 你可以在这里使用更为复杂的分区,将/home/data 等分开。

激活分区

parted -s /dev/sda set 1 bios_grub on
parted -s /dev/sda set 2 raid on
parted -s /dev/sda set 3 raid on
parted -s /dev/sda set 4 raid on

启动分区需要激活才可以被正常识别

复制分区表

sfdisk -d /dev/sda | sfdisk /dev/sdb
sfdisk -d /dev/sda | sfdisk /dev/sdc
sfdisk -d /dev/sda | sfdisk /dev/sdd

由于我准备使用软阵列,因此需要完全一致的分区表信息,这里直接使用 sfdisk 即可

新建软阵列

mdadm --create /dev/md1 --level=1 --raid-devices=4 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2 --metadata 1.2 --chunk=256 --bitmap=internal
mdadm --create /dev/md2 --level=1 --raid-devices=4 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3 --metadata 1.2 --chunk=512
mdadm --create /dev/md3 --level=0 --raid-devices=4 /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4 --metadata 1.2 --chunk=512

这里为了安全,将 /bootSwap 空间均设为 Raid 1,其他空间为了速度和容量考虑做 Raid 0 分配给 /

Step 2

安装系统前的准备

创建文件系统

mkfs.ext4 /dev/md1
mkswap /dev/md2
mkfs.ext4 /dev/md3

挂载主分区

mount /dev/md3 /mnt

写入软阵列配置

mkdir -p /mnt/etc/mdadm
/usr/share/mdadm/mkconf > /mnt/etc/mdadm/mdadm.conf

处理自动挂载

my_array=()
while IFS= read -r line; do
my_array+=( "$line" )
done < <( blkid | grep md | awk '{print $1,$2}' | sort )

md1=`echo ${my_array[1]} | awk '{print $2}'`" /boot ext2 rw,relatime,block_validity,barrier,user_xattr,acl 0 2 #"`echo ${my_array[1]} | awk '{print $1}' |cut -f1 -d:`
md2=`echo ${my_array[2]} | awk '{print $2}'`" none swap defaults,pri=1 0 0 #"`echo ${my_array[2]} | awk '{print $1}' |cut -f1 -d:`
md3=`echo ${my_array[3]} | awk '{print $2}'`" / ext4 defaults,errors=remount-ro 0 1 #"`echo ${my_array[3]} | awk '{print $1}' |cut -f1 -d:`

echo 'proc /proc proc defaults 0 0' > /mnt/etc/fstab
echo $md1 >> /mnt/etc/fstab
echo $md2 >> /mnt/etc/fstab
echo $md3 >> /mnt/etc/fstab

Step 3

使用 debootstrap 安装系统

安装 debootstrap

mkdir work
cd work
wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123_all.deb
ar -xf debootstrap_*_all.deb
tar -xf data.tar.gz -C /

安装一个系统

sudo debootstrap --arch=amd64 focal /mnt http://de.archive.ubuntu.com/ubuntu

这里以 ubuntu 20.04 为例。如果安装 Debian 则需要修改安装的版本名称以及下载镜像。 Debian 的下载镜像为

http://deb.debian.org/debian/ ,它可以自动寻找最近的镜像站。

挂载设备

mkdir -p /mnt/{boot,var,tmp,home,proc,sys,dev}
mount /dev/md1 /mnt/boot
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

想要继续安装系统,还需要将剩余的两个分区以及系统的一部分资源挂载到新建的系统中(Linux 系统的设备也是作为文件来对待的)

apt 下载源

cat > /mnt/etc/apt/sources.list <<EOF
deb http://de.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse

#deb http://archive.canonical.com/ubuntu focal partner
#deb-src
EOF

同之前的 debootstrap 安装, apt 下载镜像也会影响后续更新与安装的速度,请选择较快的源。

Step 4

初始化新系统

chroot

chroot /mnt /usr/bin/bash

将 Root 修改为新系统的路径,并使用 bash 作为默认的脚本解释器。

locale

localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
cat >>/etc/default/locale<< EOF
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
EOF

为系统设定一个默认语言。

timezone

dpkg-reconfigure tzdata

为系统配置时区

更新并安装基本的软件

apt-get update && apt-get upgrade -y
apt-get install locales grub2 mdadm udev ssh openssh-server host pciutils vim nano locate systemd dbus keyboard-configuration linux-generic linux-firmware net-tools man -y

设置密码

passwd

允许密码登录 Root *

sed -i 's|#PermitRootLogin prohibit-password|PermitRootLogin yes|g' /etc/ssh/sshd_config

这一步操作仅针对没有密钥登录的状况,更推荐直接写入公钥以登录系统

配置网络

cat >> /etc/netplan/01-netcfg.yaml << EOF
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
      dhcp6: no
      addresses: [aa.bb.cc.dd]
      gateway4: aa.bb.cc.254
      nameservers:
        addresses: [28.8.8.8,8.8.4.4]

    eno2:
      dhcp4: yes
      mtu: 9000
EOF
systemctl enabled-runtime systemd-networkd.service

这个配置是 netplan 使用的格式,如果还在使用 ifconfig 则写法不同,这由你的新系统决定,你可以直接复制 Rescue 模式下系统的网络配置。

修改主机名

hostnamectl set-hostname myserver
cat > /etc/hosts << EOF
127.0.0.1 myserver localhost
::1 myserver localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

Step 5

安装启动项

grub-install /dev/sda
grub-install /dev/sdb
grub-install /dev/sdc
grub-install /dev/sdd
grub-mkconfig
update-grub

你需要至少将 Grub 启动信息安装到其中一个盘,由它引导系统启动。

Step 6

重启系统

exit
reboot

在确认安装配置无误后,即可退出 chroot 并重启

参考

https://gist.github.com/aeris/1872233

https://186526.club/2020/06/ubuntu-smallest/

https://wiki.ubuntu.com/DebootstrapChroot

https://www.andrehotzler.de/en/blog/technology/53-install-debian9-stretch-via-bootstrap-on-a-root-server.html

, , ,
上一篇文章
Cadence Virtuoso 安装小记

发表评论

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

Fill out this field
Fill out this field
请输入正确的邮箱地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

菜单