

	\documentclass[a4paper,11pt]{article}
	\usepackage{ngerman}
	\usepackage[latin1]{inputenc}
	\setlength\parskip{\medskipamount}
	\setlength\parindent{0pt}
	\begin{document}

	
 % swap_over_nbd
 % Copyright Matthias Kleine
 % 
 % $Name: $
 % $Revision: 1.1.2.2 $
 % FIXME
 % SelfLinux-0.7.2
 %
 % Diese Datei ist Teil von SelfLinux http://www.selflinux.de
 %
 %%% FIXME

	\title{Swappen über Netzwerk}


	
	    \author{Matthias Kleine}
	    %\url{mailto:kleine_matthias@gmx.de}
    

	\maketitle

	
	
	%\ref{../index.tex}
	
		%\ref{systemverwaltung_2.tex}
		Fortgeschrittene Systemverwaltung
	\ref{swap_over_nbd}

    \par{Layout}
    Matthias Kleine
	    %\url{mailto:kleine_matthias@gmx.de}
    
 
	\tableofcontents{}

        
	\section{Einleitung} \label{d34e48}
        
    
    
  \par
  
In manchen Situationen kann es sinnvoll oder notwendig sein,
eine Swap-Partition auf einem entfernten Rechner einzurichten.
Leider ist es nicht einfach möglich, zu diesem Zweck NFS zu
verwenden. Zwar gibt es bereits seit den Kernelversionen 2.0.x
Patches, welche dies ermöglichen sollen, doch auch mit einem
Standard-2.4er Kernel scheitert der Versuch in den Tiefen
von TCP/IP.
    
    
  \par
  
Glücklicherweise (und verblüffenderweise zugleich) gibt es eine
Alternative. Diese befindet sich zwar laut Entwickler noch in einem
experimentellen Stadium, funktionierte jedoch in den Versuchen
des Autors auf Anhieb. Das gute Stück heißt ''Network Block Device''
und muß entweder in den Kernel einkompiliert sein oder als 
Modul vorliegen. Erstaunlicherweise fand sich das Modul bei 
mehreren Distributionen bereits unter /lib/modules, so daß (mit 
einem 2.2.x'er Kernel) ein einfaches 
     
     
  \par
  
      	       
         \begin{tt} \begin{scriptsize} root@linux /root/ \# 
modprobe nbd
	 \end{scriptsize} \end{tt} \linebreak 
      
    
    
  \par
  
genügte, um das Modul einzubinden. Wer dieses Glück nicht hat, wird
nicht um eine neue Kernelkonfiguration herumkommen. Die richtige
Option findet sich unter 
    
    
  \par
  
Block Devices -\verb+>+ Network Block Device support
    
    
  \par
  
Natürlich müssen sowohl der Rechner, der das neue Swapdevice 
erhalten soll, als auch der entfernte Rechner die entsprechende
Kernelunterstützung verwenden.
    
  \section{Konfiguration des entfernten Rechners} \label{d34e81}
        
    

    \subsection{Systemseitige Konfiguration} \label{d34e86}
        
    
      
  \par
  
Richten wir zunächst den Rechner ein, der den Swapspace zur Verfügung
stellen soll. Durch das obige modprobe-Kommando haben wir NBD-Support
eingebunden. Jetzt legen wir das neue Device an. Hierzu verwenden wir
mknod:
      
      
  \par
  
        
	   \begin{tt} \begin{scriptsize} root@linux /root/ \# 
mknod /dev/nd0 b 43 0
	   \end{scriptsize} \end{tt} \linebreak 
	
      
      
  \par
  
/dev/nd0 ist der neue Devicename. b zeigt an, daß es sich um ein 
Blockdevice handelt. 43 ist die sogenannte ''major number''. Alle 
Devices sind unter Linux in Gruppen eingeteilt, denen jeweils
besondere major numbers zugeordnet sind. Die einzelnen Geräte werden
dann durch eine ''minor number'' unterschieden. Diese wird hier als das 
letzte Argument, also ''0'' an mknod übergeben. Das neue Device können 
wir uns nun anschauen:
      
      
  \par
  
        
	   \begin{tt} \begin{scriptsize} root@linux /root/ \# 
ls -l /dev/nd0
	   \end{scriptsize} \end{tt} \linebreak 
	  \begin{tt} \begin{scriptsize} brw-rw-r--\verb+  + 1 root\verb+  +\verb+  + root\verb+  +\verb+  +\verb+  +43,\verb+  + 0 Feb 27 15:49 /dev/nd0\end{scriptsize} \end{tt} \linebreak
	
      
      
  \par
    
Major und minor number listet ls dort, wo normalerweise die Dateigröße
zu finden ist. Das Device ist jetzt angelegt und kann verwendet werden.
Für weitere Devices würden wir einfach eine fortlaufende minor number
vergeben:
      
      
  \par
  
        
	   \begin{tt} \begin{scriptsize} root@linux /root/ \# 
mknod /dev/nd1 b 43 1  
	   \end{scriptsize} \end{tt} \linebreak 
	   \begin{tt} \begin{scriptsize} root@linux /root/ \# 
mknod /dev/nd2 b 43 2
	   \end{scriptsize} \end{tt} \linebreak 
	   \begin{tt} \begin{scriptsize} root@linux /root/ \# 
mknod /dev/nd3 b 43 3
	   \end{scriptsize} \end{tt} \linebreak 
	
	
  
  
  \subsection{Installation und Konfiguration des NBD-Servers} \label{d34e137}
        
    
    
  \par
  
Um eine Datei zu exportieren, kann der NBD-Server von Pavel Machek 
verwendet werden. Pavel ist auch der Autor des Network Block Devices.
Das Programm kann über http://atrey.karlin.mff.cuni.cz/\~{}pavel/nbd/nbd.html
bezogen werden. Hier (und unter /usr/src/linux/Documentation/nbd.txt)
finden sich übrigens auch weitere Informationen zum Thema.
    
    
  \par
  
Nach dem Download kompilieren wir den Server einfach mittels 
        
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
configure \&\& make
       \end{scriptsize} \end{tt} \linebreak 
    
    
  \par
  
Dabei sollten zwei Binaries ndb-server und nbd-client erzeugt werden.
Auf dem Rechner, der den Swapspace zur Verfügung stellt, brauchen wir
nur den nbd-server. Dieselbe Prozedur werden wir später auf dem Rechner
wiederholen, der das neue Swapdevice erhalten soll. Auf diesem werden 
wir nur den nbd-client benötigen.
    
    
  \par
  
Nun erzeugen wir eine Datei, die wir später exportieren können. Hierzu
verwenden wir die Spezialdatei /dev/zero, die uns beliebig viele 
Nullbytes liefert. Quick and dirty geht es so:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
cat /dev/zero \verb+>+ /tmp/swapfile
       \end{scriptsize} \end{tt} \linebreak 
    
    
  \par
  
Um die Größe der Datei festzulegen, verwendet man allerdings besser dd
für diesen Zweck, zum Beispiel so:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
dd if=/dev/zero of=/tmp/swapfile bs=1024 count=65536
       \end{scriptsize} \end{tt} \linebreak 
    
    
  \par
  
Nun müssen wir dem nbd-server noch mitteilen, daß er diese Datei 
exportieren soll. Ein einfacher Aufruf ohne Parameter liefert uns 
folgendes Usage:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
nbd-server
       \end{scriptsize} \end{tt} \linebreak 
      \begin{tt} \begin{scriptsize} Usage: port file\_to\_export [size] [-r] \end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} \verb+  +\verb+  +\verb+  + -r read only\end{scriptsize} \end{tt} \linebreak
    
    
  \par
  
