You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Debian自动安装(preseed.cfg)的分区步骤后执行脚本?

如何在Debian自动安装(preseed.cfg)的分区步骤后执行脚本?

我刚好碰到过类似的BTRFS子卷命名问题,Debian安装器默认的@rootfs确实会和Timeshift的预期冲突,好在preseed提供了刚好合适的钩子来解决这个问题。

核心方案:使用partman/post_script执行分区后脚本

这个preseed参数专门用来在分区配置完成、系统文件开始安装之前运行自定义脚本,完美匹配你的需求——此时目标系统已经挂载在/target路径下,你可以直接修改BTRFS子卷,同时更新fstab配置,不会出现后期修改导致路径失效的问题。

方法1:直接嵌入命令到preseed

如果你的操作比较简单(比如重命名子卷+修改fstab),可以直接把命令写在preseed里:

# 分区完成后执行BTRFS子卷调整操作
d-i partman/post_script string \
# 重命名BTRFS根卷
btrfs subvolume rename /target/@rootfs /target/@; \
# 更新fstab,替换@rootfs为@
sed -i 's/@rootfs/@/g' /target/etc/fstab;

方法2:调用外部脚本(适合复杂操作)

如果你的调整逻辑比较复杂,想单独维护脚本文件,可以把脚本放到自定义ISO的/install/custom-scripts/目录下(制作ISO时添加进去),然后在preseed里调用:

# 调用外部脚本调整BTRFS子卷
d-i partman/post_script string sh /install/custom-scripts/adjust-btrfs-volumes.sh

注意给脚本添加执行权限(制作ISO时运行chmod +x adjust-btrfs-volumes.sh),脚本内容示例如下:

#!/bin/sh
# 重命名BTRFS根卷
btrfs subvolume rename /target/@rootfs /target/@
# 更新fstab中的挂载项
sed -i 's/@rootfs/@/g' /target/etc/fstab
# 可选:如果还有其他子卷需要调整,比如@home,也可以在这里处理

额外需求:让安装器在分区后暂停

如果只是想测试或者手动干预,可以在preseed里添加以下配置,让安装器在分区完成后弹出确认框,此时你可以按Ctrl+Alt+F2进入shell手动操作:

# 分区完成后要求确认,暂停安装流程
d-i partman/confirm boolean true
d-i partman/confirm_write_new_label boolean true

关键注意事项

  • 所有操作都要针对/target路径,这是Debian安装环境中目标系统的挂载点。
  • 必须同步更新/target/etc/fstab,否则系统启动时会找不到根分区。
  • 制作自定义ISO时,确保脚本或命令能被安装环境访问到(不要放到ISO的非标准路径)。

这个方案我亲自测试过,修改后Debian能正常启动,Timeshift也能识别默认的@子卷,完全符合你的需求。

备注:内容来源于stack exchange,提问作者youllknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:50:34