Plant Growth — Device Deployment
What you need
| Item | Notes |
|---|---|
| A computer | macOS / Linux / Windows |
| An SD card | 32 GB recommended ★ (all data on the card will be erased) ★ |
| A card reader | Plugged in, recognised as a removable drive |
Step 1 — Dry run first (★ writes nothing ★)
curl -fsSL https://cnb.cool/iamfuture_x/pi-flash/-/git/raw/main/burn_pi_image_macos.en.sh -o pi-flash.sh && sudo bash pi-flash.sh --install --oneclick --dry-run# ★ Paste this into a NORMAL PowerShell ★ — it will raise the UAC prompt itself
$d="$env:USERPROFILE\pi-flash"; ni -ItemType Directory -Force $d|Out-Null;
iwr -useb https://cnb.cool/iamfuture_x/pi-flash/-/git/raw/main/pi-flash.en.ps1 -OutFile "$d\pi-flash.en.ps1";
Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile","-ExecutionPolicy","Bypass","-NoExit","-File","$d\pi-flash.en.ps1","-DryRun","-CacheDir","$d"2
3
4
The dry run performs every check — drive detection, image fetch, verification — ★ but writes nothing ★. Always run this first.
Step 2 — Flash for real
curl -fsSL https://cnb.cool/iamfuture_x/pi-flash/-/git/raw/main/burn_pi_image_macos.en.sh -o pi-flash.sh && sudo bash pi-flash.sh --install --oneclick# ★ Paste this into a NORMAL PowerShell ★ — it will raise the UAC prompt itself
$d="$env:USERPROFILE\pi-flash"; ni -ItemType Directory -Force $d|Out-Null;
iwr -useb https://cnb.cool/iamfuture_x/pi-flash/-/git/raw/main/pi-flash.en.ps1 -OutFile "$d\pi-flash.en.ps1";
Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile","-ExecutionPolicy","Bypass","-NoExit","-File","$d\pi-flash.en.ps1","-CacheDir","$d"2
3
4
★★ You will be asked twice ★★:
- ★ Your computer password ★ (macOS needs sudo to write the raw device)
- ★ A second confirmation ★ — you must type ★
YESin uppercase ★ before writing starts
★ With several removable drives ★ the script lists them by number (drive letter / size / device name) — ★ enter the number you want to format ★, then still type
YES.
What you will see
Step 1 Detect removable drives ★ system / virtual / optical drives are excluded ★
Step 2 Choose the target drive one → auto-selected; several → pick by number
Step 3 ★ Second confirmation ★ ★ type YES (uppercase) to proceed ★
Step 4 Obtain the image index → cache → download → verify sha256 → extract
Step 5 Write ★ live progress bar ★
Step 6 Read-back verification byte-by-byte (★ guards against a false PASS ★)
Step 7 Safe eject and record version
Step 8 ★ MUST DO after installing ★2
3
4
5
6
7
8
★ After flashing: the one thing you MUST do ★
Insert the card into the Raspberry Pi → power on → wait ~2 minutes → run:
df -h /★ The root partition should be ≈ the card size ★ (32 GB card ⇒ about 29 GB).
If it shows only ~3.4 GB ⇒ ★ the first-boot resize did not run ⇒ report it and do not keep using that card ★.
Once the device is online you can see it in the device portal and complete binding.
FAQ
"No removable drive detected" Check the reader and card. Some built-in readers report the card as an internal disk and the script will ★ refuse ★ — that is deliberate.
Several drives — afraid of picking the wrong one ★ Press Ctrl+C any time before typing YES ★ — nothing is destroyed until the actual write begins.
Slow download / reuse a previous image Images are cached in the ★ current working directory ★; re-run from there. --refresh (-Refresh) forces a re-download; --cache-dir (-CacheDir) moves the location.
Read-back mismatch The script reports the offset of the first difference. Inside the first 512 MiB (boot partition) it is usually OS index files (.Spotlight-V100 / .fseventsd) and the payload is correct; otherwise re-flash.
Unattended mode, no YES prompt (automation only) macOS/Linux: --yes --disk /dev/diskN (★ the drive must be named explicitly ★) Windows: -DiskNumber N -Yes (★ both must be given ★)
Chinese UI macOS/Linux: use burn_pi_image_macos.sh · Windows: use pi-flash.ps1