#sdcard #usb #image-cli #cli

app etchr

A fast, safe, and interactive CLI for flashing disk images

1 stable release

Uses new Rust 2024

1.0.0 Nov 15, 2025

#433 in Hardware support

MIT license

42KB
750 lines

etchr

A fast, safe, and interactive CLI for flashing disk images.

Tired of cryptic `dd` commands? Worried you'll accidentally wipe your system drive?
etchr is a modern, reliable tool that makes flashing SD cards and USB drives simple and safe, right from your terminal.


✨ Features

  • πŸ›‘οΈ Interactive Safety First etchr doesn't let you pass a device path. Instead, it shows an interactive menu of only removable devices, making it nearly impossible to flash your system drive by mistake.

  • πŸš€ Decompression On-the-Fly Automatically decompresses .gz, .xz, and .zst images while writing. No need to extract them first.

  • ⚑ Blazingly Fast Optimized for high-speed, unbuffered I/O to flash images as fast as your hardware allows, often faster than GUI-based tools.

  • βœ… Guaranteed Verification Automatically verifies the disk with a SHA256 hash after writing to ensure the data is perfect, bit-for-bit. (You can skip this with --no-verify).

  • πŸ“Š Detailed Progress A beautiful progress bar shows your speed, data transferred, and ETA, so you're never left guessing.

  • πŸ›‘ Graceful Cancel Press Ctrl+C at any time to safely cancel the operation. etchr cleans up after itself, leaving no temporary files or half-written states.

πŸš€ Installation

This is the easiest way to get the latest version if you have the Rust toolchain.

cargo install etchr

2. From GitHub Releases

Download the pre-compiled binary or .deb package from the Releases page.

# For .deb packages
sudo dpkg -i ./etchr_1.0.0_amd64.deb

3. From Source

git clone [https://github.com/sskartheekadivi/etchr.git](https://github.com/sskartheekadivi/etchr.git)
cd etchr
cargo build --release
sudo cp ./target/release/etchr /usr/local/bin/

πŸ’‘ Usage

etchr is designed to be simple. The commands guide you.

etchr list

List all detected removable devices and their mount points.

$ etchr list
Found 1 removable devices:

  DEVICE       NAME                 SIZE LOCATION
  ----------   -----------------   ----- ----------
  /dev/sdd     Cruzer Blade       29.5 GB /media/user/USB_DISK

etchr write

Write an image to a device. You will be prompted to select a target from a safe, interactive list.

# You can use compressed or uncompressed images
etchr write ~/Downloads/raspberry-pi-os.img.xz

This will start the interactive prompt:

βœ” Select the target device to WRITE to Β· /dev/sdd     29.5 GB [Mounted at /media/user/USB_DISK]
WARNING: This will erase all data on 'sdd' (29.5 GB).
  Device: /dev/sdd
  Image:  /home/user/Downloads/raspberry-pi-os.img.xz

βœ” Are you sure you want to proceed? Β· yes

Writing image...
Decompress [β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ] 1.53 GiB (150.37 MiB/s)
Writing    [β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ] 8.00 GiB (90.12 MiB/s)
Verifying  [β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ] 8.00 GiB (133.33 MiB/s)

✨ Successfully flashed /dev/sdd with raspberry-pi-os.img.xz.

Options:

  • --no-verify: Skips the verification step after writing.

etchr read

Create an image file by reading an entire device. You will be prompted to select a source.

etchr read ~/Backups/my-sd-card-backup.img

This will start the interactive prompt:

βœ” Select the source device to READ from Β· /dev/sdd     29.5 GB [Mounted at /media/user/USB_DISK]
This will read 29.5 GB from 'sdd'.
  Device: /dev/sdd
  Output: /home/user/Backups/my-sd-card-backup.img

βœ” Are you sure you want to proceed? Β· yes

Reading    [β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– ] 29.5 GiB (100.0 MiB/s)

✨ Successfully read /dev/sdd to my-sd-card-backup.img.

πŸ—ΊοΈ Roadmap

etchr is already a powerful tool, but here's what's planned:

  • Smarter reading (e.g., only reading partitions, not the whole empty disk).
  • Multi-write: Flashing one image to multiple devices at once.
  • A (separate) optional GUI frontend.

Contributing

Contributions are welcome! Whether it's a bug report, a feature idea, or a pull request, feel free to open an issue or start a discussion.

License

This project is licensed under the MIT License.

Dependencies

~14–21MB
~414K SLoC