近期看到FreeBSD 从入门到跑路,里面有一章节讲到:云服务器安装 FreeBSD(基于腾讯云轻量云、阿里云轻量应用服务器)
结合它的方案六,针对普通的ESC服务器,进行了以下的实践操作。主要是手里没有多余的轻量服务器,所以没有进行轻量服务器的测试。
先上结论:
针对云服务器,当前的问题是有些云没有提供FreeBSD系统,有些云提供的FreeBSD系统版本太低。
本次实践解决的问题就是:在提供FreeBSD系统云供应商的云服务器里面,快速安装高版本FreeBSD!本次实践使用了阿里云ESC云服务器。
当然FreeBSD系统本身也支持使用freebsd-update升级系统,但是那个升级太慢,远不如拿到新系统后直接重装新版本更快捷更方便!
先下载img镜像
首先下载FreeBSD安装盘的img镜像。 img镜像是用来制作usb启动盘的,在云服务器里可以多采购一块云空间硬盘,然后通过镜像制作安装盘。
wget https://mirrors.aliyun.com/freebsd/releases/ISO-IMAGES/14.3/FreeBSD-14.3-RELEASE-amd64-memstick.img
# 阿里云内部要用内部站,否则下载会慢
wget http://mirrors.cloud.aliyuncs.com/freebsd/releases/ISO-IMAGES/14.3/FreeBSD-14.3-RELEASE-amd64-memstick.img
注意,#阿里云内部要用内部站http://mirrors.cloud.aliyuncs.com,否则下载镜像文件会很慢。
查看数据盘
在阿里云采购一块数据盘,大约2G即可。当然阿里云最小的盘是20G,买买买。
在阿里云这样添加一块数据盘很方便,这样就不用再去按照手册里从原来的盘里划分一部分空间出来制作安装盘,操作简化很多。主要是FreeBSD系统里减小空间有点麻烦。
先用gpart show看默认的系统盘
gpart show
=> 34 83886006 vtbd0 GPT (40G)
34 122 1 freebsd-boot (61K)
156 66584 2 efi (33M)
66740 2097152 3 freebsd-swap (1.0G)
2163892 81722148 4 freebsd-ufs (39G)
查看数据盘是vtbd1
怎么知道数据盘的盘符呢?我们看到当前的系统盘是vtbd0,那么ls /dev查看/dev目录
ls /dev/
acpi% bpf0@ devctl% full% kbd1@ midistat% pfil% stderr@ ttyu0.init% ttyv5% ufssuspend% usbctl% vtcon/
apm% console% devctl2% geom.ctl% kbdmux0% mlx5ctl% pts/ stdin@ ttyu0.lock% ttyv6% ugen0.1@ vtbd0% xpt0%
apmctl% consolectl% devstat% gpt/ klog% music0% pvclock% stdout@ ttyv0% ttyv7% ugen0.2@ vtbd0p1% zero%
atkbd0% ctty% diskid/ gptid/ kmem% netdump% random% sysmouse% ttyv1% ttyv8% uhid0% vtbd0p2%
audit% cuau0% efi% input/ log@ netmap% reroot/ tcp_log% ttyv2% ttyv9% uinput% vtbd0p3%
auditpipe% cuau0.init% fd/ io% mdctl% null% sequencer0% ttyV0.1% ttyv3% ttyva% urandom@ vtbd0p4%
bpf% cuau0.lock% fido% kbd0@ mem% pci% sndstat% ttyu0% ttyv4% ttyvb% usb/ vtbd1%
可以看到数据盘是vtbd1
启动镜像写入数据盘
dd if=FreeBSD-14.3-RELEASE-amd64-memstick.img of=/dev/vtbd1 bs=1M conv=sync
写完之后使用fdisk看看/dev/vtbd1
fdisk /dev/vtbd1
可以看到写入的内容
fdisk /dev/vtbd1
******* Working on device /dev/vtbd1 *******
parameters extracted from in-core disklabel are:
cylinders=41610 heads=16 sectors/track=63 (1008 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=41610 heads=16 sectors/track=63 (1008 blks/cyl)
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 239 (0xef),(EFI System Partition)
start 1, size 66584 (32 Meg), flag 0
beg: cyl 1023/ head 255/ sector 63;
end: cyl 1023/ head 255/ sector 63
The data for partition 2 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 66585, size 2962128 (1446 Meg), flag 80 (active)
beg: cyl 1023/ head 255/ sector 63;
end: cyl 1023/ head 255/ sector 63
The data for partition 3 is:
<UNUSED>
The data for partition 4 is:
<UNUSED>
证明启动制作成功!
学习方案六
对于支持在线调整的文件系统,可压缩出约 2 GB 的未分配空间,创建一个 FAT32 分区,再将 img 镜像
dd写入该分区。在 GRUB 中,使用
chainloader +1指向dd操作后生成的 BSD EFI 系统分区。需注意,一般的云服务器默认可能使用文件作为交换空间(swapfile)?或者,也可以尝试直接将 img 镜像dd到交换分区。对于无法压缩分区的情况,可以临时购买并挂载一块数据盘,将镜像
dd到数据盘。然后通过数据盘上的安装程序进行系统安装。安装完成后卸载并删除数据盘即可。潜在的问题在于 img 镜像可能无法正确识别分区,可能需要手动指定根文件系统。
部分发行版并不使用 GRUB,此时需要考虑是安装 GRUB,还是直接在 systemd-boot 等引导程序上处理,以及其可行性如何。
gpart resize 怎么调整freebsd的分区大小,比如把根目录减小2G,新创建一个分区 df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/gpt/rootfs 39572780 6508932 29898028 18% / devfs 1 0 1 0% /dev /dev/gpt/efiesp 32764 657 32107 2% /boot/efi
尝试方案六:配置引导
由于用的是FreeBSD系统,所以没法安装方案六里面操作。
FreeBSD 使用的是 BSD 自研的 boot loader,并非 GRUB,因此上述文档不适用于 FreeBSD 系统。
在 FreeBSD 中,若需将引导设备从 vtbd0 改为 vtbd1,通常应修改以下文件之一:
/boot/loader.conf:可添加或修改如下行以指定根设备:
kern.rootdev="vtbd1p2"
(其中 p2 为实际根分区编号,需根据 gpart show 确认)
/etc/fstab:确保根文件系统挂载项指向正确的设备,例如:
/dev/vtbd1p2 / ufs rw 1 1
FreeBSD 的引导过程不依赖 /boot/grub/ 下的配置文件,因此无需修改 GRUB 相关内容。操作前请确认 vtbd1 上已安装完整的 FreeBSD 系统并包含 /boot 目录。
这样方法没通过
进入boot目录
boot /dev/vtbd1p2:/boot/kernel/kernel
不管用
这里有空再去重新写下引导,这里写的应该不对,因为我后来看到引导的应该是s2而不是p2:
boot /dev/vtbd1s2:/boot/kernel/kernel
以后有空再去做实验吧。
尝试方案六:手动引导
在系统引导后,不进入FreeBSD,而是进入boot命令行模式。
查看lsdev
disk0:
diskop1:FreeBSD boot
disk0p2:EFI
disk0p3:FreeBSD swap
disk0p4:FreeBSD UFS
disk1:
disk1s1:Unknown
disk1s2: FreeBSD
disk1s2a:FreeBSD UFS
这样我们就知道了,数据盘的结构是disk1 .
现在的问题是,
lsdev 是这样的,怎么在boot从disk1 盘启动
手工启动
进入boot后,执行
set currdev=disk1s2a
load /boot/kernel/kernel
boot
进入安装引导画面
进入install画面

尝试使用zfs系统,碰到这个报错:

看来不能用zfs,要用ufs (吐槽一下,FreeBSD不能用zfs绝对是重大损失)
安装完成,重启,哇,真的是FreeBSD14.3

原来的系统是FreeBSD14.1,而且阿里云只支持老的系统:

总结
以前在云系统使用FreeBSD,都是要供应商有这个系统才能用,而且是供应商有什么版本,就只能安装什么版本。
这次实践是,只要有了一个FreeBSD系统,就可以自己用云盘创建启动盘,来安装任意版本的FreeBSD系统。
当前不想再去折腾了,以后会再去试试怎么在云供应商没有提供FreeBSD系统的情况下,安装FreeBSD系统。