死亡回放
我有一台 Z2 Air Series GK5CP5X 笔记本,大学后就闲置了。但因为性能还行,就一直作为一台服务器在运行,期间也没出啥问题,直到今年过年。
人还在老家,突然发现远程连不上了,由于重要服务不在上面,也没怎么关心。过两天回来一看 XFS: log I/O error -5 就 xfs_repair 了一下。没过几天,又 error 了,只能找块盘重装一下了,刚好在这做一下记录。
先留一个 fastfetch 在这
1 | root@archiso ~ # fastfetch |
安装 | Install
准备
- 进入 Arch Linux LiveCD
- 关闭自动查找镜像
1
systemctl stop reflector.service
- 设置安装镜像
1
2
3tee /etc/pacman.d/mirrorlist <<EOF
Server = https://mirrors.ustc.edu.cn/archlinux/\$repo/os/\$arch
EOF
分区与格盘
- 根据下表对磁盘进行分区
设备 文件系统 大小 挂载点 类型(fdisk) nvme1n1p1 fat 1024MB /boot 1(EFI) nvme1n1p2 xfs ALL /boot 20(Linux) - 设置环境变量,后期有用
1
2export DEV_EFI="/dev/nvme1n1p1"
export DEV_ROOT="/dev/nvme1n1p2" - 格式化磁盘
1
2mkfs.vfat ${DEV_EFI} -n EFI -v
mkfs.xfs ${DEV_ROOT} -f
挂载及安装
- 挂载磁盘
1
2
3mount --mkdir ${DEV_ROOT} /mnt
mount --mkdir ${DEV_EFI} /mnt/boot
df -hT | grep /mnt - 安装系统
1
2
3
4
5
6
7
8
9pacman -Syy
pacman -S archlinux-keyring --noconfirm --needed
pacstrap -K /mnt \
base linux-firmware \
linux-zen linux-zen-headers \
intel-ucode amd-ucode \
nftables sudo vim \
xfsprogs btrfs-progs \
efibootmgr openssh
配置系统
- chroot
1
arch-chroot /mnt
- 设置时区
1
2ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc - 设置地区
1
2
3
4
5
6
7
8sed -i 's/.*\(zh_CN\.UTF-8 UTF-8\).*/\1/g' /etc/locale.gen
sed -i 's/.*\(en_US\.UTF-8 UTF-8\).*/\1/g' /etc/locale.gen
locale-gen
tee /etc/locale.conf <<EOF
LANG=zh_CN.UTF-8
EOF - 配置主机名
1
2
3
4
5
6
7
8
9export HOST_NAME="Turing"
tee /etc/hostname <<EOF
${HOST_NAME}
EOF
tee /etc/hosts <<EOF
127.0.0.1 localhost
::1 localhost
127.0.0.1 ${HOST_NAME}
EOF - 配置网络
1
2
3
4
5
6
7
8
9
10
11
12
13tee /etc/systemd/network/01-dhcp.network <<EOF
[Match]
Name = e*
[Network]
DHCP = yes
EOF
tee /etc/resolv.conf <<EOF
nameserver 119.29.29.29
options edns0 trust-ad
search .
EOF - 修改电源策略,若当前系统已启动,需要重启 logind
1
2
3
4# HandleLidSwitch -> ignore
# HandleLidSwitchExternalPower -> ignore
sed -i 's/^#\?HandleLidSwitch=.*/HandleLidSwitch=ignore/g' /etc/systemd/logind.conf
sed -i 's/^#\?HandleLidSwitchExternalPower=.*/HandleLidSwitchExternalPower=ignore/g' /etc/systemd/logind.conf - 创建用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30export NEW_USER="neko"
/usr/sbin/useradd -m -U -G wheel ${NEW_USER} && passwd ${NEW_USER}
mkdir -p /home/${NEW_USER}/.ssh
tee /home/${NEW_USER}/.ssh/authorized_keys <<EOF
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILDDsjpT5cawNYpT1eWXgDBGqA5WyNe+PF4R/uKTZxgn neko@Hyper
EOF
chown -R ${NEW_USER}:${NEW_USER} /home/${NEW_USER}/.ssh
chmod 700 /home/${NEW_USER}/.ssh
chmod 600 /home/${NEW_USER}/.ssh/authorized_keys
pacman -Sy bash-completion
tee /home/${NEW_USER}/.bashrc <<EOF
[[ \$- != *i* ]] && return
source /usr/share/bash-completion/bash_completion
alias ls='ls -lh --color=auto'
alias grep='grep --color=auto'
alias ip='ip -c'
if [ -n "\$BASH_VERSION" ]; then
export PS1='\[\e[01;32m\]\u@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\\$ '
else
if [ "\$UID" -eq 0 ]; then
export PROMPT='%F{10}%n@%m%f:%F{12}%~%f%# '
else
export PROMPT='%F{10}%n@%m%f:%F{12}%~%f\\$ '
fi
fi
export PS1="\$PS1\[\e]1337;CurrentDir="'\$(pwd)\a\]'
EOF - 修改sudo配置
1
2
3
4tee /etc/sudoers.d/wheel <<EOF
Defaults env_reset,pwfeedback
%wheel ALL=(ALL:ALL) ALL
EOF - 修改 pacman 配置
1
2
3sed -i 's/^#\?Color.*/Color/g' /etc/pacman.conf
sed -i 's/^#\?VerbosePkgLists.*/VerbosePkgLists/g' /etc/pacman.conf
sed -i 's/^#\?ParallelDownloads.*/ParallelDownloads = 8/g' /etc/pacman.conf - 修改 ssh 端口
1
2# Port 51022
sed -i 's/^#\?Port.*/Port 51022/g' /etc/ssh/sshd_config - 启用和禁用服务
1
2systemctl enable systemd-networkd.service
systemctl enable sshd.service
安装引导
1 | mkdir -p /etc/cmdline.d |
1 | efibootmgr -B -b 0000 |
注意事项
由于某些原因,有些地方还可以优化
- 建议将 ESP 挂载到
/efi而不是/boot,否则内核全部会保存到 EFI 分区