How to make a bootable partition from scratch?
Pergunta
What I want to achieve is to make a new bootable partition on my MacBook's SSD, so it should be possible to press Option
key on startup and choose this partition to boot from.
Why do I need that? I just successfully compiled XNU kernel from sources, found some drivers (kernel extensions), so now I want to boot this kernel and to load bash
after boot process finishes. The key idea is to make a minimal Mac OS, just with command line interface.
Here is the output of diskutil list
:
Alexanders-MacBook-Pro:~ aperechnev$ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *251.0 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 250.8 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +250.8 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD - Data 99.8 GB disk1s1
2: APFS Volume Preboot 83.8 MB disk1s2
3: APFS Volume Recovery 525.5 MB disk1s3
4: APFS Volume VM 1.1 GB disk1s4
5: APFS Volume Macintosh HD 10.9 GB disk1s5
What I want to achieve first is to see the new partition as an option to boot from by pressing Option
key and to get some error when I try to boot from that partition.
Solução
What makes it bootable? This has change slightly over time. I will assume you are not going to use encryption. Below are some basic examples. This is not a complete list.
The original OS X operating system.
- The partition should be type
48465300-0000-11AA-AA11-00306543ECAC
. - The partition should be
JHFS+
formatted. If you are using the Disk Utility, you would selectMac OS Extended (Journaled)
. - The boot file
boot.efi
needs to be in theSystem/Library/CoreServices
folder. - There used to be a requirement that a file named
mach_kernal
exist in the root folder. The file can be empty.
- The partition should be type
The macOS operating system stored in an APFS volume. This became available starting with High Sierra. This volume resides in a APFS container. The container can be comprised of a single APFS partition or two APFS partitions on separate drives.
- The partition(s) should be type
7C3457EF-0000-11AA-AA11-00306543ECAC
. - The container should be
APFS
formatted. If you are using the Disk Utility, you would selectAPFS
. - The boot file
boot.efi
needs to be in theSystem/Library/CoreServices
folder in a APFS volume with no specific role. - The
mach_kernal
file can be omitted.
- The partition(s) should be type
A generic operating system stored in a FAT or ExFAT formatted volume. This works on Macs where High Sierra or a newer version of macOS has been installed.
- The partition(s) should be type
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
. - The container should be
FAT32
orExFAT
formatted. If you are using the Disk Utility, you would selectMS-DOS (FAT)
orExFAT
. - The boot file
BOOTX64.EFI
needs to be in theEFI/BOOT
folder.
- The partition(s) should be type
Operating system stored in partitions not recognized by the firmware. For example, partitions with NTFS (Windows) or EXT4 (Linux) volumes. Basically, the boot files go in a small EFI partition. The boot files are responsible for transferring control to the partition(s) containing the operating system.
- The partition(s) should be type
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
. - The container should be
FAT32
formatted. If you are using the Disk Utility, you would selectMS-DOS (FAT)
. - The boot file
BOOTX64.EFI
needs to be in theEFI/BOOT
folder.
- The partition(s) should be type