如何在数据中心机器上安装SmartOS(2025年)
摘要
一份详细的指南,介绍如何在无物理访问或远程KVM的情况下,在数据中心机器上安装SmartOS,并使用VirtualBox创建模板ZPOOL镜像。
<p>如果你使用的是公共数据中心,且没有远程KVM/IPMI或其他远程管理工具,你可能会觉得本文很有用。</p>
<p><a href="https://lobste.rs/s/exv3wo/how_install_smartos_on_datacenter">评论</a></p>
查看缓存全文
缓存时间: 2026/06/02 15:50
# 如何在一台数据中心机器上安装 SmartOS
来源: https://blog.jcea.es/posts/20250209-install_SmartOS.html
这篇文章记录了如何在无需远程 KVM 或物理接触的情况下,在一台数据中心机器上安装 SmartOS。
SmartOS 过去需要 CD、DVD 或 U 盘来启动 Hypervisor(除了像在没有物理访问权限的情况下从硬盘安装/启动 SmartOS 这样的 hack),但自 2020 年底开始,你可以将其安装在 ZFS ZPOOL 中并通过新的 `piadm` 工具直接从中启动。
## 1 创建模板 ZPOOL 镜像
第一步是创建一个 zpool 镜像,以便部署到服务器上:
1. 下载 SmartOS 的**最新版本**(我通常避免使用最新版,而是使用上一个版本,如果最新版未标记为 *toxic*)。
2. 启动 Virtualbox,创建一个新虚拟机,分配 4 GB 的 RAM 和 10 GB 的硬盘。虚拟机 CPU **必须**配置为 64 位。提供一个虚拟 NIC 卡(即网卡)。将 SmartOS 镜像作为虚拟 CD 驱动器。
3. 启动虚拟机。SmartOS 应会进入配置脚本。为大部分选项提供虚拟数据,稍后我们会覆盖。最后,启用从 **zones** zpool 启动,以便在虚拟硬盘上安装 SmartOS。
**警告** 在创建 **zones** zpool 时,**务必**确保它以 `ashift=12` 创建。引导必须兼容 BIOS 和 UEFI 机器。最简单的确保方法是:
1. 当提示 zpool 时,输入 `manual`。
2. 手动创建 zpool:`[root@ /]# zpool create -B -o ashift=12 zones c1t0d0`
3. 退出 *shell* 并继续配置过程。
4. 弹出 SmartOS 虚拟 CD 并重启虚拟机。确保它从虚拟硬盘启动。
5. 我们必须销毁数据集 `zones/dump` 并重新创建为合适的尺寸。合适的尺寸是多少?这很难说,取决于 RAM 大小,但不是线性的。SmartOS 配置脚本在重置后使用 `dumpadm -e` 并将其大小乘以 2。在这个 SmartOS 镜像中,我将使用 4 GB。对于 64 GB 的机器,SmartOS 似乎需要大约 1.5 GB,所以我们目前相当安全。
```
[root@ /]# dumpadm -d none
[root@ /]# zfs destroy zones/dump
[root@ /]# zfs create -V 4G zones/dump
```
6. 确保机器能在 BIOS 和 UEFI 下启动:
```
[root@ /]# piadm bootable zones
==> BIOS and UEFI
```
7. 关闭虚拟机,然后用 Linux(例如 Debian Live CD)启动。
8. 将带有 SmartOS 安装的 10 GB 虚拟硬盘镜像上传到你的云存储或文件托管服务。由于大部分虚拟硬盘是空的,压缩会非常有效。
9. 现在你可以销毁虚拟机了,不再需要它。
刚刚创建的镜像将作为模板,用于部署任意数量的远程数据中心机器。
> 我已经为你完成了这一步。你可以使用我在 https://download.jcea.es/tamiza/dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz 提供的 SmartOS 硬盘镜像。压缩后仅 180 MB。**root** 密码是 **jcea2025**。其 SHA256 哈希值为 `f7ae2a59d58737a01850c9cb8696bbfe68b0a4b37d21b322005d076d054da562`。
> **警告** 不要忘记更改默认密码!
## 2 覆盖并配置远程数据中心机器
1. 在远程数据中心租用一台机器。SmartOS 内核是 Illumos,一个 Solaris 衍生系统,与大多数服务器硬件兼容。我建议你使用 Intel NIC,性能好且支持良好,但其他许多流行品牌也受支持。
2. 以 **Rescue** 模式启动机器。这通常是一个 Linux 环境。
3. 在 **Rescue** 模式下访问远程机器。这通常运行在 ramdisk 上,不会触碰硬盘。
4. 下载你准备好的 SmartOS 镜像。这通常是一个 ramdisk,但你可能拥有大量可用 RAM,且压缩后的 SmartOS 硬盘镜像很小。你可以使用我的 SmartOS 硬盘镜像:https://download.jcea.es/tamiza/dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz。其 SHA256 哈希值为 `f7ae2a59d58737a01850c9cb8696bbfe68b0a4b37d21b322005d076d054da562`。随意使用。例如,你可以这样做:
```
root@RESCUE:~# wget https://download.jcea.es/tamiza/dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz
root@RESCUE:~# sha256sum dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz
f7ae2a59d58737a01850c9cb8696bbfe68b0a4b37d21b322005d076d054da562 dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz
```
5. 销毁硬盘上的任何 GPT 标签。你可以使用 `gdisk /dev/sda`。按 `x` 进入专家模式,按 `z` 删除磁盘上的所有 GPT 痕迹。对所有服务器硬盘执行此操作。
**警告** **注意:** 此步骤将**销毁**远程硬盘上的内容。请确保这是你想要的。
6. 用镜像覆盖硬盘。例如,执行以下操作:
```
root@RESCUE:~# xzcat dump_SmartOS_10GB_20250124T134639Z_pass_jcea2025.xz | \
dd of=/dev/sda bs=65536 status=progress
root@RESCUE:~# partprobe
```
注意,此命令直接将镜像解压到硬盘上,无需先解压。这很棒,因为速度更快,而且你不会在 Rescue ramdisk 中用完 RAM。
**警告** **注意:** 此步骤将**销毁**远程硬盘上的内容。请确保这是你想要的。
7. 我的参考数据中心 Linux **Rescue** 系统没有预装 ZFS,但会在首次使用时安装:
```
root@RESCUE:~# zpool
The Hetzner Rescue System does not come with preinstalled ZFS support, however, we will attempt to compile and install the latest release for you.
Please read the information below thoroughly before entering any response.
ATTENTION
This script will attempt to install the current OpenZFS release which is available in the OpenZFS git repository to the Rescue System.
If this script fails, do not contact Hetzner Support, as it is provided AS-IS and Hetzner will not support the installation or usage of OpenZFS due to License incompatiblity (see below).
Due to github.com limitations, this script only works via IPv4.
Licenses of OpenZFS and Linux are incompatible
OpenZFS is licensed under the Common Development and Distribution License (CDDL), and the Linux kernel is licensed under the GNU General Public License Version 2 (GPL-2). While both are free open source licenses they are restrictive licenses. The combination of them causes problems because it prevents using pieces of code exclusively available under one license with pieces of code exclusively available under the other in the same binary.
Please be aware that distributing of the binaries may lead to infringing.
Press y to accept this.
```
按 `y` 并等待几分钟。
8. 如果已经安装 ZFS,导入你刚刚写入硬盘的 zpool:
```
root@RESCUE:~# zpool import zones -f -R /mnt
```
**注意** 导入 zpool 时记得使用 **root** 选项:`-R`。
9. 确保 zpool 的 ashift 为 12(4096 字节):
```
root@RESCUE:~# zpool get ashift zones
NAME PROPERTY VALUE SOURCE
zones ashift 12 local
```
10. 检查 zpool:
```
root@RESCUE:~# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zones 9.50G 1.57G 7.93G - 3.63T 0% 16% 1.00x ONLINE /mnt
root@RESCUE:~# zpool status
pool: zones
state: ONLINE
status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details.
config:
NAME STATE READ WRITE CKSUM
zones ONLINE 0 0 0
sda ONLINE 0 0 0
errors: No known data errors
```
11. 所有 SmartOS hypervisor 配置都位于 `zones/usbkey` 数据集中。这个数据集被 SmartOS 在 zpool 中标记为 `legacy`,因此不会被自动挂载。你必须手动挂载它:
```
root@RESCUE:~# mkdir /tmp/x
root@RESCUE:~# mount -t zfs zones/usbkey /tmp/x
root@RESCUE:~# cd /tmp/x
root@RESCUE:/tmp/x#
```
12. 在那里配置 `config` 文件,包含必要的详细信息:IP、NIC MAC 地址、子网掩码、主机名、默认网关、DNS 域名等。你可以从 Rescue Linux 中获取这些细节。你需要知道如何配置 SmartOS hypervisor。例如,请参考:
- [全局区域的持久化配置](https://docs.smartos.org/persistent-configuration-for-the-global-zone/)
- [额外配置选项](https://docs.smartos.org/extra-configuration-options/)
你可以在该目录中添加 SSH 公钥,并提供一个包含新 `root` 密码的新 shadow 文件。注意你的编辑。如果出错,SmartOS 将无法启动。
13. 完成后,重启!
## 3 首次启动 SmartOS!
1. 首次启动时,你**必须**做的第一件事是更改 **root** 密码并使其持久化。这并不简单,因为 SmartOS hypervisor 是不可变的。你可以在[更改全局区域中的 root 密码](https://docs.smartos.org/changing-the-root-password-in-the-global-zone/)中查看必要步骤(以及为什么需要这些步骤)。登录你的新 SmartOS 机器并执行:
```
[root@xXx ~]# umount /etc/shadow
[root@xXx ~]# cp /usbkey/shadow /etc/shadow
[root@xXx ~]# passwd root
New Password:
Re-enter new Password:
passwd: password successfully changed for root
[root@xXx ~]# cp /etc/shadow /usbkey/shadow
```
2. 将当前大小为 10 GB 的 zpool 扩展到整个硬盘:
```
[root@xXx ~]# zpool online -e zones c1t0d0
[root@xXx ~]# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zones 3,64T 4,58G 3,63T - - 0% 0% 1.00x ONLINE -
```
3. 添加镜像硬盘:
```
[root@xXx ~]# zpool attach zones c1t0d0 c1t1d0
Make sure to wait until resilver is done before rebooting.
```
目前几乎没有数据,因此 ZFS 重新同步很快:
```
[root@xXx ~]# zpool status
pool: zones
state: ONLINE
scan: resilvered 4,58G in 0 days 00:00:29 with 0 errors on Mon Feb 10 08:38:07 2025
config:
NAME STATE READ WRITE CKSUM
zones ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
errors: No known data errors
```
4. 确保我们可以从镜像硬盘启动,以备不时之需:
```
[root@xXx ~]# piadm bootable -r zones
```
5. 如果你使用的 SmartOS 镜像比较旧,考虑使用 `piadm` 更新已安装的 SmartOS hypervisor。
6. 当你完成配置折腾后,重启以确保一切正常,然后享受你的新 SmartOS 机器吧!
## 4 值得注意的事项
- 如果你要租用新机器,请确保支持**救援模式**,通常大多数数据中心都提供,但某些低端提供商可能只提供软 RAID 或其他限制。
- 在覆盖硬盘之前,**务必先**从远程机器获取网络配置(IP、MAC、网关等)。否则,你的 SmartOS 安装将无法联网,且无法远程访问。
- 如果你使用我的镜像,**立即更改 root 密码**。我的镜像密码是 `jcea2025`,已在网络上公开!按照上面的说明使其持久化。
- 进行镜像覆盖时,确保救援系统有足够的 RAM 来下载和解压镜像。我的镜像很小,但如果你使用更大的镜像,请注意。
- 如果你在安装过程中遇到问题,参考 [SmartOS 文档](https://docs.smartos.org/) 是很好的资源。
相似文章
帮助数据中心以更少的硬件实现更高性能
麻省理工学院的研究人员开发了Sandook,这是一种基于软件的系统,通过同时解决SSD的三个变异性来源,将数据中心存储性能提升近一倍,效率远超传统方法。
如何在太空中建造数据中心
探索在太空中建造数据中心的概念与挑战,以实现更高的数据处理能力和更低的延迟。
我的2025年高端Linux PC 🐧
一篇关于在2025年组装高端Linux PC的详细博客文章,包括组件选择、设置以及故障排除有问题的Intel CPU。
我的家庭数据中心
用户描述了他们的家庭数据中心设置,包含多个用于机器学习实验、训练和智能体编程的高端系统。
Kioxia与Dell在纤薄2RU服务器中塞入10 PB存储
Kioxia和Dell合作,利用40块Kioxia LC9 245.76 TB SSD,打造出一款拥有近10 PB全闪存存储的2RU服务器,支持高密度AI基础设施。