Missing boot loader

Warren Block wblock at wonkity.com
Fri May 29 19:22:49 UTC 2015


On Fri, 29 May 2015, David Newman wrote:

> On 5/29/15 8:46 AM, Warren Block wrote:
>> On Fri, 29 May 2015, David Newman wrote:
>>
>>> On 4/6/15 9:28 PM, Olivier Nicole wrote:
>>>
>>>> My solution is
>>>> http://www.cs.ait.ac.th/~on/technotes/archives/2015/01/30/how-to_clone_a_freebsd_virtual_machine_on_vmware/index.html
>>>>
>>>> certainly not the best/fastest, but it works.
>>>
>>> Thanks for this. After following the clone instructions, restore appears
>>> to work, but the system comes up with a "Missing boot loader" error.
>>>
>>> This is perhaps because the next-to-last step from the live CD is:
>>>
>>> cd /
>>> mount -o rw /dev/da0p1 /mnt
>>> gpart bootcode -b /mnt/boot/pmbr -p /mnt/boot/gptboot -i 1 da0
>>>
>>> And that returns "/dev/da0p1: Operation not permitted" even though da0p1
>>> is the target system's root/boot partition.
>>
>> In this code, da0 is the source disk, where the bootcode files are read.
>> It is mounted on /mnt.  So there are two reasons that gpart cannot write
>> bootcode to da0p1.  First, it is mounted, and second, it is filesystem
>> partition, not a freebsd-boot partition.
>>
>> The target disk cannot be da0p1.  Maybe it is a simple typo, and either
>> the second or third line was meant to be ada0 rather than da0.
>
> Thanks for your email. Backstory: This VM is a dump/restore clone of
> another machine that has no separate boot partition. Here's /etc/fstab
> from the source machine:
>
> /dev/ada0p2	/		ufs	rw	1	1
> /dev/ada0p3	none		swap	sw	0	0

On a GPT disk, FreeBSD uses a freebsd-boot partition to hold the 
bootcode.  This is binary code written to that partition, which does not 
have a filesystem.  It does *not* contain /boot, which is instead part 
of /.

Because the freebsd-boot partition is not needed after boot, it is not 
mentioned in /etc/fstab.  Look at the output of 'gpart show' instead.

> And on the new target VM:
>
> /dev/da0p1	/		ufs	rw	1	1
> /dev/da0p2	none		swap	sw	0	0

This disk is mountable, but because there is no freebsd-boot partition, 
it will not be bootable.  (Well, it might be possible to add a 
freebsd-boot partition after the existing partitions, but I'd avoid that 
because it is unusual and may come back to haunt you at the worst 
possible time.)

> I don't understand the bit about 'ada0', since 'gpart list' shows only
> da0 and two providers under it.

The original disk was ada0, the new one is da0.  If the partitions had 
been created properly on da0 (with p1 being the freebsd-boot partition), 
it would be possible to mount da0p2 (/), read the bootcode from a file 
in the /boot directory there, and write it to da0p1.

> The source machine has boot files in its root partition, under /boot.

Those are copies of the binary bootcode that must be written to a 
freebsd-boot partition to make a disk bootable.

Disk Setup On FreeBSD:
http://www.wonkity.com/~wblock/docs/html/disksetup.html


More information about the freebsd-questions mailing list