把Ubuntu容器变成可启动的Ubuntu系统

题图:命运石之门 CG

-1.前情提要

最近在对home server做2.5G内网升级和存算分离。之前All in one的proxmox迷你主机铭凡UM773 SE(8c16t 7735HS+32g+1T)需要拆开里面的容器运行在实体机上了。主要托管有三个容器/虚拟机

  1. openwrt虚拟机:软路由
  2. windows虚拟机(带核显直通):玩游戏,在线打印服务
  3. ubuntu容器:跑其他的所有服务

proxmox主系统只有一些网络文件系统的处理工作和cloudflared,迁移起来很方便。我对软路由的功能用的不是很多,BE5100(wifi7单口2.5G路由器)和S1100W-8GT-1SX-S(2.5G交换机)可以完美替换openwrt软路由。唯一头疼的就是这个ubuntu容器了。

0.备份容器

使用livecd环境备份容器内文件系统。我是用proxmox使用lxc托管ubuntu容器的,直接拉lvm文件系统就行了,rsync/rclone都是很好用的工具。

当然直接dd做磁盘镜像也更好,注意备份到另一块硬盘上。

注意容器内uid在容器外是不识别的,备份最好在容器内进行。我懒得起proxmox直接就chmod 777了(逃

1.磁盘分区和文件拷贝

在livecd环境操作磁盘。UEFI电脑分两个区就行了,一个EFI,剩下主分区用ext4/btrfs随意。注意EFI分区最好不要过小。

然后把备份文件拷贝到主分区里面。

2.安装内核和grub软件包

这一步操作我是在archlinux livecd环境进行的,arch-chroot脚本能省很多功夫。

先连上网,有线网直接连就行了,无线网请翻阅Installation guide。在ubuntu-release或者ubuntu-old-release中找的你的发行版下的desktop或者server镜像同名的manifest文件,下载搜索linux-generic-*-[发行版版本],比如我的就是ubuntu-23.04-beta-desktop-amd64.manifestlinux-generic-hwe-22.04

然后挂载你第1步的主分区,这里叫做主目录,chroot进去更新软件包

1
2
arch-chroot "$主目录路径"
apt update -y && apt upgrade -y && apt install -y linux-generic-hwe-22.04 grub

3.设置引导

把之前你分出来的EFI分区随便挂载到一个目录(注意不要放进主目录里面),这里叫做esp,然后执行下列命令

1
2
grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=ubuntu
update-grub

注意ubuntu不能改

4.设置/etc/fstab

先清空/etc/fstab,退出chroot环境,使用genfstab生成/etc/fstab。生成完后最好检查一遍,如有需要也可以手动修改。

还是archlinux livecd好用啊

1
2
exit
genfstab -U / >> "$主目录路径/etc/fstab"

尾声

然后重启就能进入ubuntu系统了,重启还会显示标志性的紫色背景logo进度条图(

剩下的还有设置locale避免裸终端乱码,设置hostname。这些wiki上都有就不再赘述了(