Difference between revisions of "Diskless network boot NBD root"

From ArchWiki
Jump to: navigation, search
Line 11: Line 11:
  
 
==Server-Side Setup==
 
==Server-Side Setup==
 +
===Create the NBD File and Boot Directory===
 
Create a directory that will hold the boot directory and the NBD file.
 
Create a directory that will hold the boot directory and the NBD file.
 
<pre>
 
<pre>
Line 16: Line 17:
 
</pre>
 
</pre>
 
Next, create the actual file that will be shared via NBD. Of course you can also use an actual block device (a hard drive) instead of creating a file on your filesystem. Just replace /nbd/root with the block device.
 
Next, create the actual file that will be shared via NBD. Of course you can also use an actual block device (a hard drive) instead of creating a file on your filesystem. Just replace /nbd/root with the block device.
In this example we are going to create a file with a size of 5GiB.
+
In this example we are going to create a file with a size of 5GB.
 
<pre>
 
<pre>
 
dd if=/dev/zero of=/nbd/root bs=1M count=5000
 
dd if=/dev/zero of=/nbd/root bs=1M count=5000
Line 34: Line 35:
 
{{note|Be aware that the rest of the article will use /nbd/root. If your NBD file is encrypted, replace it with /dev/mapper/nbdcrypt, if you use an actual block device, with /dev/sdX.}}
 
{{note|Be aware that the rest of the article will use /nbd/root. If your NBD file is encrypted, replace it with /dev/mapper/nbdcrypt, if you use an actual block device, with /dev/sdX.}}
  
Now we can mount the filesystem:
+
===Install ArchLinux on the NBD filesystem===
 +
Mount the filesystem:
 
<pre>
 
<pre>
 
mount /nbd/root /mnt
 
mount /nbd/root /mnt
 
</pre>
 
</pre>
 +
Now follow the instructions [[Diskless network boot NFS root#Create Client Root Directory|here]], but be aware of three things:
 +
# make sure you use /mnt instead of /disklessroot
 +
# you are going to have to install the mkinitcpio-nbd package from AUR before recreating the kernel image
 +
# the editing of /mnt/etc/mkinitcpio.conf is different for NBD
 +
====Installing mkinitcpio-nbd====
 +
 +
====Editing mkinitcpio.conf====
 +
Set the following hook list in /mnt/etc/mkinitcpio.conf:
 +
<pre>
 +
HOOKS="base udev net nbd filesystems"
 +
</pre>
 +
If you use an encrypted NBD device, use this:
 +
<pre>
 +
HOOKS="base udev net nbd usbinput keymap encrypt filesystems"
 +
</pre>
 +
Then continue with the instructions about recreating the kernel image in the NFS article.
 +
 +
After leaving the chroot, the kernel image will be in /mnt/boot/. We are going to need it in /nbd/boot:
 +
<pre>
 +
cp /mnt/boot/vmlinuz26 /nbd/boot/
 +
cp /mnt/boot/kernel26.img /nbd/boot/
 +
</pre>
 +
===PXE/TFTP Setup===
 +
Follow the instructions [[Diskless network boot NFS root#PXE/TFTP Setup|here]]. Just make sure you use /nbd/boot/ instead of /disklessroot/boot/ for the TFTP-Root.

Revision as of 05:27, 4 July 2011

Note: This article is not completed yet!

Boot from a NBD root device

This article will explain how to boot an ArchLinux Installation from a Network Block Device (NBD).

Much of the work to be done is based on the article Diskless network boot NFS root, so this will be referenced several times within the article.

Advantages over NFS

The main advantages are that NBD is faster and that you can boot from an encrypted or LVM-based NBD root device. One disadvantage is that you cannot update your kernel from within the running diskless client, although this may be worked around by mounting /boot via NFS.

Server-Side Setup

Create the NBD File and Boot Directory

Create a directory that will hold the boot directory and the NBD file.

mkdir -p /nbd/boot/

Next, create the actual file that will be shared via NBD. Of course you can also use an actual block device (a hard drive) instead of creating a file on your filesystem. Just replace /nbd/root with the block device. In this example we are going to create a file with a size of 5GB.

dd if=/dev/zero of=/nbd/root bs=1M count=5000

Now you can create a filesystem on the file.

mkfs.ext4 /nbd/root

mkfs will show you warning about the fact that the file is no actual block device. You can ignore this and simply press y to continue.

Alternatively, if you want to create an encrypted NBD device:

cryptsetup luksFormat -s 256 /nbd/root
cryptsetup luksOpen /nbd/root nbdcrypt
mkfs.ext4 /dev/mapper/nbdcrypt
Note: Be aware that the rest of the article will use /nbd/root. If your NBD file is encrypted, replace it with /dev/mapper/nbdcrypt, if you use an actual block device, with /dev/sdX.

Install ArchLinux on the NBD filesystem

Mount the filesystem:

mount /nbd/root /mnt

Now follow the instructions here, but be aware of three things:

  1. make sure you use /mnt instead of /disklessroot
  2. you are going to have to install the mkinitcpio-nbd package from AUR before recreating the kernel image
  3. the editing of /mnt/etc/mkinitcpio.conf is different for NBD

Installing mkinitcpio-nbd

Editing mkinitcpio.conf

Set the following hook list in /mnt/etc/mkinitcpio.conf:

HOOKS="base udev net nbd filesystems"

If you use an encrypted NBD device, use this:

HOOKS="base udev net nbd usbinput keymap encrypt filesystems"

Then continue with the instructions about recreating the kernel image in the NFS article.

After leaving the chroot, the kernel image will be in /mnt/boot/. We are going to need it in /nbd/boot:

cp /mnt/boot/vmlinuz26 /nbd/boot/
cp /mnt/boot/kernel26.img /nbd/boot/

PXE/TFTP Setup

Follow the instructions here. Just make sure you use /nbd/boot/ instead of /disklessroot/boot/ for the TFTP-Root.