This is a little off topic from my usual posts, but I want to make sure the information is out there because this problem was a MAJOR pain in the ass to solve. In fact, even an senior Apple tech support engineer couldn’t wrap his head around it after an hour of trying things. In the end, the solution turned out to be pretty simple.
Whilst Time Machine will automatically prune old backups to keep the total backup size within the limit of the drive you’re using, you could find yourself wanting to move the backup to a new larger drive to keep a deeper backup, or perhaps to a new and faster drive. To move a backup you simply disable Time Machine temporarily, and then drag the Backup.backupdb folder to the new drive. Then open Time Machine and set the destination to your new drive. It’ll find all the old backups and just pick up where it left off.
But what are you supposed to do with the OLD Backup.backupdb folder from the old Time Machine drive? Apple’s own support documents don’t mention this, and the plethora of other internet “guides” simply mimic Apples advice verbatim. Useless.
If you drag the old backup to the trash and try and empty it, you’ll likely see (after some time) a warning that says “Some items in the Trash cannot be deleted because of System Integrity Protection”
I have run into this problem a couple of times, and that’s why I’m sharing a solution that finally worked flawlessly. On one occasion I trashed the old backup folder and then formatted the old drive before trying to empty the Trash. The old Time Machine backups would repeatedly appear in my Trash every time I connected the old drive, even though there was nothing on there anymore.
Things That Don’t Work
If you simply google phrases like “stuck time machine backup” or “delete Time Machine backup” then you’re going to find at least ten solutions. The majority of solutions involve you entering the Time Machine app and using the delete command on the backups. Of course, if you’re in the same situation that I was in, the backup you are trying to delete, isn’t your current Time Machine backup so that doesn’t work. Potentially you even temporarily put your TM backup into a sub folder, meaning you can’t even set it as the Time Machine destination.
Essentially, if you’re seeing the “system integrity protection” warning, follow my advice and ignore everything else because I have been there and wasted hours on it.
In the end, the solution was remarkably simple, and I’m blown away that the Apple engineer didn’t know about it. Clearly my machine didn’t want to delete seemingly important system files and it has a mode called System Integrity Protection. This is designed as a security feature, to stop malicious programs deleting important operating system files. That’s great, but it should be able to tell the difference between the real ones, and the backups of those same files that are in a Time Machine backup! Sadly it can’t.
Well, it turns out that you can simply turn off SIP (System Integrity Protection) for a few minutes while you empty your trash. Yep, it’s that simple.
Reboot your Mac, and once you hear the sound and see the logo, hit and hold CMD+R on the keyboard to boot your Mac into recovery mode.
Once the recovery menu has appeared, ignore it and go to the “Utilities” option in the menu at the top of the screen, From here, select Terminal to open the Terminal window.
Type: csrutil disable; reboot
Then hit the return key and your Mac will immediately reboot. Contrary to some other guides out there, you will not see a warning message. It’ll simply reboot right away.
Your Mac will boot as normal now, but Integrity Protection is turned off. You can now drag your old Time Machine backups to the trash and hit the Empty button. This will probably take a long time, but it should work now without a problem. If you do have any issue at all, use the “Put Back” command on the files in the trash, by right-clicking on them. Then drill down into the Backup.backupdb folder and trash the date based folder individually, instead of the whole top-level folder. Then empty the trash and you should be good.
Reboot your Mac again and use CMD+R to enter recovery mode and get back to the Terminal.
This time type: csrutil enable; reboot
Hit return, and you’ll be good to go!