Skip to content

JeremyCollins.net

Using a Raspberry Pi as a NAS macOS Time Machine (2020 edition)

macOS, linux, pi2 min read

Update December 2020: This appears to work on macOS Big Sur, using the latest Raspbian. Config also now uses HFS+ as the drive filesystem and AFP as the network protocol. SMB as the networking protocol I have not been able to get working reliably.

I've now had a few months of reliable, consistent automated Time Machine backups accomplished via my Mac and Rapberry Pi 4B now, attached to a spare 1TB 2.5" USB 3.0 drive. Using the Pi 4B alongside some spare drives can give you a very versatile, cost-effective NAS and server.

Steps to set up

Prerequisites:

  • Ensure your Pi is fully up to date sudo apt-get update && sudo apt-get upgrade -y
  • Make sure the Pi uses a static IP on your local network (there are good guides on this, it is out of scope for this post)
  • Install dependencies: sudo apt install samba avahi-daemon hfsutils hfsprogs

Connecting and mounting the drive on the Pi

  • Plug in your drive into a USB port on the Pi and get the drive UUID with ls -lha /dev/disk/by-uuid. Make note of the drive reference and UUID
      • For the purposes of this guide, my drive reference will be /dev/sda1 and UUID is 8c9d728a-54f3-4948-81ea-f0482c89fc73
  • Format our drive to HFS+ format: sudo mkfs.hfs /dev/sda1 -v TimeMachine or use Gparted to repartition the drive and label it TimeMachine
  • Next, we want to auto-mount it to a designated folder, so run sudo nano /etc/fstab
    • Add this line to the bottom of the file: UUID=8c9d728a-54f3-4948-81ea-f0482c89fc73 /media/pi/TimeMachine hfsplus force,nofail,rw,noauto 0 0 (if your username is not pi, edit this path to use your nane instead and do the same in subsequent areas)
  • Reboot, and now run df -h and make sure your drive is present. sudo fdisk -l also for a little more verbosity. Make sure everything looks good based on the specs of the drive.

Networking from Pi

  • Install netatalk: sudo apt-get install netatalk -y
  • edit nsswitch.conf sudo nano /etc/nsswitch.conf
    • Line hosts: files mdns4_minimal [NOTFOUND=return] dns becomes hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
  • edit smb config: sudo nano etc/samba/smb.conf and append
1[backups]
2 comment = Backups
3 path = /media/pi/TimeMachine
4 valid users = pi
5 read only = no
6 vfs objects = catia fruit streams_xattr
7 fruit:time machine = yes
  • edit file: sudo nano /etc/netatalk/afp.conf

And append

1[Global]
2 mimic model = TimeCapsule6,106
3
4[Time Machine]
5 path = /media/pi/TimeMachine
6 time machine = yes
  • Launch services sudo service avahi-daemon start and sudo service netatalk start

Find the Time Machine server on your mac

  • Let's verify the drive is being properly shared. Go to Finder > Connect to server
    • Enter afp://192.168.1.50/ (use the local static IP for your pi instead though)
    • You should be prompted for your pi login info

Connect to server

  • Go to System Preferences > Time Machine
    • Select Disk > find your Disk
    • You'll be prompted to log in again with your pi user
    • It would be wise to encrypt your backup when macOS asks you here, since it will be plainly readable on the external drive otherwise

And that should do it!

Time Machine

Troubleshooting

Drive appears read-only

Read Only

  • Set drive permissions (such as sudo chmod -R 777 /media/pi/TimeMachine)
  • Alternatively, delete the above mount-point directory (sudo rmdir /media/pi/TimeMachine) and reboot (this fixed an issue for me that chmod did not)
General drive unreliability
  • Ensure above permissions are set, and also verify disk integrity --- sudo fsck.hfsplus -f /dev/sda1 (or simply re-format)
Similar guides to try if this fails (this guide is a mashup of these two, with some sprinking of edited commands)

Gregology's Raspberry Pi Time Machine -- this guide is most similar to this one, but uses ext4 instead of hfsplus

Mudge's Using a Raspberry Pi for Time Machine -- uses ext4 and smb as a protocol, and other steps look good but I couldn't get the macOS Time Machine service to find it

© 2021 by JeremyCollins.net. All rights reserved.