type
Post
status
Published
date
Mar 27, 2026
slug
piserver
summary
记录Pi服务器的诞生
tags
摸鱼
category
摸鱼日志
icon
password
心血来潮搭建了一个树莓派服务器
📝 怎么能这么闲
从部署Agent到服务器
不是为什么突然这么闲,你难道没什么别的事情要做了吗
不知道哪一天,看到了可以在树莓派上部署openclaw,感觉很心动,而且我新的电脑到了,但是不舍得常开用来跑代码,所以想找个别的地方部署openclaw,结果就是一冲动下单了树莓派。其实后来发现不如收一个二手i5的pc,性能好还便宜。
坎坷的运输过程
现在都还没到,草啊
本来在Rapid那买的,但是只给我发了散热器还有充电器,麻,现在还没到,只好又在Pihub下单了。什么冤大头。但是pihub隔天就到了,royal mail 24h 好!
系统选择
默认推荐:Raspberry Pi OS (64-bit) Lite — Claude
在LLM老师的推荐下先装了没有桌面的lite的系统,再用现有的电脑ssh进去配置剩下的东西,总的来说在sd卡烧录好image之后插入pi,然后等待启动。差不多3-5分钟之后就直接ssh上了,总的来说非常方便,就系统来说没什么难点。接下来就是思考要搭载什么服务了,最想尝试的还是现在大热的(虽然已经不是很热了)线LLM agent,后面可能在ssd到之后尝试一下私有云盘之类的服务。
挂载SSD
ssd和pi先后到达
由于pi没有M.2的卡槽,单买一个M.2 PiHat死贵,不如直接买一个移动ssd硬盘,然后USB挂载,感觉体验也差不多,如果pi荒废了,这个硬盘还能用来干点别的。总的开始尝试挂载和部分服务的迁移。
首先是在pi上挂载SSD,挂到了mnt下面,以后主要数据就存上面了。
下载并安装docker
docker好方便,手残的我也能无痛安装管理乱七八糟的程序了
后面加装了portainer,更是方便,直接在webui上编辑docker的配置文件和部署应用,总的来说让我的管理更加方便了,搞小服务器好好玩。下一步是做点自己的小应用!Vibe coding 启动!
挂载PCIe固态硬盘
虽说不知道为什么要给pi挂载那么大的存贮空间
1. lsblk —— 列出系统里所有的块设备
mmcblk0:Pi 的 SD 卡/eMMC,树状结构下面挂了两个分区mmcblk0p1(启动分区,挂载在/boot/firmware)和mmcblk0p2(根分区,挂载在/)
zram0:压缩内存做的虚拟交换分区(swap),不是物理硬盘
nvme0n1:你的 PCIe SSD,disk类型,1.9T,但下面没有任何子项——说明它上面没有分区
- TYPE 列:
disk是整块物理盘,part是分区,loop是回环设备(通常是某个文件伪装成的块设备)
这一步的目的:确认系统内核认到了这块 SSD,并且看它设备名叫什么(
nvme0n1)。2. sudo lsblk -f —— 查看文件系统信息
f参数会多显示 FSTYPE(文件系统类型)、UUID、剩余空间等。
这一行完全空白——没有 FSTYPE,没有 UUID。这说明这块盘上根本没有格式化过,是"生盘"。对比
mmcblk0p2 那行显示了 ext4 和 UUID,说明那是已经格式化过的分区。这一步的目的:判断这块盘有没有现成的文件系统/数据,避免误格式化了有用的盘。
3. sudo fdisk -l /dev/nvme0n1 —— 查看分区表详情
fdisk -l 会显示这块盘的容量、扇区大小,以及分区表类型(Disklabel type)。你这里显示是 dos(也就是老式的 MBR 分区表),但下面没有列出任何分区——说明虽然盘上残留了一个空的 MBR 分区表结构,但里面一个分区都没建。这一步的目的:双重确认盘是空的,同时看看当前用的是哪种分区表格式(MBR 还是 GPT),为下一步做准备。
4. sudo parted /dev/nvme0n1 --script mklabel gpt —— 创建 GPT 分区表
parted 是分区工具。这条命令的意思是:在这块盘上创建一个全新的 GPT(GUID Partition Table)分区表,覆盖掉原来那个老的 MBR/dos 分区表。-script表示非交互模式,直接执行,不用一步步确认
- 为什么用 GPT 不用 MBR:GPT 支持 2TB 以上的盘(MBR 分区表理论上限是 2TB,你这块是 1.9T 已经很接近上限了),而且现代 Linux 系统基本都用 GPT
这一步会清空这块盘上原有的分区表结构(虽然你这块盘本来也没数据)。
5. sudo parted /dev/nvme0n1 --script mkpart primary ext4 0% 100% —— 创建分区
意思是:在这块盘上创建一个"主分区"(primary),从 0% 到 100%,也就是占满整块盘,预期格式是 ext4(这里 parted 只是标记一下类型,真正格式化还得下一步的
mkfs)。执行完之后再跑
lsblk 就会看到多出一个 nvme0n1p1 子项。6. sudo mkfs.ext4 /dev/nvme0n1p1 —— 格式化分区
mkfs = "make filesystem"。这条命令是在刚才建好的分区 nvme0n1p1 上写入 ext4 文件系统的元数据结构(inode 表、superblock 等)。之前 parted 只是划了个"空地",这一步才是真正把这块空间变成 Linux 能读写文件的格式。ext4 是 Linux 上最常用、最成熟稳定的文件系统,适合作为数据盘。
7. sudo mkdir -p /mnt/data —— 创建挂载点
Linux 里访问一个存储设备,得先把它"挂"到某个已存在的目录上(这个目录叫挂载点/mount point)。
/mnt/data 就是你选的这个空目录,-p 表示如果父目录不存在也一并创建。这一步本身不涉及硬盘,只是在系统根文件系统里建一个空文件夹作为"接口"。
8. sudo mount /dev/nvme0n1p1 /mnt/data —— 手动挂载
把格式化好的分区
nvme0n1p1 挂载到 /mnt/data 目录上。挂载之后,你往 /mnt/data 里读写文件,实际上就是在读写这块 SSD。这是临时挂载——重启后会失效,因为系统不知道要自动挂载它,所以后面才需要写 fstab。
9. sudo blkid /dev/nvme0n1p1 —— 获取 UUID
每个格式化过的分区都会有一个全局唯一的 UUID(通用唯一识别码),用来标识这个分区。你拿到的:
为什么要用 UUID 而不是
/dev/nvme0n1p1 这种设备名?因为设备名可能会变(比如你插了另一块盘,顺序就可能变成 nvme1n1),但 UUID 是写死在文件系统里的,永远不变,更可靠。10. 写入 /etc/fstab
fstab = "file systems table",是系统开机时自动挂载哪些分区的配置文件。这一行的字段依次是:字段 | 含义 |
UUID=... | 要挂载的分区,用 UUID 标识 |
/mnt/data | 挂载到哪个目录 |
ext4 | 文件系统类型 |
defaults,nofail | 挂载选项: defaults 是标准默认选项组合;nofail 表示如果开机时这块盘没插好/识别不到,系统不要因此卡住报错,正常继续启动 |
0 | dump 备份标志,现在基本不用,写 0 |
2 | fsck 开机检查顺序,根分区是 1,其他分区一般写 2(先检查根分区,再检查这个) |
11. sudo umount + sudo mount -a —— 验证 fstab
umount 先卸载掉手动挂载的那次,然后 mount -a 会读取 /etc/fstab 里所有配置的条目并挂载。如果这时候能成功挂上,说明你写的 fstab 那一行语法和 UUID 都没问题,重启也一定没问题——相当于提前模拟了一次开机挂载过程,不用真的重启就能验证。12. sudo systemctl daemon-reload
现代 Debian/systemd 系统里,
/etc/fstab 的改动其实会被 systemd 转换成对应的挂载单元(mount unit)。如果你改了 fstab 但没让 systemd 重新读取,systemd 内存里还是旧版本的配置。这条命令让 systemd 重新扫描并加载最新的 fstab 内容,确保下次开机(以及现在)systemd 对这个挂载点的认知和文件是一致的。整个流程串起来就是:认设备 → 确认是空盘 → 建分区表 → 建分区 → 格式化 → 建目录 → 挂载测试 → 拿UUID → 写永久配置 → 验证 → 通知systemd。
🤗 To be continue…
📎 参考文章
修好了评论区,虽然后端在27年会停运,但是可以先用着。
- 作者:HWB‘Blog
- 链接:https://hwb-233.com/article/piserver
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

