嵌入式系统分区调整与 Tailscale 部署文档
一、操作概述
本文档详细描述嵌入式系统中调整 SD 卡分区、挂载指定目录,并部署 Tailscale 守护进程的完整流程,适用于基于/dev/mmcblk1存储设备的嵌入式 Linux 系统(如 Jetson 系列)。
二、分区调整操作
2.1 分区创建(fdisk)
通过fdisk工具对/dev/mmcblk1(SD 卡 / EMMC 设备)进行分区创建,新增 2 个主分区:
mmcblk1p3:大小 1GB,用于挂载/opt目录mmcblk1p4:起始扇区 2277376,结束扇区默认(剩余全部空间),用于挂载/userdata/jetkvm/images目录
执行命令:
bash
运行
# 进入fdisk分区工具
fdisk /dev/mmcblk1
# 创建p3分区(1GB主分区)
n # 新建分区
p # 主分区
3 # 分区编号3
# 起始扇区按回车(默认)
+1g # 分区大小1GB
# 创建p4分区(剩余空间主分区)
n # 新建分区
p # 主分区
4 # 分区编号4
2277376 # 起始扇区(指定值)
# 结束扇区按回车(默认剩余全部空间)
w # 保存分区表并退出
# 查看分区结果
fdisk -l
# 重启系统使分区表生效
reboot2.2 分区格式化
将新建的 p3、p4 分区格式化为 ext4 文件系统:
bash
运行
mkfs.ext4 /dev/mmcblk1p3
mkfs.ext4 /dev/mmcblk1p42.3 配置开机自动挂载
修改/etc/fstab文件,添加分区挂载规则,确保系统启动时自动挂载:
bash
运行
# 编辑fstab文件
nano /etc/fstab
# 添加以下两行(挂载规则)
/dev/mmcblk1p3 /opt ext4 defaults 0 2
/dev/mmcblk1p4 /userdata/jetkvm/images ext4 defaults 0 2
# 立即生效挂载配置(无需重启)
mount -a2.4 注释原有挂载项
编辑/etc/init.d/S11partition文件,注释掉/userdata/jetkvm/images的原有挂载逻辑(避免冲突):
bash
运行
nano /etc/init.d/S11partition
# 找到对应挂载行,在行首添加#注释
# 示例:# mount /dev/xxx /userdata/jetkvm/images三、Tailscale 部署
3.1 准备文件
- 将 Tailscale 程序包上传至
/opt目录(需提前下载对应架构的 Tailscale 二进制包) 赋予程序执行权限:
bash运行
chmod u+x /opt/tailscale*上传 SSL 证书(pem 格式)至
/opt目录,并创建证书目录:
bash运行
mkdir -p /etc/ssl/certs # 可将pem证书复制到/etc/ssl/certs目录(若需要) # cp /opt/*.pem /etc/ssl/certs/
3.2 创建 Tailscale 守护进程启动脚本
创建/etc/init.d/S99tailscaled脚本,实现 Tailscale 服务的开机自启、启停管理(使用默认数据目录和端口):
脚本内容:
bash
运行
#!/bin/sh
### BEGIN INIT INFO
# Provides: tailscaled
# Required-Start: $network $local_fs
# Required-Stop: $network $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop tailscaled daemon
### END INIT INFO
DAEMON="/opt/tailscaled"
DAEMON_NAME="tailscaled"
PIDFILE="/var/run/$DAEMON_NAME.pid"
# 构建完整的启动命令(使用默认数据目录和端口)
DAEMON_OPTS=""
start() {
printf "Starting %s: " "$DAEMON_NAME"
start-stop-daemon -S -q -b -m -p "$PIDFILE" -x "$DAEMON" -- $DAEMON_OPTS
status=$?
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
return "$status"
}
stop() {
printf "Stopping %s: " "$DAEMON_NAME"
start-stop-daemon -K -q -p "$PIDFILE"
status=$?
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
return "$status"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $?赋予脚本执行权限:
bash
运行
chmod +x /etc/init.d/S99tailscaled3.3 启动 Tailscale 服务
bash
运行
# 启动服务
/etc/init.d/S99tailscaled start
# 重启服务(如需)
/etc/init.d/S99tailscaled restart
# 停止服务(如需)
/etc/init.d/S99tailscaled stop四、关键说明
- 分区操作风险:
fdisk操作会修改分区表,执行前请备份重要数据;重启系统是为了让新分区表生效。 fstab 挂载规则:
defaults:默认挂载选项(rw, suid, dev, exec, auto, nouser, async)- 第 5 列
0:不进行 dump 备份 - 第 6 列
2:开机时 fsck 检查顺序(根分区为 1,其他分区为 2)
Tailscale 配置:
- 移除了自定义
TAILSCALE_DATA_DIR和TAILSCALE_PORT,使用 Tailscale 默认配置(默认数据目录为/var/lib/tailscale,默认端口为 41641)。 - 启动脚本使用
start-stop-daemon管理进程,符合嵌入式 Linux 系统的服务管理规范。
- 移除了自定义
- 脚本命名规则:
/etc/init.d/下的脚本以S开头表示启动脚本,数字99表示启动优先级(数字越大,启动越晚),确保网络等依赖服务启动后再启动 Tailscale。
五、验证操作
验证分区挂载:
bash运行
df -h # 查看/opt和/userdata/jetkvm/images是否正常挂载验证 Tailscale 进程:
bash运行
ps -ef | grep tailscaled # 查看进程是否运行 netstat -tulpn | grep 41641 # 查看端口是否监听(如需)- 验证开机自启:重启系统后,再次执行上述命令,确认分区挂载和 Tailscale 进程正常。