0 Bytes Available

Second day of vacation and I get a text ‘backup server is full’. Well, that sucks. Pretty sure it had 1.5TB a week or two ago. Sure enough, 0 bytes available.

The first place I look is at snapshots. I think I have a few old snapshots that are locked in, let’s delete those and then maybe look at tightening up retention. ‘Error deleting snapshot’. Ah stink.

Long story short, Synology’s GUI was throwing errors when trying to delete snapshots, and I was eventually able to delete them by dropping into SSH and deleting them using btrfs commands.

First let’s get a list of snapshots:

sudo btrfs subvolume list /volume3
...
ID 79993 gen 371972 top level 673 path @sharesnap/config/GMT-06-2020.11.24-08.00.02
ID 80284 gen 374742 top level 673 path @sharesnap/config/GMT-06-2020.11.25-08.00.02
ID 80368 gen 377261 top level 673 path @sharesnap/config/GMT-06-2020.11.26-08.00.02
ID 80446 gen 379839 top level 673 path @sharesnap/config/GMT-06-2020.11.27-08.00.02
...

Next we need to take those snapshot paths and prepend the volume path so that BTRFS can delete it. Since I’m deleting snapshots on Volume 3, mine look like this now:

/volume3/@sharesnap/config/GMT-06-2020.11.24-08.00.02
/volume3/@sharesnap/config/GMT-06-2020.11.25-08.00.02
/volume3/@sharesnap/config/GMT-06-2020.11.26-08.00.02
/volume3/@sharesnap/config/GMT-06-2020.11.27-08.00.02

And now we can run the delete commands:

btrfs subvolume delete -c /volume3/@sharesnap/config/GMT-06-2020.11.24-08.00.02
btrfs subvolume delete -c /volume3/@sharesnap/config/GMT-06-2020.11.25-08.00.02
btrfs subvolume delete -c /volume3/@sharesnap/config/GMT-06-2020.11.26-08.00.02
btrfs subvolume delete -c /volume3/@sharesnap/config/GMT-06-2020.11.27-08.00.02

The -c is important. When I was first running these commands I saw output along the lines of ‘not committed’ and my snapshots appeared to still exist after re-listing them. -c waits for the the snapshot delete to commit before exiting.

With this I was able to delete snapshots and see those bytes crawl back in.

Checking If A Binary Is Universal

With the M1 Macs out and getting my hands on an M1 Mac mini, I got curious which applications are installing as Universal Binaries for ARM, and which are x86 only and need Rosetta 2 to run.

Thanks to Eric who pointed me to the file (/usr/bin/file) command. From the manual page: “file — determine file type”. Neat.

Here’s the expected output from checking a CLI binary:

ARM:

1
file /usr/bin/python

/usr/bin/python: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]

x86:

1
file /usr/local/bin/python3

/usr/local/bin/python3: Mach-O 64-bit executable x86_64

And here’s how to check application bundle binary:

ARM:

1
file "/Applications/World of Warcraft/_retail_/World of Warcraft.app/Contents/MacOS/World of Warcraft"

/Applications/World of Warcraft/_retail_/World of Warcraft.app/Contents/MacOS/World of Warcraft: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64]
/Applications/World of Warcraft/_retail_/World of Warcraft.app/Contents/MacOS/World of Warcraft (for architecture x86_64):    Mach-O 64-bit executable x86_64

x86:

1
file /Applications/Battle.net.app/Contents/MacOS/Battle.net

/Applications/Battle.net.app/Contents/MacOS/Battle.net: Mach-O 64-bit executable x86_64

The one thing that I know this doesn’t handle is any extra resource or framework binaries that an app bundle might have. This should give you a quick idea of what is or isn’t Universal, though.

Happy exploring.

Azure Billing and Management

The goal of this post is to serve as a quick guide to gaining access to all Azure subscriptions.

The Context

By default, when someone creates a subscription or object in Azure, only that user has access to it. A little over a year ago I reached out to Azure support asking if there is a way for an admin to see everything that any user creates. Their response was “no” and that if the user containing the subscription is deleted, then the subscription is as well.

Cool cool cool cool cool. So I asked our developers to please add me as an admin on any subscriptions that they create. As you’d expect, this didn’t work. They’ve created several subscriptions and either forgot or didn’t take the time to add me to them.

This lead to today, where I was asked about our Microsoft billing. I asked the developers if they had subscriptions that I didn’t have access to and if they could grant me access to them. “I’ll check today and get you added to things”. I didn’t want to have to wait to nag them again later, so I figured I’d do another search to see if things had changed.

The solution

Sure enough, they have changed! It looks like Microsoft posted a KB article on how to deal with this on 2019-12-03: “Elevate access to manage all Azure subscriptions and management Groups“.

This requires you to be a Global Admin and can only be enabled on the signed-in admin. If there are any other global admins that need access, they will have to walk through these steps themselves.

The steps:

  1. Log into the Azure portal
  2. Search for Azure Active Directory and click into it
  3. Under Manage click Properties
  4. At the bottom, enable Access management for Azure resources
  5. Click Save
  6. Log out and back in
  7. In the Azure portal, search for Subscriptions and click into it
  8. Click Switch directories
  9. Change the Default Subscription filter to All subscriptions

“That’s it”. You should now be able to see, access, and manage all Azure subscriptions.

SSH Reverse Proxy Tunnel

On occasion I need to test external access to my office or sometimes I’m on public Wi-Fi and want to securely browse the internet without connecting to a VPN. For times like those I use an SSH reverse proxy tunnel to a VPS and Firefox. This routes all of my Firefox traffic through my VPS securely over SSH.

All you need to accomplish this is an SSH server somewhere that you trust and Firefox. Once you have an SSH server up, go through these steps: