保姆级教程:用Rsync和Squashfs把Ubuntu 20.04系统打包成一个可启动的ISO镜像
2026/4/24 11:40:30 网站建设 项目流程

从零构建可启动Ubuntu系统镜像:Rsync与Squashfs实战手册

当我们需要将一台精心配置的Ubuntu服务器完整克隆到多台机器时,直接复制硬盘或重装系统再配置显然效率低下。本文将详细介绍如何通过Rsync和Squashfs将Ubuntu 20.04系统打包成高度压缩的可启动ISO镜像,实现系统环境的快速部署与迁移。

1. 系统备份:Rsync的精准艺术

系统备份是制作镜像的第一步,也是确保数据完整性的关键环节。Rsync作为Linux下最强大的文件同步工具,其优势在于:

  • 增量备份:仅传输变化的部分,大幅节省时间
  • 权限保留:完整保持文件属性和权限结构
  • 断点续传:网络中断后可恢复传输

1.1 基础备份命令解析

执行系统备份前,需要挂载一个有足够空间的目标存储设备。假设我们挂载到/mnt/backup,以下是核心备份命令:

sudo rsync -aAXv / /mnt/backup/ubuntu_backup \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}

参数详解:

  • -a:归档模式,保留所有文件属性
  • -A:保留ACL权限
  • -X:保留扩展属性
  • -v:显示详细传输过程

1.2 高级排除策略

对于开发环境备份,通常需要额外排除以下目录:

--exclude={"/var/cache/*","/var/tmp/*","/var/log/*","/home/*/.cache/*"}

对于Docker用户,建议添加:

--exclude="/var/lib/docker/*"

注意:排除/var/log可能影响某些服务的日志分析,生产环境请谨慎选择

2. Squashfs:极致压缩系统镜像

Squashfs是一种只读的高压缩比文件系统,特别适合系统镜像制作。相比传统tar.gz压缩,它具有:

  • 更高的压缩率:平均可减少60-70%体积
  • 随机访问能力:无需解压整个文件即可访问特定内容
  • 完整性校验:内置数据校验机制

2.1 安装与基础压缩

首先安装必要的工具:

sudo apt update && sudo apt install squashfs-tools

创建压缩镜像的基本命令:

sudo mksquashfs /mnt/backup/ubuntu_backup ubuntu.squashfs -comp xz -b 1M -Xdict-size 100%

关键参数说明:

  • -comp xz:使用xz算法(压缩率最高)
  • -b 1M:设置块大小为1MB
  • -Xdict-size 100%:分配最大字典内存提升压缩率

2.2 高级压缩技巧

对于多核CPU系统,可启用并行压缩:

sudo mksquashfs /mnt/backup/ubuntu_backup ubuntu.squashfs \ -comp xz -b 1M -Xdict-size 100% -processors 8

内存充足的服务器可增加字典大小:

-Xdict-size 200% -Xbcj x86

3. 构建可启动ISO镜像

制作可启动ISO需要以下组件:

  1. 系统内核和initrd
  2. 引导加载程序(如ISOLINUX)
  3. 压缩的系统镜像(squashfs)
  4. 必要的配置文件

3.1 准备ISO目录结构

创建标准目录布局:

mkdir -p iso/{casper,isolinux,boot/grub}

复制必要文件:

cp /boot/vmlinuz-$(uname -r) iso/casper/vmlinuz cp /boot/initrd.img-$(uname -r) iso/casper/initrd cp ubuntu.squashfs iso/casper/filesystem.squashfs

3.2 配置引导加载程序

对于BIOS启动方式,需要ISOLINUX配置:

cat > iso/isolinux/isolinux.cfg <<EOF DEFAULT linux LABEL linux SAY Booting Ubuntu Custom ISO... KERNEL /casper/vmlinuz APPEND initrd=/casper/initrd file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash -- EOF

对于UEFI启动,需额外准备GRUB配置:

cat > iso/boot/grub/grub.cfg <<EOF set timeout=10 menuentry "Ubuntu Custom Install" { linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash -- initrd /casper/initrd } EOF

4. 生成最终ISO镜像

4.1 基础ISO创建命令

使用xorriso工具创建兼容性更好的ISO:

xorriso -as mkisofs \ -iso-level 3 \ -volid "Ubuntu_Custom" \ -output ubuntu-custom.iso \ -eltorito-boot isolinux/isolinux.bin \ -eltorito-catalog isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -eltorito-alt-boot \ -e boot/grub/efi.img \ -no-emul-boot \ -isohybrid-gpt-basdat \ iso/

4.2 处理大文件问题

当squashfs超过4GB时,传统ISO9660格式会报错。解决方案:

  1. 使用UDF格式:
xorriso -as mkisofs ... -udf -iso-level 3 ...
  1. 或者使用更现代的混合ISO创建方式:
xorriso -as mkisofs ... -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin ...

5. 验证与测试

制作完成后,建议通过以下方式验证ISO:

  1. 文件完整性检查
md5sum ubuntu-custom.iso
  1. 虚拟机测试
qemu-system-x86_64 -cdrom ubuntu-custom.iso -m 4096
  1. 实际硬件测试:使用USB启动盘工具写入测试:
sudo dd if=ubuntu-custom.iso of=/dev/sdX bs=4M status=progress

6. 高级定制技巧

6.1 自动化脚本集成

创建自动化构建脚本build_iso.sh

#!/bin/bash set -e # 备份系统 sudo rsync -aAXv / /mnt/backup/ubuntu_backup \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*"} # 创建squashfs sudo mksquashfs /mnt/backup/ubuntu_backup ubuntu.squashfs \ -comp xz -b 1M -Xdict-size 100% -processors $(nproc) # 准备ISO目录 mkdir -p iso/{casper,isolinux,boot/grub} cp /boot/vmlinuz-$(uname -r) iso/casper/vmlinuz # ...其他文件复制命令 # 生成ISO xorriso -as mkisofs ... iso/

6.2 系统首次启动配置

iso/casper目录下创建firstrun.sh脚本,系统首次启动时自动执行:

#!/bin/bash # 设置主机名 hostnamectl set-hostname new-server # 重置SSH主机密钥 rm /etc/ssh/ssh_host_* dpkg-reconfigure openssh-server # 更新系统 apt update && apt upgrade -y

记得在打包ISO前给脚本添加执行权限:

chmod +x iso/casper/firstrun.sh

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询