Difference between revisions of "Diskless network boot NBD root"

From ArchWiki
Jump to: navigation, search
m (Fixed double redirect)
(37 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 /mnt/etc/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#Shutdown Hang|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: