MCorePI Mine: Cloning Workers

By tjohnson , 21 May, 2025

Cloning & Customizing a Pi Zero SD Card on Your Debian Host

This guide shows how to clone a compressed Raspberry Pi Zero image (pizero_clone.img.gz) straight to a target disk (/dev/sdc) with dd, then edit the hostname, static IP, and SSH settings before you ever boot the card.


1 Β· Safe & Effective dd Command

gunzip -c /home/t/pizero_clone.img.gz | sudo dd of=/dev/sdc bs=4M status=progress conv=fsync
  • gunzip -c — streams the image to stdout, saving disk space.
  • dd of=/dev/sdc — writes directly to the entire SD card.
  • bs=4M — larger block size for faster throughput.
  • status=progress — live progress counter.
  • conv=fsync — flushes buffers for extra safety.
⚠ Double-check that /dev/sdc is the correct device!
Run lsblk or fdisk -l first. Everything on the target disk will be overwritten.

When dd exits, flush any remaining buffers:

sync

2 Β· Mount the New Card & Edit Configs

2.1 Identify Partitions

lsblk /dev/sdc

You’ll usually see:

  • /dev/sdc1 β†’ boot (FAT32)
  • /dev/sdc2 β†’ rootfs (ext4)

2.2 Mount Boot & Root

sudo mkdir -p /mnt/piboot /mnt/piroot
sudo mount /dev/sdc2 /mnt/piroot
sudo mount /dev/sdc1 /mnt/piboot

2.3 Change the Hostname

sudo nano /mnt/piroot/etc/hostname

Replace the existing name with, for example, pi-zero-02.

sudo nano /mnt/piroot/etc/hosts

Update the line:

127.0.1.1    old-hostname

to:

127.0.1.1    pi-zero-02

2.4 Set a Static IP

If the image uses legacy ifupdown (Bullseye/Legacy):

sudo nano /mnt/piroot/etc/network/interfaces.d/usb0   # or enx…/eth0
allow-hotplug usb0
iface usb0 inet static
  address 192.168.7.3
  netmask 255.255.255.0

If the image is Bookworm with NetworkManager, the interface will use a .nmconnection file (ask if you need the exact path).

2.5 Enable SSH

Create the standard RPi OS headless SSH enable flag:

sudo touch /mnt/piboot/ssh

This enables SSH on first boot without needing keyboard or HDMI.

2.6 Add Boot-Time Guard to Ensure SSH Starts

To ensure SSH starts automatically even if the service fails or was disabled during cloning, add a persistent guard service:

Create service unit: /mnt/piroot/etc/systemd/system/ensure-sshd.service

[Unit]
Description=Ensure SSHD is running
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/ensure-sshd.sh

[Install]
WantedBy=multi-user.target

Create script: /mnt/piroot/usr/local/bin/ensure-sshd.sh

#!/bin/bash
if ! systemctl is-enabled --quiet ssh; then
    systemctl enable ssh
fi

if ! systemctl is-active --quiet ssh; then
    systemctl start ssh
fi

Make the script executable:

chmod +x /mnt/piroot/usr/local/bin/ensure-sshd.sh

Enable the service:

chroot /mnt/piroot systemctl enable ensure-sshd.service

2.7 Remove Cloned SSH Host Keys

To prevent SSH host key conflicts across multiple Pi clones, remove the keys before imaging:

sudo rm /mnt/piroot/etc/ssh/ssh_host_*

New, unique keys will be generated automatically on first boot.

2.8 Cleanly Unmount

sudo umount /mnt/piboot
sudo umount /mnt/piroot
sync

3 Β· All Set β€” Boot the Pi Zero

Eject the card, insert it into the Pi Zero, and power up. Your board should appear on the network with:

  • A unique hostname
  • Static IP
  • SSH enabled
  • Regenerated secure host keys

Triple β€œ5” Farms Tech Notes β€” cloning smarter, safer, and ready-to-connect.