原创文章,转载请注明出处
https://qiedd.com/
0. 简介
之前在腾讯云上尝试了在根分区上使用ZFS
但是我用的是 Aur 源的 zfs-dkms,它更新时需要总 github 下载源码,网络不好导致出错
最后滚挂了内核,导致内核里没有ZFS模块
然后费了点力气才把它救回来
1. 准备
首先我们要知道我们需要做什么
- 我们需要一个完整的系统来安装 zfs 模块
- 在这个系统上,需要chroot到原来的zpool去重新安装内核
- 理论成立,实验开始
然后,我们需要去买一块云硬盘挂载,10G 就够了,用完销毁即可
它会退余额到账户上,然后去账户那里提现就行
2. 开始救援
首先,系统会提示我们进入了 emergency shell,但是我们不要进这个内核,先重启
然后进入 Grub 后,选择第二项,然后进 fallback initramfs
配置网络
腾讯云这里使用的是 dhcp,我们用 udhcp 设置一下
# 启动网口 ip link set eth0 up ip link set lo up # 开启dhcp udhcpc # 设置路由 ip addr add 10.0.20.13/22 dev eth0 ip route add default via 10.0.20.1 dev eth0 # 测试网络 ping 223.5.5.5 -c 4 # 这里网络的dns不能用,很奇怪 nslookup baidu.com 223.5.5.5
下载 Archlinux bootstarp
emergency shell 的命令不是很全,因此我们要进 bootstrap 进行下一步配置
由于网络的dns使用不了,需要从镜像源的 IP 地址下载 bootstrap
我这里用的腾讯云内网源
# 下载 wget http://169.254.0.3/archlinux/iso/2021.12.01/archlinux-bootstrap-2021.12.01-x86_64.tar.gz # 解压 tar xvf archlinux-bootstrap-2021.12.01-x86_64.tar.gz # 复制到mnt cp root.x86_64 mnt -r
挂载 bootstrap
感谢 vps2arch!
https://gitlab.com/drizzt/vps2arch
# 挂载一堆东西 mount -t proc proc -o nosuid,noexec,nodev /mnt/proc mount -t sysfs sys -o nosuid,noexec,nodev,ro /mnt/sys mount -t devtmpfs -o mode=0755,nosuid udev /mnt/dev mkdir -p /mnt/dev/pts /mnt/dev/shm mount -t devpts -o mode=0620,gid=5,nosuid,noexec devpts /mnt/dev/pts mount -t tmpfs -o mode=1777,nosuid,nodev shm /mnt/dev/shm mount -t tmpfs -o nosuid,nodev,mode=0755 run /mnt/run mount -t tmpfs -o mode=1777,strictatime,nodev,nosuid tmp /mnt/tmp # 配置DNS echo "nameserver 183.60.82.98" > /etc/resolv.conf cp -L /etc/resolv.conf /mnt/etc # 挂载一下自己 mount --bind / /mnt/mnt # chroot进bootstrap chroot /mnt # 测试网络 ping baidu.com -c 4 # 配置镜像 sed -i '1i Server = http://mirrors.tencentyun.com/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist pacman -Sy
硬盘分区
# 分区 fdisk /dev/vdb # 格式化硬盘 mkfs.ext4 /dev/vdb1 # 分区示例,grub分区还是能用的,我们直接分个根分区
安装系统
# 挂载硬盘 mkdir re mount /dev/vdb1 re mkdir /re/boot mount /dev/vda1 re/boot # 安装系统 pacman-key --init && pacman-key --populate archlinux pacstrap /re base vim linux-lts linux-lts-headers networkmanager grub openssh arch-install-scripts --noconfirm # 再次挂载系统分区,否则读不到信息 mount -t proc proc -o nosuid,noexec,nodev re/proc mount -t sysfs sys -o nosuid,noexec,nodev,ro re/sys mount -t devtmpfs -o mode=0755,nosuid udev re/dev mkdir -p re/dev/pts re/dev/shm mount -t devpts -o mode=0620,gid=5,nosuid,noexec devpts re/dev/pts mount -t tmpfs -o mode=1777,nosuid,nodev shm re/dev/shm mount -t tmpfs -o nosuid,nodev,mode=0755 run re/run mount -t tmpfs -o mode=1777,strictatime,nodev,nosuid re/tmp # chroot进安装的系统 chroot re # 手动设置一下fstab genfstab用不了 vim /etc/fstab /dev/vdb1 / ext4 rw,relatime 0 0 # 配置grub grub-install /dev/vda grub-mkconfig -o /boot/grub/grub.cfg # 设置root密码 passwd # 一些服务自启动 systemctl enable NetworkManager systemctl enable sshd # 设置允许root登录 PermitRootLogin yes # 差不多了,退出重启 exit exit sync reboot -f
重启后配置
# 添加archzfs源 vim /etc/pacman.conf [archzfs] Server = http://archzfs.com/$repo/x86_64 # 可选镜像源 # archzfs # Origin Server - France # Server = http://archzfs.com/$repo/x86_64 # Mirror - Germany # Server = http://mirror.sum7.eu/archlinux/archzfs/$repo/x86_64 # Mirror - Germany # Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/x86_64 # Mirror - India # Server = https://mirror.in.themindsmaze.com/archzfs/$repo/x86_64 # Mirror - US # Server = https://zxcvfdsa.com/archzfs/$repo/$arch # 安装key pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76 pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76 # 安装zfs pacman -Sy zfs-linux # 加载zfs模块 /sbin/modprobe zfs
配置系统
# 挂载zpoool zpool import zroot -R /mnt # 挂载/boot mount /dev/vda1 /mnt/boot # chroot进原系统 arch-chroot /mnt # 添加Archzfs源 [archzfs] Server = http://mirror.sum7.eu/archlinux/archzfs/$repo/x86_64 # 添加key pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76 pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76 pacman -Syu archlinuxcn-keyring # 重新安装zfs-dkms pacman -Rs zfs-dkms pacman -Sy zfs-dkms # 更新下grub grub-mkconfig -o /boot/grub/grub.cfg # 退出重启 exti umount -R /mnt reboot # 进入原系统后即可删除云硬盘 # 再更新下grub grub-mkconfig -o /boot/grub/grub.cfg
0 条评论