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年会停运,但是可以先用着。
平安证券实习摸鱼起源-Blog搭建
Loading...