# Ubuntu-Server系统部署 **Repository Path**: spoto/UbuntuServer ## Basic Information - **Project Name**: Ubuntu-Server系统部署 - **Description**: 本教程旨在提供一份从零开始的、详尽的服务器部署指南。我们将以一个纯净的Ubuntu Server系统为起点,逐步将其打造成一台功能强大、性能卓越的多功能家庭服务器。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 7 - **Created**: 2025-09-12 - **Last Updated**: 2025-10-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 从零到英雄:打造你的终极AI、NAS与虚拟化母舰 ## 引言 ### 项目愿景 本教程旨在提供一份从零开始的、详尽的服务器部署指南。我们将以一个纯净的Ubuntu Server系统为起点,逐步将其打造成一台功能强大、性能卓越的多功能家庭服务器。这台服务器将集多种核心能力于一身:作为家庭数据中心,它将通过ZFS提供企业级的安全存储(NAS);作为影音娱乐中枢,它将提供高性能的媒体服务;作为灵活的实验平台,它将支持KVM全系统虚拟化;而最激动人心的是,它将成为一台7x24小时待命的AI推理引擎,充分释放多GPU的澎湃算力。 ### 技术栈概览 本次部署将围绕以下经过精心挑选的核心技术构建,它们均以其稳定性、高性能和强大的社区支持而著称: * **操作系统**: Ubuntu Server 22.04 LTS * **文件系统与存储**: ZFS (RAID-Z) * **网络文件共享**: Samba (SMB/CIFS) * **应用容器化**: Docker Engine & Portainer * **虚拟化平台**: KVM & Cockpit * **GPU计算平台**: AMD ROCm (Radeon Open Compute) * **AI应用**: Ollama ### 本指南面向的读者 本教程专为具备Linux命令行基础操作知识,并渴望构建一套复杂、多层级、遵循业界最佳实践的家庭服务器的用户而设计。我们将深入每个技术细节,确保您不仅能成功复现整个搭建过程,更能深刻理解其底层原理。 --- ## 第零部分:系统安装 — Ubuntu Server 22.04 LTS 基础 一个稳定、纯净的操作系统是一切服务的基石。我们将从制作系统启动盘开始,完成Ubuntu Server 22.04 LTS的安装。 ### 准备工作 1. **获取系统镜像**: 前往Ubuntu官方网站,下载`Ubuntu Server 22.04.4 LTS`或更新的LTS版本ISO镜像文件。 2. **制作启动盘**: 使用Rufus、Balena Etcher或Ventoy等工具,将下载的ISO镜像写入一个U盘。 3. **最佳实践:独立的系统盘**: 强烈建议为操作系统准备一块独立的、小容量的高速驱动器(如SATA SSD或NVMe SSD)。将操作系统与数据存储池物理分离,可以极大地提升系统响应速度,并简化未来的管理、备份与恢复流程,是构建可靠服务器的黄金法则。 ### 关键安装步骤 将制作好的U盘插入服务器,开机并从U盘引导,进入Ubuntu安装程序。以下是需要特别注意的关键配置步骤: * **语言 (Language)**: 建议选择`English`,以避免在终端环境中可能出现的字符编码问题。 * **键盘布局 (Keyboard layout)**: 保持默认的`English (US)`即可。 * **网络配置 (Network configuration)**: 确保服务器已通过网线连接到您的路由器。安装程序会自动通过DHCP获取IP地址,这是后续进行远程管理的前提。 * **存储布局 (Storage configuration)**: 这是**至关重要**的一步。 * 选择 `Custom storage layout`(自定义存储布局)。 * 在磁盘列表中,精确地选择您为操作系统准备的那块独立SSD。 * 将其格式化为`ext4`文件系统,并挂载到根目录`/`。 * **请务必不要对计划用于ZFS阵列的大容量数据硬盘进行任何操作。** * **用户配置 (Profile setup)**: 创建您的管理员账户。例如,用户名为`spoto`,并设置一个足够强度的密码。这个账户将是您未来通过SSH登录和管理服务器的唯一身份。 * **安装OpenSSH服务 (Install OpenSSH server)**: **此项为必选项。** 务必勾选`Install OpenSSH server`。这将允许您在系统安装完成后,从局域网内的任何电脑通过SSH远程连接服务器,实现“无头”(Headless)管理,不再需要为服务器长期连接显示器和键盘。 * **预装软件 (Featured server snaps)**: 为保持系统纯净,此处我们**不选择任何预装的snap软件包**。直接按`Tab`键跳转到`Done`并回车。 完成以上步骤后,安装程序将自动进行。待进度条走完,系统会提示您移除U盘并重启。 ### 首次启动与远程接入 服务器重启后,您会看到一个命令行的登录提示符。至此,物理层面的操作已经结束。现在,您需要找到服务器的IP地址(通常可以在路由器的管理界面中的DHCP客户端列表里找到),然后回到您的工作电脑上,打开终端或SSH客户端,使用以下命令进行连接: Bash ```plain ssh spoto@ ``` 输入您在安装时设置的密码,成功登录后,您就正式开启了这台服务器的配置之旅。 --- ## 第一部分:存储基石 — ZFS部署 ZFS不仅仅是一个文件系统,它是一个集成了逻辑卷管理和文件系统的先进存储平台,以其无与伦比的数据完整性、内置RAID功能和强大的快照机制而闻名。 ### 第一步:安装ZFS工具包 首先,更新系统软件包列表并安装`zfsutils-linux`,这个软件包包含了在Linux上管理ZFS所需的所有命令行工具 。   Bash ```plain sudo apt update && sudo apt upgrade -y sudo apt install -y zfsutils-linux ``` ### 第二步:精确识别硬盘 在创建存储池之前,必须准确地识别出用于数据存储的硬盘。 Bash ```plain lsblk -o name,size,model ``` 这个命令会清晰地列出所有块设备及其名称、容量和型号,方便您确认目标硬盘 。   ### 第三步:创建`raidz`存储池 创建ZFS存储池(zpool)是核心步骤。然而,直接使用`/dev/sdX`这样的设备名是一个常见的、但存在严重隐患的做法。Linux内核在每次启动时动态分配这些名称,顺序可能会因为硬件改动或启动时序的微小变化而改变,这会导致ZFS存储池导入失败,使您的数据面临风险。 专业的做法是使用持久化的设备标识符。这些标识符基于硬盘的物理属性(如序列号),永远不会改变。 **查找持久化ID**: Bash ```plain ls -la /dev/disk/by-id/ ``` 1. 这个命令会列出一系列指向实际设备(如`../../sdb`)的符号链接。请选择那些以`ata-`或`nvme-`开头的、包含了您的硬盘型号和序列号的、并且不含`-partX`后缀的完整ID。 **使用持久化ID创建存储池**: 假设您有四块8TB的硬盘,准备创建一个`raidz`(类似RAID 5,允许单盘故障)存储池,并将其命名为`tank`。命令如下(请将示例ID替换为您自己的硬盘ID): Bash ```plain sudo zpool create -f tank raidz \ /dev/disk/by-id/ata-WDC_WD80EFZZ-68BTXN0_SERIAL1 \ /dev/disk/by-id/ata-WDC_WD80EFZZ-68BTXN0_SERIAL2 \ /dev/disk/by-id/ata-WDC_WD80EFZZ-68BTXN0_SERIAL3 \ /dev/disk/by-id/ata-WDC_WD80EFZZ-68BTXN0_SERIAL4 ``` 1. 下表详细解释了该命令的各个组成部分: |参数|描述| |:----|:----| |sudo zpool create|以管理员权限执行创建新ZFS存储池的命令。| |-f|**强制 (Force)**。如果目标硬盘上存在残留的分区表或文件系统,此参数将强制覆盖。**请仅在确认硬盘数据不再需要时使用。**| |tank|为新创建的存储池指定的名称。您可以自定义,tank是一个常用名。| |raidz|指定存储池的RAID级别。raidz即RAID-Z1,提供单盘冗余。对于4块硬盘,总可用容量约为3块硬盘之和。| |/dev/disk/by-id/...|构成存储池的成员硬盘列表。使用持久化ID是确保系统长期稳定运行的最佳实践。| 导出到 Google 表格 ### 第四步:检查存储池状态 创建完成后,立即使用`zpool status`命令检查其健康状况 。   Bash ```plain sudo zpool status ``` 一个健康的存储池会显示`state: ONLINE`以及`errors: No known data errors`。这是您需要关注的核心指标。 ### 第五步:使用数据集与快照进行灵活管理 ZFS的强大之处在于其“数据集”(Dataset)概念。数据集可以被看作是智能的子目录或独立的文件系统,可以对每个数据集单独设置压缩、配额、加密等属性。 **创建数据集**: 我们将为Docker的持久化数据和媒体文件分别创建数据集。 Bash ```plain sudo zfs create tank/docker sudo zfs create tank/media ``` **ZFS的“后悔药”——快照**: 快照是ZFS文件系统在特定时间点的只读镜像。创建快照几乎是瞬时完成的,且初始不占用额外空间。它为您提供了一个强大的回滚机制。 Bash ```plain sudo zfs snapshot tank/docker@initial-setup ``` 1. 这个命令为`tank/docker`数据集创建了一个名为`initial-setup`的快照。如果后续配置出错,可以轻松回滚到这个状态。 --- ## 第二部分:网络枢纽 — SMB文件共享 Samba是在Linux系统上实现SMB/CIFS协议的标准软件,它能让您的服务器无缝地与Windows、macOS等客户端进行文件共享。 ### 第一步:安装与配置Samba Bash ```plain sudo apt install -y samba sudo nano /etc/samba/smb.conf ``` 使用`nano`编辑器打开主配置文件,在文件末尾添加以下内容,来定义一个名为`[media]`的网络共享,它将指向我们之前创建的`/tank/media`数据集 。   Ini, TOML ```plain [media] comment = Server Media Files path = /tank/media browseable = yes writable = yes guest ok = no read only = no create mask = 0664 directory mask = 0775 ``` 下表解释了每个配置项的含义: |指令|值|描述| |:----|:----|:----| |[media]|-|定义了共享的名称,这将是网络上可见的文件夹名。| |comment|Server Media Files|对该共享的描述性注释。| |path|/tank/media|指定服务器上被共享的目录的绝对路径。| |browseable|yes|允许此共享在网络邻居中被浏览到。| |writable|yes|允许授权用户在此共享中创建和修改文件。| |guest ok|no|禁止匿名访问,用户必须提供有效的用户名和密码。| |read only|no|与writable = yes功能重叠,但明确表示该共享是可写的。| |create mask|0664|为新创建的文件设置默认权限,即-rw-rw-r--。| |directory mask|0775|为新创建的目录设置默认权限,即drwxrwxr-x。| 导出到 Google 表格 ### 第二步:管理用户与权限 Samba使用独立于Linux系统的密码数据库。我们需要将系统用户添加到Samba中,并为其设置一个专用的访问密码。 **添加Samba用户**: 为我们之前创建的`spoto`用户设置Samba密码。 Bash ```plain sudo smbpasswd -a spoto ``` 1. 系统会提示您输入并确认该用户的Samba密码。 **设置文件系统权限**: 确保`spoto`用户对共享目录`/tank/media`拥有读写权限。 Bash ```plain sudo chown -R spoto:spoto /tank/media ``` ### 第三步:应用配置并测试 重启Samba服务使所有配置生效。 Bash ```plain sudo systemctl restart smbd ``` 现在,您可以从局域网内的任何一台Windows电脑,在文件资源管理器地址栏输入`\\\media`,或在macOS的Finder中使用`Command+K`并输入`smb:///media`,然后使用`spoto`用户名和您刚刚设置的Samba密码进行访问。 --- ## 第三部分:性能核心 — 安装AMD ROCm驱动 ROCm (Radeon Open Compute) 是AMD官方的开源GPU计算平台,是让Ollama等AI应用能够利用AMD GPU进行加速运算的必要驱动和软件栈。安装过程必须严谨,遵循官方推荐流程。 ### 第一步:系统更新与依赖准备 首先,确保系统是最新状态,并安装一些必要的辅助工具。 Bash ```plain sudo apt update && sudo apt upgrade -y sudo apt install -y wget gpg ``` ### 第二步:添加AMD官方GPG密钥与软件源 GPU驱动这类底层软件,版本兼容性至关重要。直接从AMD的官方软件仓库安装,是确保获取最新、最稳定版本的唯一可靠方法 。脚本中简单的   `apt install rocm`是不完整的,正确的步骤如下: **导入AMD的GPG公钥**,用于验证软件包的真实性: Bash ```plain wget -qO - https://repo.radeon.com/rocm/rocm.gpg.key | \ gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null ``` **将ROCm的软件仓库地址添加到系统的apt源列表**。请注意,命令中的`6.1.2`是编写本教程时的稳定版本号,您应访问AMD ROCm官方文档,获取当前最新的版本号进行替换。对于Ubuntu 22.04 (`jammy`),命令如下: Bash ```plain echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.1.2/ jammy main" \ ``` | sudo tee /etc/apt/sources.list.d/rocm.list ``` ### 第三步:安装ROCm核心软件包 添加完软件源后,刷新软件包列表并安装`rocm`这个元软件包,它会自动处理所有相关的依赖项。 Bash ```plain sudo apt update sudo apt install -y rocm ``` ### 第四步:配置用户权限 为了让普通用户(非root)能够调用GPU进行计算和渲染,必须将其加入`render`和`video`用户组。这是一个非常关键且容易被忽略的步骤 。   Bash ```plain sudo usermod -a -G render,video $LOGNAME ``` `$LOGNAME`是一个环境变量,会自动替换为当前登录的用户名(例如`spoto`)。 ### 第五步:重启并验证安装 驱动和权限的变更需要一次完整的系统重启才能完全生效。**此步骤不可省略** 。   Bash ```plain sudo reboot ``` 服务器重启后,重新通过SSH登录,然后使用以下两个命令来验证ROCm是否安装成功: 1. `rocminfo`: 这个命令会输出大量关于系统HSA(异构系统架构)代理的详细信息,如果能看到您的GPU被列出,说明驱动已初步识别硬件。 `rocm-smi`: 这是AMD版的`nvidia-smi`,是最终的验证工具。 Bash ```plain rocm-smi ``` 如果`rocm-smi`成功执行并输出一个清晰的表格,列出了您所有的AMD GPU(例如三张MI50)、它们的温度、显存使用情况和功耗,那么恭喜您,最关键的驱动部分已经完美配置成功! --- ## 第四部分:应用层 — Docker与Portainer Docker是当今最流行的容器化技术,它能将应用及其所有依赖打包到一个轻量、可移植的容器中,彻底解决了“在我电脑上能跑”的难题。Portainer则为Docker提供了一个美观、强大的Web管理界面。 ### 第一步:安装Docker引擎 与ROCm驱动一样,我们应该使用Docker官方的软件源来安装Docker引擎(`docker-ce`),而不是使用Ubuntu自带仓库中可能过时的`docker.io`版本 。   **设置Docker官方**`apt`**仓库**: 这个过程包含添加GPG密钥和软件源地址,请依次执行以下命令: Bash ```plain # 安装依赖包 sudo apt-get install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings # 添加Docker的GPG密钥 sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # 添加仓库到apt源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ``` **安装Docker引擎**: 执行以下命令安装最新版的Docker Community Edition及其相关组件 。   Bash ```plain sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` ### 第二步:Docker安装后配置 默认情况下,执行`docker`命令需要`sudo`权限。为了方便日常使用,我们将当前用户添加到`docker`用户组 。   Bash ```plain sudo usermod -aG docker $LOGNAME ``` 为了让用户组的变更在当前SSH会话中立即生效,而无需重新登录,可以执行`newgrp`命令: Bash ```plain newgrp docker ``` ### 第三步:部署Portainer管理面板 一行命令即可部署Portainer。 Bash ```plain docker volume create portainer_data docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest ``` 这条命令中的`-v /var/run/docker.sock:/var/run/docker.sock`是关键,它将主机上的Docker守护进程套接字文件映射到Portainer容器内部,从而授权Portainer管理主机上的所有Docker活动 。   部署完成后,通过浏览器访问`https://:9443`,即可进入Portainer的初始化设置界面。 --- ## 第五部分:Docker实战 — 部署Jellyfin并开启硬件转码 Jellyfin是一款优秀的开源媒体服务器。结合我们强大的MI50计算卡,它可以实现高性能的4K视频硬件转码,让您在任何设备上都能流畅观影。 ### 第一步:在ZFS上准备存储目录 在`tank/media`数据集中为不同类型的媒体创建子目录,并在`tank/docker`数据集中为Jellyfin的配置文件创建一个专用目录。 Bash ```plain mkdir -p /tank/media/movies mkdir -p /tank/media/tvshows mkdir -p /tank/docker/jellyfin_config ``` 将Docker应用的配置文件(持久化数据)存放在ZFS数据集上,有一个巨大的优势:您可以利用ZFS快照功能为应用配置提供强大的安全保障。例如,在升级Jellyfin容器版本之前,执行`sudo zfs snapshot tank/docker/jellyfin_config@before-update`。如果新版本出现问题,只需一条`rollback`命令即可将所有配置瞬间恢复到升级前的状态。 ### 第二步:部署Jellyfin容器 执行以下`docker run`命令来启动Jellyfin。 Bash ```plain docker run -d \ --name jellyfin \ -p 8096:8096 \ -v /tank/docker/jellyfin_config:/config \ -v /tank/media:/media \ --device=/dev/dri:/dev/dri \ --restart=unless-stopped \ jellyfin/jellyfin ``` 下表对这条命令的关键参数进行了解析: |标志|参数|描述| |:----|:----|:----| |docker run -d|-|以分离(后台)模式运行容器。| |--name jellyfin|-|为容器指定一个易于管理的名称。| |-p 8096:8096|-|将主机的8096端口映射到容器的8096端口,这是Jellyfin的默认Web端口。| |-v...:/config|/tank/docker/jellyfin_config:/config|**数据持久化**。将ZFS上的配置目录映射到容器内部,确保Jellyfin的设置和数据库在容器重启或重建后依然存在。| |-v...:/media|/tank/media:/media|将ZFS上的媒体库目录映射到容器内部,让Jellyfin能够扫描和索引您的电影、剧集。| |--device=/dev/dri:/dev/dri|-|**硬件加速核心**。将主机的DRI(直接渲染基础架构)设备传递给容器,这使得Jellyfin能够调用AMD GPU的VCN(Video Core Next)硬件单元进行视频的硬件解码和编码。| |--restart=unless-stopped|-|确保容器在服务器启动或意外崩溃后自动重启,除非被手动停止。| |jellyfin/jellyfin|-|指定要使用的官方Jellyfin Docker镜像。| 导出到 Google 表格 ### 第三步:初始化Jellyfin 容器启动后,在浏览器中访问`http://:8096`,跟随设置向导完成初始化。在添加媒体库时,请选择容器内部的路径,例如`/media/movies`和`/media/tvshows`。 --- ## 第六部分:虚拟化平台 — KVM与Cockpit KVM (Kernel-based Virtual Machine) 是内建于Linux内核的原生虚拟化解决方案,性能卓越。Cockpit则是一个现代化的网页版服务器管理工具,通过其`cockpit-machines`插件,可以非常方便地图形化创建和管理KVM虚拟机。 ### 第一步:安装KVM及相关套件 执行以下命令安装KVM、libvirt守护进程、virt-manager(一个桌面端的虚拟机管理器,可选)以及桥接网络工具 。   Bash ```plain sudo apt install -y qemu-kvm libvirt-daemon-system virt-manager bridge-utils ``` ### 第二步:安装Cockpit Web控制台 安装Cockpit及其虚拟机管理插件 。   Bash ```plain sudo apt install -y cockpit cockpit-machines ``` ### 第三步:配置虚拟网络与用户权限 **启动默认虚拟网络**: KVM默认会创建一个名为`default`的NAT网络,对于多数场景已经足够。我们需确保它已启动并设置为开机自启。 Bash ```plain sudo virsh net-start default sudo virsh net-autostart default sudo virsh net-list --all ``` **添加用户到权限组**: 这是一个脚本中遗漏但至关重要的步骤。将您的管理用户加入`libvirt`和`kvm`用户组,这样您就可以通过Cockpit或`virt-manager`管理虚拟机,而无需为每个操作都输入密码 。   Bash ```plain sudo usermod -aG libvirt,kvm $LOGNAME ``` 1. 同样,您可能需要重新登录SSH会话或使用`newgrp`来使此变更生效。 ### 第四步:访问Cockpit界面 在浏览器中打开`http://:9090`,使用您的服务器用户名(`spoto`)和密码登录。在左侧导航栏找到“Virtual Machines”选项卡,即可开始您的虚拟机创建之旅。 --- ## 第七部分:AI释放 — Ollama与ROCm加速 Ollama是一个极简的工具,它让在本地运行开源大语言模型(LLM)变得前所未有的简单。我们的目标是配置其Docker容器,使其能够充分利用AMD GPU的ROCm计算能力,实现高速推理。 ### 第一步:部署支持ROCm的Ollama容器 部署Ollama的关键在于将正确的GPU设备映射到容器内部。与Jellyfin不同,AI计算需要访问GPU的通用计算单元,而不仅仅是视频处理单元。 * `--device=/dev/dri`:这个设备主要负责图形和视频相关的渲染任务,Jellyfin使用它进行硬件转码。 * `--device=/dev/kfd`:`kfd` (Kernel Fusion Driver) 是ROCm用于HSA异构计算的设备接口,是AI计算负载调度和执行的核心。 因此,为了让Ollama正常工作,我们需要同时传递这两个设备 。   执行以下命令部署Ollama: Bash ```plain docker run -d \ --device=/dev/kfd \ --device=/dev/dri \ -v ollama:/root/.ollama \ -p 11434:11434 \ --name ollama \ --restart=unless-stopped \ ollama/ollama:rocm ``` 下表解析了这条命令的核心参数: |标志|参数|描述| |:----|:----|:----| |docker run -d|-|以分离(后台)模式运行容器。| |--device=/dev/kfd|-|**计算核心**。传递内核融合驱动设备,这是ROCm进行AI/HPC工作负载所必需的。| |--device=/dev/dri|-|传递直接渲染架构设备,确保全面的图形/视频兼容性,部分模型可能需要。| |-v ollama:/root/.ollama|-|创建一个名为ollama的Docker托管卷,用于持久化存储下载的大模型文件。| |-p 11434:11434|-|映射Ollama的默认API端口到主机。| |--name ollama|-|为容器指定一个易于管理的名称。| |ollama/ollama:rocm|-|**至关重要**。明确指定使用带有:rocm标签的镜像,该镜像内置了ROCm所需的库,而非标准的CPU版本镜像。| 导出到 Google 表格 ### 第二步:运行大语言模型 使用`docker exec`命令进入正在运行的Ollama容器,并执行`ollama`命令来下载并运行一个模型。这里以`gemma2:9b`为例,这是一个性能和尺寸均衡的优秀模型。 Bash ```plain docker exec -it ollama ollama run gemma2:9b ``` Ollama会自动下载模型文件,首次运行需要一些时间。下载完成后,您会看到一个提示符,可以开始与模型进行对话。 ### 第三步:实时验证GPU加速 为了亲眼见证GPU加速的效果,请打开**第二个**到服务器的SSH连接。在第一个终端中与模型交互的同时,在第二个终端中运行以下命令: Bash ```plain watch rocm-smi ``` `watch`命令会每隔2秒刷新一次`rocm-smi`的输出。您将清晰地观察到: * 当模型加载时,其中一张GPU的**VRAM(显存)占用率**会急剧上升,因为整个模型被加载到了显存中。 * 当您输入问题,模型开始生成回答时,该GPU的**GPU Use%(利用率)**和**Pwr(功耗)**会显著飙升。 这个现象无可辩驳地证明了,从硬件、ROCm驱动、Docker容器到Ollama应用的整个技术栈已经完美打通,您的AI推理服务器正在全速运行! --- ## 结论 ### 使命达成 至此,这台二手服务器已经脱胎换骨。从一堆高性价比的硬件,我们构建了一台功能全面、性能强大的现代化服务器。它现在是: * 一个由ZFS守护的、数据安全可靠的**网络附加存储(NAS)**。 * 一个通过Samba协议,为全家设备提供服务的**文件共享中心**。 * 一个具备硬件转码能力的、强大的**Jellyfin媒体服务器**。 * 一个可以随时创建和销毁测试环境的**KVM虚拟化平台**。 * 一台利用多GPU并行计算,7x24小时待命的**本地AI推理服务器**。 ### Homelab的旅程 将硬件组装起来只是第一步,真正的乐趣在于通过软件配置,赋予这台机器灵魂。这个从零开始的完整部署过程,充满了挑战,但也充满了探索和学习的乐趣。希望这份详尽的教程,能为您在打造自己的家庭实验室(Homelab)之路上,提供坚实的帮助和启发。 鼓励您在此基础上继续探索,部署更多有趣的应用容器,或者在KVM中尝试不同的操作系统。您的家庭数据与计算中心,拥有无限可能。