Wir suchen also einen freien Port und geben diesen mit der zugehörigen
Swapdatei an:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
nbd-server 1024 /tmp/delme
       \end{scriptsize} \end{tt} \linebreak 
      \begin{tt} \begin{scriptsize} Export size recognized as 34254848.\end{scriptsize} \end{tt} \linebreak
    
    
  \par
  
Die Datei ist exportiert.
    
  
 \section{Konfiguration des lokalen Rechners} \label{d34e210}
        
    
    
  \par
  
Die Einrichtung des Network Block Device geschieht analog zu derjenigen
auf dem Entfernten Rechner: Einbinden der Kernelunterstützung, Anlegen
der Devices mittels mknod und Kompilation des nbd-clients wurden bereits
oben beschrieben. Fehlen noch die Verbindung zum nbd-server und das
Aufsetzen des Swapdevice.
    
    
  \par
  
Die Verbindung zum entfernten Rechner stellen wir mittels des nbd-client
her. Betrachten wir zunächst dessen Usage-Informationen:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
nbd-client
       \end{scriptsize} \end{tt} \linebreak 
      \begin{tt} \begin{scriptsize} Usage: host port nbd\_device -swap\end{scriptsize} \end{tt} \linebreak
    
    
  \par
  
Im wesentlichen werden also der Hostname des exportierenden Hosts, die 
Portnummer und ein vorhandenes Network Block Device verlangt. Die Option 
-swap hat der Autor bis zum jetzigen Zeitpunkt noch nicht verwendet, so
daß wir diese einmal außer Acht lassen.
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
nbd-client helios 1024 /dev/nd0
       \end{scriptsize} \end{tt} \linebreak 
    
    
  \par
  
Damit haben wir eine TCP-Verbindung zu der zuvor exportierten Datei. 
Richten wir diese also nun als unser neues Swapfile ein:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
mkswap /dev/nd0
       \end{scriptsize} \end{tt} \linebreak 
      \begin{tt} \begin{scriptsize} Setting up swapspace version 0, size = 34250752 bytes\end{scriptsize} \end{tt} \linebreak
       \linebreak  \begin{tt} \begin{scriptsize}  \linebreak root@linux /root/ \# 
swapon /dev/nd0
       \end{scriptsize} \end{tt} \linebreak 
    
    
  \par
  
Das war's. Schau'n wir mal nach:
    
    
       \begin{tt} \begin{scriptsize} root@linux /root/ \# 
cat /proc/meminfo
       \end{scriptsize} \end{tt} \linebreak 
      \begin{tt} \begin{scriptsize} \verb+  +\verb+  +\verb+  +\verb+  +total:\verb+  +\verb+  +used:\verb+  +\verb+  +free:\verb+  +shared: buffers:\verb+  +cached:\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} Mem:\verb+  +31657984 14843904 16814080\verb+  +\verb+  +\verb+  +\verb+  +0\verb+  +\verb+  +24576\verb+  +9510912\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} Swap: 34250752\verb+  +5124096 29126656\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} MemTotal:\verb+  +\verb+  + 30916 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} MemFree:\verb+  +\verb+  +\verb+  +16420 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} MemShared:\verb+  +\verb+  +\verb+  +\verb+  +0 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} Buffers:\verb+  +\verb+  +\verb+  +\verb+  + 24 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} Cached:\verb+  +\verb+  +\verb+  +\verb+  +9288 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} HighTotal:\verb+  +\verb+  +\verb+  +\verb+  +0 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} HighFree:\verb+  +\verb+  +\verb+  +\verb+  + 0 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} LowTotal:\verb+  +\verb+  + 30916 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} LowFree:\verb+  +\verb+  +\verb+  +16420 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} SwapTotal:\verb+  +\verb+  +33448 kB\end{scriptsize} \end{tt} \linebreak
      \linebreak\begin{tt} \begin{scriptsize} SwapFree:\verb+  +\verb+  + 33448 kB \end{scriptsize} \end{tt} \linebreak
    
    
  \par
  
Viel Spass beim Swappen.
    
  
	\ref{inhalt.tex}


	\end{document}
	
