把Ubuntu容器变成可启动的Ubuntu系统
题图:命运石之门 CG
-1.前情提要
最近在对home server做2.5G内网升级和存算分离。之前All in one的proxmox迷你主机铭凡UM773 SE(8c16t 7735HS+32g+1T)需要拆开里面的容器运行在实体机上了。主要托管有三个容器/虚拟机
- openwrt虚拟机:软路由
- windows虚拟机(带核显直通):玩游戏,在线打印服务
- 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.manifest
和linux-generic-hwe-22.04
。
然后挂载你第1步的主分区,这里叫做主目录,chroot进去更新软件包
1 | arch-chroot "$主目录路径" |
3.设置引导
把之前你分出来的EFI分区随便挂载到一个目录(注意不要放进主目录里面),这里叫做esp,然后执行下列命令
1 | grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=ubuntu |
注意ubuntu不能改
4.设置/etc/fstab
先清空/etc/fstab
,退出chroot环境,使用genfstab生成/etc/fstab。生成完后最好检查一遍,如有需要也可以手动修改。
还是archlinux livecd好用啊
1 | exit |
尾声
然后重启就能进入ubuntu系统了,重启还会显示标志性的紫色背景logo进度条图(
剩下的还有设置locale避免裸终端乱码,设置hostname。这些wiki上都有就不再赘述了(