GCE Rescue - Rescue unbootable Google Compute Engine VMs.
Project description
GCE Rescue
Rescue unbootable Google Compute Engine VMs by swapping disks on the same VM — no new instance created, same IP, no data loss. Creates a safety snapshot before any changes.
Auto-fix path: The repair command reads serial console output, identifies
the boot failure, and applies a fix automatically end to end.
Rescue path: When auto-fix is not available for the detected issue, the
rescue command swaps your broken boot disk with a rescue disk and attaches the
original boot disk as a secondary disk, providing a rescue environment for manual
repair. Once fixed, the restore command puts your fixed boot disk back.
gce-rescue diagnose my-vm --zone=us-central1-a # What's wrong?
gce-rescue repair my-vm --zone=us-central1-a # Auto-fix it
Note: GCE Rescue is not an officially supported Google Cloud product. The Google Cloud Support team maintains this repository.
Requirements: Python >= 3.9, gcloud CLI, roles/compute.instanceAdmin.v1 IAM role.
Installation
Google Cloud Shell (recommended)
Open Cloud Shell — Python, gcloud, and authentication are already set up.
pip install gce-rescue
Verify the installation:
gce-rescue -h
If
gce-rescueis not found after install, start a new shell session or run:
export PATH="$HOME/.local/bin:$PATH"
Local Machine
Linux / macOS
curl -sSL https://raw.githubusercontent.com/GoogleCloudPlatform/gce-rescue/main/install.sh | bash
May require sudo if Python or pip is not installed.
Windows (run PowerShell as Administrator)
irm https://raw.githubusercontent.com/GoogleCloudPlatform/gce-rescue/main/install.ps1 | iex
The installers handle all prerequisites (Python, gcloud, PATH, authentication) and will prompt before installing anything.
Install from source (requires Python >= 3.9, gcloud CLI, Git)
git clone https://github.com/GoogleCloudPlatform/gce-rescue.git
cd gce-rescue
pip install .
Usage
Start with diagnose — understand what's wrong (safe, read-only)
gce-rescue diagnose VM_NAME --zone=ZONE
Auto-fix available? — let repair handle it automatically
gce-rescue repair VM_NAME --zone=ZONE
Already know the fix? — supply your own fix script (skips diagnosis)
gce-rescue repair VM_NAME --zone=ZONE --fix-script=fix.sh
Ideal for large-scale events where many VMs share one known fix: the script
runs against the mounted boot disk, then the VM is restored and boot-verified
automatically. Add --quiet for automation.
Need manual access? — enter rescue mode, fix it yourself
gce-rescue rescue VM_NAME --zone=ZONE
# SSH/RDP in, fix the issue on /mnt/sysroot
gce-rescue restore VM_NAME --zone=ZONE
| Command | What it does | Modifies VM? |
|---|---|---|
diagnose |
Identifies boot errors from serial console output | No |
repair |
Diagnoses and fixes boot issues automatically | Yes |
rescue |
Provides a rescue environment for investigation via SSH/RDP | Yes |
restore |
Reverses rescue, puts your fixed boot disk back | Yes |
All operations create a snapshot before changes, roll back automatically on failure, and can resume if interrupted.
Sample output: diagnose
$ gce-rescue diagnose my-vm --zone=us-central1-a
Diagnosis: my-vm (us-central1-a)
Status: RUNNING
OS: Linux (debian-12-bookworm, x86_64, Free)
Result: Found 1 boot error(s)
[fstab_bad_uuid] Bad UUID in /etc/fstab (critical)
Line: UUID=abcd-1234 /data ext4 defaults 0 2
Fix: Remove or correct the fstab entry, then reboot
Recommended: gce-rescue repair my-vm --zone=us-central1-a
Authentication
| Environment | Setup |
|---|---|
| Cloud Shell | Pre-authenticated, nothing to do |
| GCE VM (with service account) | Automatic via metadata server |
| GCE VM (without compute scopes) | gcloud auth application-default login |
| Local machine | gcloud auth application-default login |
More info: Application Default Credentials
Flags
| Flag | Description |
|---|---|
--zone |
GCP zone (required) |
--project |
GCP project (default: current gcloud config) |
--no-snapshot |
Skip safety snapshot (faster) |
--rescue-image |
Custom rescue disk image URL (must match VM's OS family + architecture). Useful for restricted-image org policies or hardened rescue environments. Available for rescue and repair. |
--fix-script |
Path to a custom fix script (bash on Linux, PowerShell on Windows) to run against the affected disk after it is mounted — skips diagnosis. With repair the VM is restored and boot-verified afterwards; with rescue it stays in rescue mode for inspection. The affected disk is mounted at /mnt/sysroot on Linux; on Windows its partitions get drive letters from D: onward (iterate non-C: volumes rather than assuming D:). |
--quiet |
No confirmation prompts (for automation) |
--format |
Output format: json, yaml, table |
Features
| Feature | Description |
|---|---|
| Linux + Windows | Auto-detects OS, uses appropriate rescue environment |
| Boot Diagnostics | Serial console analysis for fstab, GRUB, kernel, filesystem errors |
| Auto-Repair | Automated fix for fstab errors (more categories planned) |
| Custom Fix Scripts | Bring your own fix (--fix-script) for known issues at scale — no diagnosis needed |
| Automatic Rollback | Operations roll back on failure |
| Session Recovery | Resume or rollback interrupted operations |
| Safety Snapshots | Backup snapshot before any changes (default) |
| ARM64 Support | Automatic architecture detection |
Permissions
roles/compute.instanceAdmin.v1 includes all permissions needed for every command.
| Command | Minimum Role |
|---|---|
diagnose |
roles/compute.viewer |
rescue, restore, repair |
roles/compute.instanceAdmin.v1 |
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:EMAIL" \
--role="roles/compute.instanceAdmin.v1"
Full permissions matrix
| Permission | diagnose |
repair |
rescue |
restore |
|---|---|---|---|---|
compute.projects.get |
x | x | x | x |
compute.instances.get |
x | x | x | x |
compute.instances.getSerialPortOutput |
x | x | x | |
compute.instances.stop |
x | x | x | |
compute.instances.start |
x | x | x | |
compute.instances.attachDisk |
x | x | x | |
compute.instances.detachDisk |
x | x | x | |
compute.instances.setMetadata |
x | x | x | |
compute.disks.create |
x | x | ||
compute.disks.delete |
x | x | x | |
compute.disks.get |
x | x | x | |
compute.disks.createSnapshot |
x* | x* | ||
compute.snapshots.create |
x* | x* | ||
compute.snapshots.get |
x* | x* | ||
compute.snapshots.list |
x | x | ||
compute.snapshots.delete |
x* | x* |
* Skippable with --no-snapshot
V1 Legacy
V1 is available as gce-rescue-v1 for backward compatibility:
gce-rescue-v1 -n VM_NAME -z ZONE -p PROJECT
See the V1 documentation for details.
Uninstall
pip uninstall gce-rescue
# Linux/macOS (if installed via install script)
rm -rf ~/.gce-rescue
Contact
GCE Rescue Team: gce-rescue-dev@google.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gce_rescue-2.2.0.tar.gz.
File metadata
- Download URL: gce_rescue-2.2.0.tar.gz
- Upload date:
- Size: 194.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5138ab504af6a42e2031362a9119fde1ea5ecb01ce2b6923f7857684fe0595d
|
|
| MD5 |
8ac372ac00f67d26dedd3608d2c68da7
|
|
| BLAKE2b-256 |
e081253c5a1caa273b007ea3673a2b1879ff8e8e08c203652eeee8a020a07a88
|
Provenance
The following attestation bundles were made for gce_rescue-2.2.0.tar.gz:
Publisher:
publish.yml on GoogleCloudPlatform/gce-rescue
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gce_rescue-2.2.0.tar.gz -
Subject digest:
b5138ab504af6a42e2031362a9119fde1ea5ecb01ce2b6923f7857684fe0595d - Sigstore transparency entry: 1802978682
- Sigstore integration time:
-
Permalink:
GoogleCloudPlatform/gce-rescue@5df9974737ff01841b6dbf9c57b816127c965025 -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/GoogleCloudPlatform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5df9974737ff01841b6dbf9c57b816127c965025 -
Trigger Event:
release
-
Statement type:
File details
Details for the file gce_rescue-2.2.0-py3-none-any.whl.
File metadata
- Download URL: gce_rescue-2.2.0-py3-none-any.whl
- Upload date:
- Size: 253.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d52cd0ce1ef3114ef0d598ec6ed495d5efdfe60b111a5f39bafdbdf7da52422a
|
|
| MD5 |
0493aa2eac49e456a33f972ccf6cc27d
|
|
| BLAKE2b-256 |
5c79d12853ced9e4a8705caa58db4f0c5a4f73990afc24be08fa9ec9840e086f
|
Provenance
The following attestation bundles were made for gce_rescue-2.2.0-py3-none-any.whl:
Publisher:
publish.yml on GoogleCloudPlatform/gce-rescue
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gce_rescue-2.2.0-py3-none-any.whl -
Subject digest:
d52cd0ce1ef3114ef0d598ec6ed495d5efdfe60b111a5f39bafdbdf7da52422a - Sigstore transparency entry: 1802978804
- Sigstore integration time:
-
Permalink:
GoogleCloudPlatform/gce-rescue@5df9974737ff01841b6dbf9c57b816127c965025 -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/GoogleCloudPlatform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5df9974737ff01841b6dbf9c57b816127c965025 -
Trigger Event:
release
-
Statement type: