|
|
(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.
| |