Difference between revisions of "Diskless network boot NBD root"

From ArchWiki
Jump to: navigation, search
m (Fixed double redirect)
(35 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[[Category:Boot process (English)]]
+
#REDIRECT [[Diskless System]]
[[Category:Networking (English)]]
 
{{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.
 
<pre>
 
mkdir -p /nbd/boot/
 
</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.
 
In this example we are going to create a file with a size of 5GB.
 
<pre>
 
dd if=/dev/zero of=/nbd/root bs=1M count=5000
 
</pre>
 
Now you can create a filesystem on the file.
 
<pre>
 
mkfs.ext4 /nbd/root
 
</pre>
 
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:
 
<pre>
 
cryptsetup luksFormat -s 256 /nbd/root
 
cryptsetup luksOpen /nbd/root nbdcrypt
 
mkfs.ext4 /dev/mapper/nbdcrypt
 
</pre>
 
{{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:
 
<pre>
 
mount /nbd/root /mnt
 
</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>
 
====Editing rc.conf====
 
Make sure you set NETWORK_PERSIST="yes" and your own settings in /mnt/etc/rc.conf. Also edit /mnt/etc/locale.gen and make sure your locales are enabled.
 
{{note|Shutdown does currently not work, even if NETWORK_PERSIST is set to yes, see [[Diskless network boot NBD root#Known Problems|Known Problems/Shutdown Hang]]}}
 
===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.
 
==Boot configuration==
 
Copy the pxelinux.0 boot file from syslinux to /nbd/boot and create the pxelinux.cfg directory:
 
<pre>
 
cp /usr/lib/syslinux/pxelinux.0 /nbd/boot/
 
mkdir /nbd/boot/pxelinux.cfg/
 
</pre>
 
Now create and edit /nbd/boot/pxelinux.cfg/default, which contains the boot configuration for the client. Replace the value for nbd_server with the IP and Port your NBD server will be running on.
 
<pre>
 
default linux
 
 
 
label linux
 
kernel vmlinuz26
 
append initrd=kernel26.img ip=::::::dhcp nbd_server=192.168.0.1:10809 root=/dev/nbd0
 
</pre>
 
See [[Mkinitcpio#Using net|here]] for details about the ip option.
 
 
 
If your NBD device is encrypted, use the following append line instead:
 
<pre>
 
append initrd=kernel26.img ip=::::::dhcp nbd_server=192.168.0.1:10809 cryptdevice=/dev/nbd0:nbdcrypt root=/dev/mapper/nbdcrypt
 
</pre>
 
==Configuring the NBD server==
 
==Using a swap partition==
 
Although this has not been tested yet, you should be able to do this by creating a [[LVM]] volume group on /dev/nbd0 that will contain the root and swap partition and adding lvm2 before the filesystems hook in /mnt/etc/mkinitcpio.conf.
 
==Known Problems==
 
===Shutdown Hang===
 
Shutdown will hang at "Sending SIGTERM to processes". This probably happens because this also kills the nbd-client process and the connection to the root device is therefore lost. Unfortunately, there is currently no workaround for this.
 

Revision as of 02:27, 12 February 2013

Redirect to: