How to Set Up Automated, Incremental OneDrive Backups on a Headless Raspberry Pi

Automating a daily cloud-to-local mirror on a Raspberry Pi is an excellent way to secure photos, camera rolls, and file assets. By leveraging rclone, you can build a highly optimized sync engine that runs in the background, only downloads newly added files, and automatically keeps its authentication sessions alive indefinitely.

An external disk and a Raspberry Pi as basis cof anti-cloud-lock-in for family photos.

This straight-forward recipe covers the entire implementation process from scratch, using clear configurations tailored for headless Linux systems.

Step 1: Install Rclone

To avoid outdated, modified software variations packaged in old repository distributions, install the official binary payload directly from the source:

curl https://rclone.org/install.sh | sudo bash

Step 2: Configure the OneDrive Remote

Because a headless Raspberry Pi does not have a web browser, initialization uses a remote handshake mechanism. Begin the interactive workflow utility configuration:

rclone config
  • Select to create a new remote configuration
  • Assign a label name to the target remote, such as myonedrive.
  • Locate the option number corresponding to Microsoft OneDrive and enter it.
  • Leave advanced setup fields blank by pressing Enter.
  • When prompted with Use auto config?, select No (n). (Or yes “yes” if you have a Pi with graphical user interace and a browser…)

Rclone will output a command string that looks like rclone authorize "onedrive" "...". Paste that command string into a terminal on a desktop machine with an active browser interface, log into your Microsoft Account, and then copy the generated cryptographic token string matrix back into your Raspberry Pi console window.

Finally, select option 1 for OneDrive (personal) when prompted with the config_driveid configuration menu to bind the core asset directory.

Step 3: Build the Automation Script Wrapper

System cron loops require explicitly hardcoded absolute system path directives. Create a dedicated shell execution utility block file in your directory:

Bash

nano ~/rclone_backup.sh

Paste the following script direct inside, adjusting the path variables for your system profile environment:

Bash

#!/bin/bash
# Define clear system absolute mapping pathways
RCLONE_BIN="/usr/bin/rclone"
CONFIG_PATH="/home/piuser/.config/rclone/rclone.conf"
LOG_FILE="/home/piuser/rclone_backup.log"
echo "=== Sync pipeline execution started: $(date) ===" >> "$LOG_FILE"
# Run incremental file copying task mapping
$RCLONE_BIN copy myonedrive:Pictures/ /home/piuser/photobackup/ \
--config "$CONFIG_PATH" \
--log-file="$LOG_FILE" \
--log-level INFO
echo "=== Sync pipeline execution completed: $(date) ===" >> "$LOG_FILE"

Save out, close the editor window interface, and grant the appropriate binary execute properties:

Bash

chmod +x ~/rclone_backup.sh

Step 4: Create the Scheduled Cron Routine

Open up the automated crontab task architecture controller interface menu:

Bash

crontab -e

Append the execution schedule entry line to the very bottom of the parameters file to automate the incremental file sync task sequence at exactly 2:00 AM every single night:

Plaintext

0 2 * * * /home/piuser/rclone_backup.sh

Save and close. The system scheduler will output a verification indicating crontab: installing new crontab.

Appendix: Fixing Version-Related Auth Failures

If you initialized an old, pre-packaged repository release of rclone (commonly tagged with -DEV flags), you might run into an installation loop where directory listings function cleanly but data streams throw immediate 401 Unauthenticated errors. This occurs because old builds pass broken structural metadata properties or inject corrupted global scopes.

How to Resolve:

  1. Purge and Update: Clean out the old software build stack cleanly using sudo apt remove rclone and install the fresh engine via the script in Step 1.
  2. Edit the Configuration: Open your rclone configuration file manually to fix formatting parameters:Bashnano ~/.config/rclone/rclone.conf
  3. Fix the Tenant Line: Look closely under your remote profile block heading. If you find a malformed line reading tenant = 1, update it to the proper global Microsoft baseline parameter target.
  4. Purge the Corrupted Token: Completely delete the long, multi-line token = ... string array inside that block so that bad parameters are not recycled by the binary.
  5. Re-Authenticate: Reinitialize a clean, uncorrupted authentication loop token refresh chain immediately from the Pi terminal window:Bashrclone config reconnect myonedrive:

Leave a comment