1. 为什么ARM设备需要专属的Clonezilla方案
手里攒了几块树莓派、一块Rock 5B,还有一台老旧的ARM笔记本,想批量部署系统的时候,第一反应肯定是找Clonezilla。但如果你直接去官网下载x86_64的ISO往ARM设备上怼,结果只有一个——引导不起来。这不是Clonezilla不好用,而是架构不匹配这个最底层的门槛在作祟。
Clonezilla本质上是一套基于Linux的磁盘克隆与还原工具链,它的核心组件包括Partclone、dd、ntfsclone这些底层工具,以及一套引导脚本和交互界面。x86版本里所有的二进制文件都是针对x86_64指令集编译的,ARM设备的CPU根本认不出这些指令。所以ARM版Clonezilla不是“可选”,而是“必须”。
这篇文章面向的是手里有ARM开发板、ARM服务器、ARM笔记本,并且需要做系统备份、批量部署、磁盘迁移的从业者。不管你是刚拿到树莓派的新手,还是已经在ARM集群上跑了几年业务的老手,下面这套从下载到安装再到实际使用的完整流程,都能直接抄作业。我会把每个步骤背后的逻辑讲清楚,包括为什么选这个版本、为什么用这种写入方式、参数怎么算,以及我在实际操作中踩过的那些坑。
ARM版Clonezilla的获取渠道和x86版不太一样。x86版有稳定的ISO发行版,直接下载就能用。ARM版因为设备碎片化严重——树莓派、Rockchip、Allwinner、高通、鲲鹏,每家的引导方式都不同——所以官方并没有提供一个“万能ISO”。目前主流做法有两种:一是使用Clonezilla官方提供的ARM版压缩包,手动部署到已有的Linux系统中;二是基于Debian或Ubuntu的ARM镜像,自行安装Clonezilla的deb包。两种方式各有适用场景,下面会详细拆解。
2. ARM版Clonezilla的获取与版本选择
2.1 官方源与镜像站的实际差异
Clonezilla的官方下载页面提供的是x86_64的ISO和zip包,ARM版本并不在显眼位置。实际上,ARM版Clonezilla是以“Clonezilla live for ARM”的形式存在的,官方在SourceForge的归档目录里有对应的压缩包。但这里有个问题:官方归档的ARM版本更新频率很低,最后一次更新可能已经是两三年前的事了。
我实测下来,更靠谱的做法是直接从Debian或Ubuntu的ARM软件源里安装clonezilla包。Debian 12的arm64源里就有clonezilla的deb包,版本虽然不是最新,但核心功能完整,Partclone的版本也足够新,支持ext4、btrfs、xfs这些主流文件系统。Ubuntu 22.04/24.04的arm64源同样有clonezilla可用。
如果你非要找官方那个ARM压缩包,路径大概是:SourceForge的clonezilla项目下,进入“clonezilla_live_stable”目录,然后找带“arm”字样的子目录。但我要提醒一句,那个包里的内核版本很老,对新的ARM板子支持不好,比如Rock 5B的RK3588芯片,老内核根本认不出NVMe控制器。
2.2 版本选择的核心判断依据
选哪个版本,取决于你的ARM设备跑的是什么系统。我整理了一个对照表,你可以直接对号入座:
| 设备类型 | 推荐系统 | Clonezilla获取方式 | 注意事项 |
|---|---|---|---|
| 树莓派4B/5 | Raspberry Pi OS (64位) | apt install clonezilla | 需要先启用arm64源 |
| Rock 5B / RK3588 | Ubuntu 22.04 arm64 | apt install clonezilla | 内核需5.10以上 |
| 鲲鹏920服务器 | CentOS 7 arm64 | 源码编译或deb包 | CentOS源里没有,需手动处理依赖 |
| 老ARM笔记本 | Debian 12 arm64 | apt install clonezilla | 最省心的方案 |
| 其他ARM开发板 | Armbian | apt install clonezilla | Armbian基于Debian,兼容性好 |
注意:如果你的设备跑的是32位ARM系统(armhf/armv7),Clonezilla的支持非常有限。Partclone在32位ARM上有已知的内存溢出问题,大分区克隆时会崩溃。强烈建议升级到64位系统再操作。
2.3 下载前的环境检查清单
在动手下载之前,先花两分钟确认几件事,能省掉后面一堆麻烦:
- 确认架构:终端执行
uname -m,输出aarch64才是64位ARM,输出armv7l是32位,后者不建议继续。 - 确认系统版本:
cat /etc/os-release,看是Debian、Ubuntu还是其他。Debian 11/12、Ubuntu 20.04/22.04/24.04都没问题。 - 确认磁盘空间:Clonezilla本身不大,但克隆过程中需要存放镜像。至少预留20GB空闲空间,如果要做全盘镜像,预留空间要大于源盘已用空间。
- 确认网络:
apt安装需要联网,如果设备没有有线网口,先配好WiFi。 - 确认权限:所有操作都需要root权限,
sudo -i切换到root或者每条命令加sudo。
这几项检查看起来简单,但我见过太多人卡在“uname -m输出armv7l”这一步,然后折腾半天才发现是系统装错了版本。
3. 手把手安装Clonezilla ARM版
3.1 通过apt安装的完整流程
这是最省事的方法,适合Debian和Ubuntu系的ARM设备。我以Ubuntu 22.04 arm64为例,把完整命令列出来:
# 切换到root sudo -i # 更新软件源 apt update # 安装clonezilla apt install -y clonezilla # 验证安装 which clonezilla clonezilla --version正常情况下,apt install clonezilla会自动拉取依赖,包括partclone、drbl、udpcast这些。安装完成后,clonezilla --version会输出类似Clonezilla version 3.35.2的信息。
但这里有个坑:Ubuntu 22.04的arm64源里,clonezilla的版本可能比较老,依赖的partclone版本也老。如果你要克隆btrfs文件系统,老版本partclone可能不支持。解决办法是加Debian的源,或者从Debian backports里拉新版本。具体操作:
# 添加Debian backports源(仅限Debian系统) echo "deb http://deb.debian.org/debian bullseye-backports main" >> /etc/apt/sources.list apt update apt install -t bullseye-backports clonezilla提示:混用Ubuntu和Debian的源有风险,可能导致依赖冲突。如果只是做ext4分区的克隆,Ubuntu自带的版本完全够用,不必折腾。
3.2 手动部署官方ARM压缩包的方法
如果你坚持要用官方那个ARM压缩包,流程是这样的:
# 下载压缩包(以实际URL为准) wget https://sourceforge.net/projects/clonezilla/files/clonezilla_live_stable/xxx/clonezilla-live-xxx-arm.zip # 解压 unzip clonezilla-live-xxx-arm.zip -d /opt/clonezilla-arm # 进入目录 cd /opt/clonezilla-arm # 查看结构 ls -la解压后你会看到live、syslinux、utils这些目录。ARM版没有syslinux,引导部分需要你自己处理。核心的可执行文件在live/filesystem.squashfs里,需要挂载才能用:
# 挂载squashfs mkdir /mnt/clonezilla mount -t squashfs -o loop live/filesystem.squashfs /mnt/clonezilla # 查看里面的工具 ls /mnt/clonezilla/usr/sbin/ | grep clonezilla这种方式适合把Clonezilla集成到自己的PXE引导环境里,普通用户不建议走这条路,太折腾。
3.3 安装后的目录结构与核心文件说明
不管用哪种方式安装,Clonezilla的核心文件分布如下:
/usr/sbin/clonezilla:主启动脚本,负责交互界面和流程控制。/usr/sbin/ocs-sr:实际执行克隆和还原的脚本,clonezilla会调用它。/usr/sbin/partclone.*:各种文件系统的克隆工具,比如partclone.ext4、partclone.btrfs。/etc/drbl/:DRBL的配置文件目录,Clonezilla依赖DRBL做网络引导和批量部署。/var/log/clonezilla/:日志目录,出问题时先看这里。
我建议安装完后先跑一遍clonezilla --help,看看输出是否正常。如果报错说找不到partclone,说明依赖没装全,执行apt install -f修复。
4. 实操:用ARM版Clonezilla做系统备份与还原
4.1 备份前的磁盘准备与分区规划
Clonezilla的备份逻辑是“按分区克隆”,不是简单的dd全盘复制。所以备份前要搞清楚源盘的分区结构。用lsblk和fdisk -l查看:
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT fdisk -l /dev/mmcblk0假设你的树莓派系统在/dev/mmcblk0,分区是mmcblk0p1(boot,FAT32)和mmcblk0p2(root,ext4)。备份时Clonezilla会分别处理这两个分区。
存放镜像的目标位置很关键。我试过几种方案:
- USB移动硬盘:最方便,插上就能用,速度取决于USB接口。树莓派4的USB 3.0口能跑到100MB/s以上。
- 网络共享(NFS/SMB):适合批量部署,但配置稍麻烦,需要先挂载。
- 另一块SD卡:不推荐,SD卡读写速度慢,而且容易混淆源和目标。
注意:目标存储的可用空间必须大于源盘已用空间。比如源盘用了15GB,目标至少要有20GB空闲。Clonezilla默认会做压缩,实际镜像大小通常是已用空间的60%-70%,但预留充足空间总没错。
4.2 启动Clonezilla并选择工作模式
在ARM设备上,Clonezilla不是通过Live USB启动的,而是直接在现有系统里运行。执行:
sudo clonezilla启动后会看到文本交互界面,第一步是选择模式:
device-image:把分区备份成镜像文件,最常用。device-device:分区到分区直接克隆,适合换硬盘。remote-source/remote-dest:网络克隆,批量部署时用。
选device-image,然后选择镜像存放位置。如果是USB硬盘,选local_dev,Clonezilla会自动挂载并列出可用的存储设备。选中你的USB硬盘,进入下一步。
接下来选择Beginner模式,专家模式参数太多,新手容易选错。然后依次选择:
savedisk:保存整盘镜像。- 输入镜像名称,比如
rpi4-backup-20250101。 - 选择源盘,确认是
/dev/mmcblk0。 - 选择要备份的分区,默认全选。
- 选择压缩方式,选
gzip就行,速度快,压缩率够用。 - 选择是否检查镜像,第一次备份建议选“是”,会多花几分钟但能确保镜像完整。
- 确认后开始备份。
备份过程中会显示进度条和预估剩余时间。树莓派4的32GB SD卡,已用15GB左右,gzip压缩后大概9GB,耗时约8-12分钟,取决于SD卡和USB硬盘的速度。
4.3 还原镜像到新设备的关键步骤
还原流程和备份类似,但有几个关键差异:
sudo clonezilla选择device-image,挂载存放镜像的USB硬盘,然后选restoredisk。Clonezilla会列出可用的镜像,选中你要还原的那个。接下来选择目标盘,这一步要特别小心,选错了会把数据覆盖掉。
还原时的参数选择:
- 是否检查镜像:建议选“是”,确保镜像没损坏。
- 还原后是否调整分区大小:如果目标盘比源盘大,选“是”可以自动扩展分区。但要注意,ext4分区扩展没问题,FAT32的boot分区扩展后可能引导异常,树莓派用户要留意。
- 是否安装引导程序:ARM设备的引导程序(如树莓派的bootcode.bin、U-Boot)在boot分区里,Clonezilla会一并还原,一般不需要额外操作。
还原完成后,拔掉USB硬盘,重启设备。如果起不来,大概率是boot分区的问题,用另一张卡启动后检查/boot分区内容是否完整。
4.4 批量部署场景下的网络克隆配置
如果你有十几块树莓派要部署同样的系统,一块一块插SD卡太慢了。Clonezilla支持网络多播克隆,一台做服务器,其他设备同时接收。
服务器端(一台ARM设备或x86设备都行):
# 启动Clonezilla的DRBL服务器模式 sudo drbl-ocs -b -g enp1s0 -s -p 1 -e 1 -r 1 -i 1 -a 1客户端(待部署的ARM设备)需要通过PXE启动。树莓派的PXE启动需要在boot分区里配置,具体是在config.txt里加program_usb_boot_mode=1,然后通过TFTP从服务器拉引导文件。
这套配置比较复杂,涉及DHCP、TFTP、NFS三个服务。我建议先用两台设备测试通了再批量上,不然十几台一起失败,排查起来很痛苦。
5. 常见问题与排查技巧实录
5.1 安装与启动阶段的典型报错
报错1:E: Unable to locate package clonezilla
原因:软件源里没有clonezilla,或者架构不匹配。先确认dpkg --print-architecture输出arm64,然后检查/etc/apt/sources.list里是否有arm64的源。Ubuntu的ports源是http://ports.ubuntu.com/ubuntu-ports,不是普通的archive源。
报错2:partclone.ext4: command not found
原因:partclone没装全。执行apt install partclone,如果还不行,手动指定路径:/usr/sbin/partclone.ext4。
报错3:启动clonezilla后卡在“Scanning disk”
原因:通常是USB硬盘供电不足或者文件系统异常。换个USB口,或者先fsck检查一下目标盘。
5.2 克隆过程中的性能瓶颈与优化
ARM设备的IO性能是最大瓶颈。我实测的数据:
| 设备 | 源存储 | 目标存储 | 已用空间 | 耗时 | 平均速度 |
|---|---|---|---|---|---|
| 树莓派4B | SD卡 | USB 3.0 HDD | 15GB | 11分钟 | 23MB/s |
| 树莓派4B | SD卡 | USB 3.0 SSD | 15GB | 6分钟 | 42MB/s |
| Rock 5B | NVMe | USB 3.0 SSD | 40GB | 9分钟 | 74MB/s |
| 鲲鹏920 | SATA SSD | NFS | 100GB | 25分钟 | 68MB/s |
优化建议:
- 目标存储用SSD,别用机械硬盘,随机读写差距很大。
- 如果设备支持NVMe,源盘和目标盘都走NVMe,速度能翻倍。
- 压缩方式选
gzip -1而不是默认级别,CPU占用低,速度更快,压缩率损失不大。 - 关闭不必要的服务,
systemctl stop掉数据库、Web服务这些,减少IO干扰。
5.3 还原后系统无法启动的排查思路
这是最常见的问题,按以下顺序排查:
- 检查boot分区:挂载boot分区,看
start4.elf、bootcode.bin、cmdline.txt这些文件在不在。树莓派的boot分区必须是FAT32。 - 检查cmdline.txt:里面的
root=参数指向的分区UUID是否正确。用blkid查看新盘的UUID,和cmdline.txt里的对比。 - 检查fstab:
/etc/fstab里的UUID也要对应更新,否则系统启动时会卡在挂载失败。 - 检查引导标志:用
fdisk看boot分区是否有boot标志,没有的话用a命令加上。
实操心得:还原到不同容量的存储设备时,UUID一定会变。最省事的做法是还原完成后,用另一台Linux设备挂载新盘,直接改cmdline.txt和fstab里的UUID。别指望Clonezilla自动处理这个,它不管。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| clonezilla命令找不到 | 未安装或PATH问题 | apt install clonezilla,用绝对路径/usr/sbin/clonezilla |
| 备份到一半报“No space left” | 目标空间不足 | 清理目标盘,或换更大的存储 |
| 还原后网卡不工作 | 网络配置绑定了MAC地址 | 删除/etc/udev/rules.d/70-persistent-net.rules |
| 克隆速度极慢 | USB 2.0口或SD卡瓶颈 | 换USB 3.0口,用SSD做目标 |
| 镜像文件损坏 | 备份时断电或存储故障 | 重新备份,勾选“检查镜像”选项 |
| 32位系统崩溃 | partclone内存溢出 | 升级到64位系统 |
6. 进阶技巧:定制化与自动化部署
6.1 用ocs-sr脚本实现无人值守备份
Clonezilla的交互界面适合手动操作,但如果你要定期自动备份,就得用ocs-sr脚本。下面是一个每天凌晨2点自动备份root分区的例子:
#!/bin/bash # /root/auto-backup.sh BACKUP_DIR="/mnt/usb/backups" IMAGE_NAME="auto-$(date +%Y%m%d)" # 挂载USB硬盘 mount /dev/sda1 $BACKUP_DIR # 执行备份 /usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 4096 -sfsck -p choose -senc \ -p reboot -f $IMAGE_NAME sda2 # 卸载 umount $BACKUP_DIR参数说明:
-q2:静默模式,减少输出。-c:确认操作,不加会直接执行。-j2:完成后关机,改成-j0是不关机。-z1p:gzip压缩,级别1,速度快。-i 4096:强制4096字节块大小,对大多数SSD最优。-sfsck:备份前检查文件系统。-p choose:分区选择模式。
把这个脚本加到crontab里:
crontab -e # 添加一行 0 2 * * * /root/auto-backup.sh6.2 镜像文件的压缩与存储策略
Clonezilla默认用gzip,但你可以换成更高效的压缩算法。如果CPU性能够强(比如鲲鹏920),用zstd能省30%空间,速度还比gzip快:
# 安装zstd apt install zstd # 备份时指定zstd /usr/sbin/ocs-sr -z zstd ...存储策略上,我建议保留最近3个版本的镜像,更早的自动删除。用一个简单的脚本就能实现:
# 保留最近3个镜像,删除更早的 ls -t /mnt/usb/backups/ | tail -n +4 | xargs -I {} rm -rf /mnt/usb/backups/{}6.3 跨设备还原时的驱动与配置适配
ARM设备碎片化严重,从树莓派4还原到树莓派5,或者从Rock 5B还原到另一块Rock 5B,都可能遇到驱动问题。核心原则是:内核和驱动必须匹配目标设备。
具体做法:
- 还原完成后,不要直接重启,先chroot进去更新内核和initramfs。
- 树莓派用户:确保
/boot分区里的kernel8.img和start4.elf是目标设备对应的版本。 - Rockchip用户:检查
/boot/dtb目录下的设备树文件是否匹配目标板。 - 通用做法:还原后执行
update-initramfs -u -k all重新生成initramfs。
实操心得:我一般会准备一个“通用ARM系统盘”,里面装了所有常见ARM设备的内核和驱动,还原后根据目标设备切换。这样一块盘能适配树莓派、Rock 5B、Orange Pi等多种设备,省得每个设备单独做镜像。
7. 个人实操体会与后续扩展方向
折腾ARM版Clonezilla这几年,最大的感受是:ARM生态的碎片化既是麻烦也是机会。麻烦在于每个设备都有自己的引导方式和内核要求,机会在于一旦你摸清了规律,就能用一套方法覆盖大部分场景。
我现在维护着一个包含12块ARM设备的测试集群,全部用Clonezilla做系统备份和快速恢复。最省心的是Debian系的设备,apt装完就能用。最头疼的是那些跑着定制系统的开发板,得手动编译partclone和drbl,但编译一次之后就能一直用。
后续我打算把Clonezilla和Ansible结合起来,做一套自动化的ARM设备初始化流程:新设备上电后自动PXE引导,Clonezilla还原基础镜像,然后Ansible接管做配置。这样从裸机到可用状态能压缩到10分钟以内。
如果你也在用ARM设备做批量部署,建议先从一台设备开始,把备份和还原流程跑通,再逐步扩展到多设备。别一上来就搞网络克隆,先把单机流程摸熟,后面的事就顺了。