个人工具

UbuntuHelp:Installation/OnNFSDriveWithLocalBoot

来自Ubuntu中文

跳转至: 导航, 搜索

This article describes how to install Feisty onto a machine that has a hard drive (Or, as I'll be doing, A CompactFlash (CF) card) for /boot only with root being on an NFS share somewhere on the network. First off, you'll want a MiniCD (Installation/MinimalCD) to install the base system. The base system when installed takes up about 850MB, so make sure your drive or CF card has enough space to handle this. You may prefer to install to hard drive first and transfer /boot to CF later on. Minimal install is pretty textbook, don't select any of the extra (BIND, LAMP, Xubuntu etc) packages yet, just get the base system installed. Note that when partitioning, you'll want to disable swap and ensure /boot has its own partition (100MB is more than enough). Once you are booted into your minimal install, login and:

sudo su -
cd /mnt/
mkdir jarlsbergNFS/
mount -tnfs -onolock 192.168.0.15:/mnt/storage/NFS jarlsbergNFS/

You may want to install also nfs-common and smbfs packages if you have problems to mount the nfs:

sudo apt-get install nfs-common smbfs

This relies on there being a working NFS server on 192.168.0.15. The /etc/exports on that machine reads:

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See unfsd(8).
/mnt/storage 192.168.0.1/24(rw,no_root_squash,async)

Now you want to copy the current (mini) install over to the NFS server:

cp -ax /. jarlsbergNFS/

And make the NFS install our working directory:

cd jarlsbergNFS/

And now for some hackery. We need to add /proc and /sys to fstab if they do not exist already. Note there is no first / on /etc/fstab. We're editing the copy on the NFS server. You will also want to comment out the entries for / and swap, but leave /boot as it is.

vim etc/fstab
Add the lines:
proc    /proc    proc    defaults   0 0
sys     /sys     sysfs   defaults   0 0

There is currently a bug in NetworkManager that means even though the machine gets an IP just fine from the kernel booting the network IF goes down and up again. This is bad, we don't want the network to go down while trying to read files over the network! A quick hack is...

vim etc/network/interfaces
Comment out the lines for eth0 (Or whatever your ethernet card is called)

We also need to do this to stop NetworkManager messing with the network card. Bit of a hack...

vim etc/default/NetworkManager
vim etc/default/NetworkManagerDispatcher
Add a line with "exit" to both files

We now need to generate an NFS'able initramfs. (Note the first / means we're editing the local copy.)

cd /etc/initramfs-tools/
vim initramfs.conf
Edit BOOT=local to read BOOT=nfs

Before we update the init images, we should back up the current ones just so we can still get back into the local install if ever anything goes horribly wrong...

cd /boot
mv initrd.img-2.6.20-16-generic initrd.img-2.6.20-16-generic-OLD

Now we want to update the initramfs image:

update-initramfs -k all -c

We (should!) have a new image called initrd.img-2.6.20-16-generic in /boot. We want this to be the NFS one.

mv initrd.img-2.6.20-16-generic initrd.img-2.6.20-16-generic-NFS
mv initrd.img-2.6.20-16-generic-OLD initrd.img-2.6.20-16-generic

Now we need to edit grubs menu to make it boot from NFS rather than the local drive. You can substitute in an IP address rather than letting kernel sort the IP, but doing things by dhcp means things like nameservers will be set up for you (Provided your dhcp server is set up nicely! :-)

vim /boot/grub/menu.lst
Add the lines:
title           Ubuntu, NFS Boot (POLARIS), kernel 2.6.20-16-generic
root            (hd0,5)
kernel          /vmlinuz-2.6.20-16-generic root=/dev/nfs nfsroot=192.168.0.15:/mnt/storage/NFS ip=dhcp
initrd          /initrd.img-2.6.20-16-generic-NFS

Now you might want to change back your initramfs.conf, just in case you want to get back to your non-NFS mini-install.

vim /etc/initramfs-tools/initramfs.conf
Change BOOT=nfs to BOOT=local

Now you should be able to reboot, select the NFS boot grub option you added to menu.lst and boot into root-over-NFS ubuntu! Note that you will only have CLI access with very limited tools. So check you are up to date...:

sudo apt-get update
sudo apt-get upgrade

And then install a flavour of ubuntu:

sudo apt-get install <something>

(Alternatives...)
edubuntu-desktop - edubuntu desktop system
kubuntu-desktop - Kubuntu desktop system
ubuntu-desktop - The Ubuntu desktop system
xubuntu-desktop - Xubuntu desktop system

Hopefully by now you should have a working ubuntu desktop machine, with /boot on a small partition on hard drive (Or CompactFlash!) and everything else on your NFS server. You may wish to add swap to the machine; I ran into the problem of not having a local swap partition and having fun getting swap-over-NFS working. What follows are some instructions for getting nbd working. nbd (Network Block Device) allows you to sort-of do block devices over ethernet :). Seeing as linux kernel doesn't allow for swap-over-NFS, this seems to be the easiest way to get root over NFS with remote swap. Note that this _very_ buggy and can cause a lot of problems. I'm running without swap on my box and it seems to be fine :-) On your server, you'll want to grab the nbd-server package.

apt-get install nbd-server

Now you'll want to make some swap space. cd to your root-over-NFS root directory and mess around a bit.

cd /mnt/jarlsbergNFS/
mkdir swap/
dd if=/dev/zero of=swap/swap count=256 bs=1024k
chmod 777 swap

Still on the server, you'll want to initialise the nbd-server.

nbd-server 1100 /mnt/jarlsbergNFS/swap/swap

Now back on your client machine (Replacing the IP with that of the server)

apt-get install nbd-client
nbd-client 192.168.0.33 1100 /dev/nbd0

And now you will want to make this block device into swap, mount it and check everything is okay:

mkswap /dev/nbd0
swapon /dev/nbd0
cat /proc/swaps
>>Filename                                Type            Size    Used    Priority
>>/dev/nbd0                               partition       262136  0       -1

Having swap on a machine somewhere else on the network is going to get pretty slow when your machine does start to swap, so you are better off having lots and lots of RAM rather than relying on swap. Done!