Different block size of SSD in the same model MacBook Air

One of the things that Apple has been pretty consistent over the years is that a specific model Mac will have the same hardware if the part number is the same. The PC world is not really like.  When I was creating images for Dell laptops back in the day, the same model laptop purchased at the same time could have a different sound card or different ethernet hardware.  Apple hardware was consistent, which is why I was surprised when I discovered that two identical MacBook Air models had a different type of SSD.  The MacBook Airs that had been purchased a while ago had SSDs that had a physical block size of 4096 bytes, and the newer MacBook Airs has a physical block size of 512 bytes.  This was strange since Apple is generally moving towards 4k physical block size.

We discovered this issue when restoring a Winclone image that was done using block-based imaging on a 4k byte physical block MacBook Air.  That same image was being used to image a large number of MacBook Airs, but some MacBook Airs were not booting Windows on first boot. When we investigated, we discovered the block size discrepancy.

If run this command in terminal, you can determine the physical block size of disk0:

diskutil info disk0
For some of the MacBook Air models, it was 512.  For others, it was 4096.
It is unusually for Apple to have different hardware components in the same model, but it looks like this was the exception.  The issue with the physical block size difference doesn’t present itself in macOS, but does in Windows due to how the NTFS file table (MFT) references blocks on the disk.  The master file table (MFT) block size must match the physical block size, and if you restore a block based image from a 4096 byte block size to a 512 byte block size, it won’t boot.
Luckily, there is a relatively easy fix. Winclone supports both block-based imaging and file-based imaging.  File-based imaging does not image the MFT (basically the filesystem catalog for NTFS), which has the incorrect value for the block size.  To resolve the issue, here is what we did:
  1. Restore the existing Winclone image from the 4k block size on to one of a MacBook Air that has 512 block size.   Do not reboot into Windows (since it would fail anyways).  Even with the MFT mismatch, the files are able to be read correctly in macOS.
  2. In Preferences of Winclone 6, uncheck the “Use block based imaging…” checkbox to switch to file based imaging.
  3. Create an image of the Boot Camp partition you just restored.  This will create a file based image that can be restored on either 512 or 4096 physical block images.
At this point, the image could be used for deployment and it should work on both 512 and 4096 block MacBook Airs.  However, file based restores can be slower. It can further optimized by creating a block based image of the 512 block MacBook Air:
  1. Switch to block based imaging in preferences in Winclone.
  2. From the tools menu, select Shrink NTFS Filesystem…
  3. After shrinking, create a new Winclone image of the boot camp partition.
This new image can then be restored on to the MacBook Airs that have 512 Physical block size. You would then have 2 images, one for 512 byte block size, and one for 4k byte block size.