--- trunk/zfs-foredrag.tex	2014/01/02 11:53:00	8
+++ trunk/zfs-foredrag.tex	2014/02/23 12:56:54	12
@@ -54,6 +54,19 @@
 \newcommand{\rfc}[1]{\href{http://tools.ietf.org/html/rfc#1}{RFC~#1}}
 \newcommand{\prfc}[1]{(\rfc{#1})}
 
+% Fontstørrelser:
+
+% \tiny
+% \scriptsize
+% \footnotesize
+% \small
+% \normalsize
+% \large
+% \Large
+% \LARGE
+% \huge
+% \Huge
+
 \title{\textbf{ZFS}}
 \subtitle{Siste ord innen filsystemer}
 \author[T.~Endrestøl]{\href{http://fig.ol.no/~trond/}{Trond Endrestøl}}
@@ -109,7 +122,7 @@
     \texttt{\$${}$Ximalas${}$\$}
   \item Driverfila for denne PDF-fila bærer denne identifikasjonen:\\
     \svndriverfil
-  \item Copyright \copyright\ 2013 Trond Endrestøl
+  \item Copyright \copyright\ 2014 Trond Endrestøl
   \item Dette verket er lisensiert med:
     \href{http://creativecommons.org/}{Creative Commons},
     \href{http://creativecommons.org/licenses/by-sa/3.0/no/}{Navngivelse-DelPåSammeVilkår
@@ -121,25 +134,171 @@
 \section*{Oversikt over hele foredraget}
 \begin{frame}%[allowframebreaks]
   \frametitle{Oversikt over hele foredraget}
-  \framesubtitle{Del 1: ZFS?}
+  \framesubtitle{Del 1: Lagringssystemer}
   \tableofcontents[part=1]%[pausesections]
 \end{frame}
 
 \begin{frame}%[allowframebreaks]
   \frametitle{Oversikt over hele foredraget}
-  \framesubtitle{Del 2: ZFS!}
+  \framesubtitle{Del 2: ZFS?}
   \tableofcontents[part=2]%[pausesections]
 \end{frame}
 
+\begin{frame}%[allowframebreaks]
+  \frametitle{Oversikt over hele foredraget}
+  \framesubtitle{Del 3: ZFS!}
+  \tableofcontents[part=3]%[pausesections]
+\end{frame}
+
+\begin{frame}%[allowframebreaks]
+  \frametitle{Oversikt over hele foredraget}
+  \framesubtitle{Del 4: Oppstartsmiljøer}
+  \tableofcontents[part=4]%[pausesections]
+\end{frame}
+
+\part{Lagringssystemer}
+
+\begin{frame}
+  \partpage
+\end{frame}
+
+\section*{Oversikt over del~1: Lagringssystemer}
+\begin{frame}%[allowframebreaks]
+  \frametitle{Oversikt over del~1: Lagringssystemer}
+    \tableofcontents%[pausesections]
+\end{frame}
+
+\section{Hva kan et lagringssystem bestå av?}
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hva kan et lagringssystem bestå av?}
+  \tiny
+
+  \begin{multicols}{2}
+    \pause
+    Enkel server med innebygget lagring
+
+    \pause
+    \begin{enumerate}[<+->]
+    \item Strømforsyning
+    \item Strømkabler
+    \item Harddisker
+    \item Firmware i harddisker
+    \item I/O-kabler
+    \item Harddiskkontroller integrert i\slash tilkoblet hovedkortet
+    \item Firmware i harddiskkontroller
+    \item Hovedkort og dets kobberbaner
+    \item South bridge
+    \item DMA-kontroller på hovedkortet
+    \item Arbeidsminne tilkoblet hovedkortet
+    \item CPU
+    \end{enumerate}
+
+    \columnbreak % Av en eller annen grunn sørger \columnbreak for at den samme sliden gjentas en gang ekstra for denne framen akkurat her
+
+    \pause
+    Avansert server med ekstern lagring
+
+    \pause
+    \begin{enumerate}[<+->]
+    \item Strømforsyning
+    \item Strømkabler
+    \item Harddisker montert i diskhyller
+    \item Firmware i harddisker
+    \item I/O-kabler
+    \item Harddiskkontroller
+    \item Firmware i harddiskkontrolleren
+    \item Grensesnitt i harddiskkontrolleren for ekstern I/O
+    \item Kabler for ekstern I/O (og kanskje en superrask switch)
+    \item Grensesnitt for ekstern I/O tilkoblet hovedkortet
+    \item Hovedkort og dets kobberbaner
+    \item South bridge
+    \item DMA-kontroller på hovedkortet
+    \item Arbeidsminne tilkoblet hovedkortet
+    \item CPU
+    \end{enumerate}
+  \end{multicols}
+\end{frame}
+
+\section{Hva kan gå galt i et lagringssystem?}
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hva kan gå galt i et lagringssystem?}
+  \pause
+  \begin{itemize}[<+->]
+  \item Data som en gang ble lagret, avleses senere som noe helt annet
+  \end{itemize}
+\end{frame}
+
+\section{Hvor kan det gå galt i et lagringssystem?}
+\begin{frame}[allowframebreaks]
+  \frametitle{Hvor kan det gå galt i et lagringssystem?}
+  %\pause
+  \begin{itemize}%[<+->]
+  \item Kort sagt: overalt
+  \end{itemize}
+\framebreak
+  \begin{enumerate}%[<+->]
+  \item Strømforsyningen
+    \begin{itemize}%[<+->]
+    \item Underdimensjonert; lavere spenning\slash strøm til øvrige
+      komponenter; uttørkede elektrolyttkondensatorer; utilstrekkelig
+      avkjøling
+    \end{itemize}
+  \item Strømkabel mellom strømforsyning og harddisk
+    \begin{itemize}%[<+->]
+    \item Vakkel i kontaktene; (begynnende) brudd i lederne
+    \end{itemize}
+  \item Harddisk
+    \begin{itemize}%[<+->]
+    \item Slitasje på indre deler; programmeringsfeil i firmware;
+      vibrasjoner; lese fra\slash skrive til feil diskblokk
+    \end{itemize}
+  \item I/O-kabel mellom harddisk og harddiskkontroller
+    \begin{itemize}%[<+->]
+    \item Vakkel i kontaktene; (begynnende) brudd i lederne
+    \end{itemize}
+  \item Harddiskkontroller
+    \begin{itemize}%[<+->]
+    \item Programmeringsfeil i firmware
+    \end{itemize}
+  \item Grensesnittet mellom harddiskkontroller og hovedkort
+    \begin{itemize}%[<+->]
+    \item Vakkel i PCIe-kontakt
+    \end{itemize}
+  \item Kobberbanene i hovedkortet
+    \begin{itemize}%[<+->]
+    \item (Begynnende) brudd etter ESD-skade, utilstrekkelig avkjøling
+    \end{itemize}
+  \item Grensesnitt mellom DMA-kontroller og hovedkort
+    \begin{itemize}%[<+->]
+    \item Se kobberbanene i hovedkortet
+    \end{itemize}
+  \item Grensesnitt mellom hovedkort og arbeidsminne
+    \begin{itemize}%[<+->]
+    \item Vakkel i soklene
+    \end{itemize}
+  \item Arbeidsminne
+    \begin{itemize}%[<+->]
+    \item ESD-skade; kosmisk stråling; alfapartikler fra radioaktiv
+      forurensning i IC-innkapslingen
+    \end{itemize}
+  \end{enumerate}
+%\framebreak
+  \begin{itemize}%[<+->]
+  \item Hvor mange muligheter ble dette?
+  \item Hvor mange harddisker har du i dine systemer?
+  \item Har du kontrollen?
+  \end{itemize}
+\end{frame}
+
 \part{ZFS?}
 
 \begin{frame}
   \partpage
 \end{frame}
 
-\section*{Oversikt over del~1: ZFS?}
+\section*{Oversikt over del~2: ZFS?}
 \begin{frame}%[allowframebreaks]
-  \frametitle{Oversikt over del~1: ZFS?}
+  \frametitle{Oversikt over del~2: ZFS?}
     \tableofcontents%[pausesections]
 \end{frame}
 
@@ -150,30 +309,205 @@
   \begin{itemize}[<+->]
   \item ZFS er
     \begin{enumerate}[<+->]
-    \item Logisk volumhåndterer\hfill(Logical Volume Manager, LVM)
-    \item Filsystem med bl.a.\ snapshots, kloner, kompresjon og deduplisering
+    \item Logisk volumhåndterer («Logical Volume Manager», LVM)
+    \item Filsystem med bl.a.\ snapshots, kloner, kompresjon og
+      deduplisering
     \item Tilbyr også «zvolumer» som lagringsenheter for andre
       filsystemer
     \end{enumerate}
-  \item ZFS tar dataintegritet på alvor; hastighet kommer i senere rekker
-  \item Enklere organisering enn «Storage Spaces» i Microsoft Windows
+  \item ZFS tar
+    \begin{itemize}[<+->]
+    \item Dataintegritet på alvor
+    \item Deretter brukervennlighet (for administratorer)
+    \item Hastighet kommer i senere rekker
+    \end{itemize}
+  \item ZFS er langt enklere enn «Storage Spaces» i Microsoft Windows
     Server 2012
-  \item Lagringen organiseres i pooler som kan bestå av
+  \end{itemize}
+\end{frame}
+
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hva er ZFS?}
+  %\pause
+  \begin{itemize}[<+->]
+  \item Tradisjonelt oppsett av Storage Spaces
+    \begin{itemize}[<+->]
+    \item Velge ut harddisker og opprette en pool
+    \item Opprette et volum med ønsket størrelse og lagringsform
+      \begin{itemize}[<+->]
+      \item striping
+      \item speiling, eller
+      \item RAID~5
+      \end{itemize}
+    \item Opprette \textit{ett\/} filsystem på volumet
+      \begin{itemize}[<+->]
+      \item NTFS
+      \item ReFS
+      \end{itemize}
+    \item Begynne å lagre data
+    \end{itemize}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hva er ZFS?}
+  %\pause
+  \begin{itemize}[<+->]
+  \item ZFS organiserer lagringen i pooler som kan bestå av
     \begin{enumerate}[<+->]
-    \item Enkeltdisker\slash partisjoner
-    \item Striping (RAID~0) mellom to eller flere disker\slash partisjoner
-    \item Speiling (RAID~1) mellom to eller flere disker\slash partisjoner
+    \item Enkeltharddisker\slash partisjoner
+    \item Striping (RAID~0) mellom to eller flere harddisker\slash
+      partisjoner
+    \item Speiling (RAID~1) mellom to eller flere harddisker\slash
+      partisjoner
     \item \texttt{raidz1} (RAID~5, enkel paritet) over tre eller flere
-      disker\slash partisjoner
+      harddisker\slash partisjoner
     \item \texttt{raidz2} (RAID~6, dobbel paritet) over fire eller
-      flere disker\slash partisjoner
+      flere harddisker\slash partisjoner
     \item \texttt{raidz3} («RAID~7», trippel paritet) over fem eller
-      flere disker\slash partisjoner
+      flere harddisker\slash partisjoner
     \end{enumerate}
   \item Visse kombinasjoner av det overstående er også mulig
+  \item Filsystemet blir opprettet samtidig med poolen
+    \begin{itemize}[<+->]
+    \item Nye filsystemer kan opprettes i et hierarki
+    \end{itemize}
   \end{itemize}
 \end{frame}
 
+\section{Et eksempel på en pool}
+\begin{frame}[fragile]%[allowframebreaks]
+  \frametitle{Et eksempel på en pool}
+  \pause
+  \begin{multicols}{2}
+\begin{Verbatim}[commandchars=\\\{\},fontsize=\tiny]
+trond@enterprise:~>\Alert{3|handout:0}{zpool status enterprise_zdata}
+  pool: \Alert{4,7|handout:0}{enterprise_zdata}
+ state: \Alert{7|handout:0}{ONLINE}
+  scan: \Alert{10|handout:0}{scrub repaired 0 in 2h15m with \Alert{11|handout:0}{0 errors} on Wed Jan  1 07:18:51 2014}
+config:
+
+        NAME              STATE     READ WRITE CKSUM
+        \Alert{4,7|handout:0}{enterprise_zdata}  \Alert{7|handout:0}{ONLINE}       \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}
+                \Alert{5,8|handout:0}{raidz1-0}  \Alert{8|handout:0}{ONLINE}       \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}
+                  \Alert{6,8|handout:0}{ada2}    \Alert{8|handout:0}{ONLINE}       \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}
+                  \Alert{6,8|handout:0}{ada3}    \Alert{8|handout:0}{ONLINE}       \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}
+                  \Alert{6,8|handout:0}{ada4}    \Alert{8|handout:0}{ONLINE}       \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}     \Alert{9|handout:0}{0}
+
+\Alert{11|handout:0}{errors: No known data errors}
+trond@enterprise:~>\Alert{11|handout:0}{zfs get creation enterprise_zdata}
+NAME              PROPERTY  VALUE                  SOURCE
+enterprise_zdata  creation  \Alert{11|handout:0}{Sun Jan  8 14:14 2012}  -
+\end{Verbatim}
+
+  \pause
+
+  \small
+  \begin{itemize}[<+->]
+  \item Kommando for å vise
+    status%: \texttt{zpool status enterprise\_zdata}
+  \item Poolen heter \texttt{enterprise\_zdata}
+  \item Består av én «vdev» («virtual device»), \texttt{raidz1},
+    striping med enkel paritet
+  \item Medlemmene er de tre harddiskene \texttt{ada2}, \texttt{ada3}
+    og \texttt{ada4}
+  \item Poolen har det bra og er \texttt{ONLINE}
+  \item Det samme gjelder for vdev-en og dens tre medlemmer
+  \item «Null hull» i telleverkene
+  \item Siste skrubbing avsluttet 1.~januar 2014,
+    kl.~07:18:51%, etter omlag 2 timer og 15 minutter med gjennomlesing
+  \item Ingen feil registrert siden 8.~januar 2012, kl.~14:14 (har
+    aldri kjørt \texttt{zpool clear})
+  \end{itemize}
+  \end{multicols}
+\end{frame}
+
+\section{Et eksempel på filsystemer i ZFS}
+\begin{frame}[fragile]%[allowframebreaks]
+  \frametitle{Et eksempel på filsystemer i ZFS}
+  \pause
+
+\begin{Verbatim}[commandchars=\\\{\},fontsize=\tiny]
+trond@enterprise:~>zfs list -r enterprise_zroot
+NAME                                           USED  AVAIL  REFER  MOUNTPOINT
+enterprise_zroot                              35,0G   406G   144K  legacy
+enterprise_zroot/ROOT                         3,47G   413G   144K  legacy
+enterprise_zroot/ROOT/20131126-r258614        1,43G   413G  1,43G  legacy
+enterprise_zroot/ROOT/20131207-r259060        1,02G   413G  1,02G  legacy
+enterprise_zroot/ROOT/20140103-r260223        1,02G   413G  1,02G  legacy
+enterprise_zroot/do-not-destroy                144K   407G   144K  legacy
+enterprise_zroot/media                         208K   406G   208K  /media
+enterprise_zroot/nfs                           152K   406G   152K  /nfs
+enterprise_zroot/tmp                          6,87M  9,99G  6,87M  /tmp
+enterprise_zroot/usr                          17,5G   406G   144K  /usr
+enterprise_zroot/usr/compat                    168K   406G   168K  /usr/compat
+enterprise_zroot/usr/local                    2,63G   406G  2,53G  /usr/local
+enterprise_zroot/usr/local/certs               220K   406G   220K  /usr/local/certs
+enterprise_zroot/usr/local/etc                 105M   406G   101M  /usr/local/etc
+enterprise_zroot/usr/local/etc/namedb          144K   406G   144K  /usr/local/etc/namedb
+enterprise_zroot/usr/local/etc/shellkonfig3   3,63M   406G   320K  /usr/local/etc/shellkonfig3
+enterprise_zroot/usr/obj                      4,63G   406G  4,63G  /usr/obj
+enterprise_zroot/usr/packages                  472M   406G   472M  /usr/packages
+enterprise_zroot/usr/ports                    8,99G   406G  1,54G  /usr/ports
+enterprise_zroot/usr/ports/distfiles          3,71G   406G  3,71G  /usr/ports/distfiles
+enterprise_zroot/usr/ports/local               288K   406G   288K  /usr/ports/local
+enterprise_zroot/usr/ports/packages           3,74G   406G  3,74G  /usr/ports/packages
+enterprise_zroot/usr/ports/workdirs            336K   406G   336K  /usr/ports/workdirs
+enterprise_zroot/usr/src                       826M   406G   826M  /usr/src
+enterprise_zroot/var                          6,38G   406G  10,1M  /var
+enterprise_zroot/var/crash                    1,19G   406G  1,19G  /var/crash
+enterprise_zroot/var/db                       70,4M   406G  23,8M  /var/db
+enterprise_zroot/var/db/darkstat               512K   406G   512K  /var/db/darkstat
+enterprise_zroot/var/db/pkg                   25,1M   406G  25,1M  /var/db/pkg
+enterprise_zroot/var/db/ports                 8,18M   406G  8,18M  /var/db/ports
+enterprise_zroot/var/db/sup                   12,8M   406G  12,8M  /var/db/sup
+enterprise_zroot/var/empty                     144K   406G   144K  /var/empty
+enterprise_zroot/var/log                       733M   406G   733M  /var/log
+enterprise_zroot/var/mail                     3,68M   406G   328K  /var/mail
+enterprise_zroot/var/named                     392K   406G   392K  /var/named
+enterprise_zroot/var/run                       332K   406G   332K  /var/run
+enterprise_zroot/var/spool                    4,39G   406G  2,13M  /var/spool
+enterprise_zroot/var/spool/cvsup              4,39G   406G  4,39G  /var/spool/cvsup
+enterprise_zroot/var/tmp                      1,49M  10,0G  1,49M  /var/tmp
+enterprise_zroot/var/unbound                   144K   406G   144K  /var/unbound
+\end{Verbatim}
+\end{frame}
+
+\section{Et annet eksempel på filsystemer i ZFS}
+\begin{frame}[fragile]%[allowframebreaks]
+  \frametitle{Et annet eksempel på filsystemer i ZFS}
+  \pause
+
+\begin{Verbatim}[commandchars=\\\{\},fontsize=\tiny]
+trond@enterprise:~>zfs list -r enterprise_zdata
+NAME                                        USED  AVAIL  REFER  MOUNTPOINT
+enterprise_zdata                            326G   586G   224K  legacy
+enterprise_zdata/do-not-destroy             192K   587G   192K  legacy
+enterprise_zdata/home                       315G   586G   442K  /home
+enterprise_zdata/home/trond                 291G   586G   269M  /home/trond
+enterprise_zdata/home/trond/arbeid         15,8M   586G  15,8M  /home/trond/arbeid
+enterprise_zdata/home/trond/bzrarbeid       343M   586G   343M  /home/trond/bzrarbeid
+enterprise_zdata/home/trond/c              5,10M   586G  5,10M  /home/trond/c
+enterprise_zdata/home/trond/cvsroot         655K   586G   655K  /home/trond/cvsroot
+enterprise_zdata/home/trond/download       3,92G   586G  3,92G  /home/trond/download
+enterprise_zdata/home/trond/fra-defiant    35,8G   586G  35,8G  /home/trond/fra-defiant
+enterprise_zdata/home/trond/fra-mentor      281M   586G   281M  /home/trond/fra-mentor
+enterprise_zdata/home/trond/fra-sovereign   104G   586G   104G  /home/trond/fra-sovereign
+enterprise_zdata/home/trond/gitarbeid      4,46G   586G  4,46G  /home/trond/gitarbeid
+enterprise_zdata/home/trond/hgarbeid        464M   586G   464M  /home/trond/hgarbeid
+enterprise_zdata/home/trond/iptraf         4,37M   586G  4,37M  /home/trond/iptraf
+enterprise_zdata/home/trond/knuth          27,0M   586G  27,0M  /home/trond/knuth
+enterprise_zdata/home/trond/mail            284M   586G   224M  /home/trond/mail
+enterprise_zdata/home/trond/public_html    1,00G   586G  1,00G  /home/trond/public_html
+enterprise_zdata/home/trond/rfc            2,29G   586G  2,29G  /home/trond/rfc
+enterprise_zdata/home/trond/steam           122G   586G   122G  /home/trond/steam
+enterprise_zdata/home/trond/svnarbeid      12,4G   586G  12,4G  /home/trond/svnarbeid
+enterprise_zdata/home/trond/svnroot         192K   586G   192K  /home/trond/svnroot
+enterprise_zdata/home/trond/svnup          2,95G   586G  2,95G  /home/trond/svnup
+enterprise_zdata/home/trond/tmp             212M   586G   212M  /home/trond/tmp
+\end{Verbatim}
+\end{frame}
+
 \section{Hva er grensene til ZFS?}
 \begin{frame}%[allowframebreaks]
   \frametitle{Hva er grensene til ZFS?}
@@ -207,20 +541,34 @@
   \item ZFS unngår RAID~5-skrivehullet til eldre RAID-kontrollere som
     \begin{enumerate}[<+->]
     \item Skriver nye data til de samme datablokkene som tidligere
-    \item Leser gamle, urørte data fra de samme datablokkene
-    \item Regner ut ny paritet for datablokkene
+    \item Leser gamle, urørte data fra de samme datablokkene i samme stripe
+    \item Regner ut ny paritet for datablokkene i samme stripe
     \item Skriver oppdatert paritet til de samme paritetsblokkene som
       tidligere
       \begin{itemize}[<+->]
-      \item Hva skjer nå \textit{og\/} senere hvis du får strømbrudd
-        mellom punktene 1 og 4?
+      \item Hva skjer \textit{nå\/} og \textit{senere\/} hvis du får
+        strømbrudd mellom punktene 1 og 4?
       \item Har diskkontrolleren batteribeskyttet minne?
       \end{itemize}
     \end{enumerate}
-  \item ZFS skriver fulle striper; data og paritet samtidig
+  \end{itemize}
+\end{frame}
+
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hvordan virker ZFS?}
+  %\pause
+  \begin{itemize}[<+->]
+  \item ZFS skriver komplette striper; data og paritet samtidig
   \item ZFS bruker «copy-on-write»; skriver nye data til ledige
     diskblokker
-  \item Endringer som hører sammen, samles i transaksjonsgrupper
+  \item Endringer som hører sammen, samles i transaksjonsgrupper («txg»)
+  \end{itemize}
+\end{frame}
+
+\begin{frame}%[allowframebreaks]
+  \frametitle{Hvordan virker ZFS?}
+  %\pause
+  \begin{itemize}[<+->]
   \item Sjekksummer brukes for alt som blir lagret
     \begin{itemize}[<+->]
     \item ZFS kontrollerer at leste data er de samme som ble skrevet
@@ -228,7 +576,7 @@
     \item Finnes alternativer, enten speilkopier eller paritet, så
       \begin{enumerate}[<+->]
       \item Leveres korrekte data til applikasjonen, og
-      \item Avviket korrigeres automatisk på den syke disken
+      \item Avviket korrigeres automatisk på den syke disken («resilver»)
       \end{enumerate}
     \item Finnes ingen alternativer, så må filene restaureres fra
       backup
@@ -243,6 +591,15 @@
   \begin{itemize}[<+->]
   \item \alert{Ikke} bruk ZFS sammen med RAID-kontrollere!
   \item RAID-kontrolleren kan i verste fall motarbeide ZFS
+    \begin{itemize}[<+->]
+    \item RAID-kontrolleren kan finne på å
+      \begin{itemize}[<+->]
+      \item Stokke om på skriverekkefølgen
+      \item Utsette skriving av nye data
+      \end{itemize}
+    \item Harddiskene kan også oppføre seg som skissert over
+    \item Har du skifta batteriet i RAID-kontrolleren din?
+    \end{itemize}
   \item Sett RAID-kontrolleren i JBOD-modus, eller
   \item La hver harddisk være sitt enslige RAID~0-volum
   \end{itemize}
@@ -255,8 +612,8 @@
   \begin{itemize}[<+->]
   \item Utviklet av Jeffrey Bonwick, Matthew Ahrens og flere kollegaer
     ved Sun Microsystems, Inc.
-  \item Arbeidet begynte i 2001
-  \item Første prototyp ble ferdig 31.\ oktober 2001 (halloween)
+  \item Arbeidet begynte i 2001 og første prototyp ble ferdig 31.\ 
+    oktober 2001 (halloween)
   \item ZFS $\to$ Solaris, oktober 2005
   \item ZFS er lisensiert etter «Common Development and Distribution
     License» (CDDL)
@@ -281,15 +638,17 @@
   \frametitle{Versjonsnummer i ZFS}
   \pause
   \begin{itemize}[<+->]
-  \item Pool-versjonene 1--28 og filsystem-versjonene 1--5 er tilgjengelig
-    gjennom OpenSolaris og illumos
-  \item Pool-versjonene 29-34 og filsystem-versjon 6 er bare tilgjengelig
-    i Solaris 11 (Express)
+  \item Pool-versjonene 1--28 og filsystem-versjonene 1--5 er
+    tilgjengelig gjennom OpenSolaris og illumos
+  \item Pool-versjonene 29-34 og filsystem-versjon 6 er bare
+    tilgjengelig i Solaris 11 (Express)
   \item OpenSolaris har gått videre til feature-flags og pool-versjon
     1000
   \item illumos har gått videre til feature-flags og pool-versjon 5000
   \item De fleste OS-er utenom Solaris, samarbeider om
     videreutviklingen av illumos-varianten
+  \item Listene på de neste slidene er kopiert fra
+    \texttt{\url{http://en.wikipedia.org/wiki/ZFS}}
   \end{itemize}
 \end{frame}
 
@@ -301,15 +660,15 @@
   \begin{enumerate}%[<+->]
   \item First release
   \item Ditto Blocks
-  \item Hot spares, double-parity RAID-Z (\texttt{raidz2}), improved RAID-Z
-    accounting
+  \item Hot spares, double-parity RAID-Z (\texttt{raidz2}), improved
+    RAID-Z accounting
   \item zpool history
   \item gzip compression for ZFS datasets
-  \item "\texttt{bootfs}" pool property
+  \item "\texttt{bootfs}"\ pool property
   \item ZIL: adds the capability to specify a separate Intent Log
     device or devices
-  \item ability to delegate \texttt{zfs}(1M) administrative tasks to ordinary
-    users
+  \item ability to delegate \texttt{zfs}(1M) administrative tasks to
+    ordinary users
   \item CIFS server support, dataset quotas
   \item Devices can be added to a storage pool as "cache devices"
   \item Improved \texttt{zpool scrub}/resilver performance
@@ -317,8 +676,8 @@
   \item Properties: \texttt{usedbysnapshots}, \texttt{usedbychildren},
     \texttt{usedbyrefreservation}, and \texttt{usedbydataset}
   \item passthrough-x aclinherit property support
-  \item Properties: \texttt{userquota}, \texttt{groupquota}, \texttt{userused} and \texttt{groupused};
-    also required FS v4
+  \item Properties: \texttt{userquota}, \texttt{groupquota},
+    \texttt{userused} and \texttt{groupused}; also required FS v4
   \item STMF property support
   \item triple-parity RAID-Z
   \item ZFS snapshot holds
@@ -407,9 +766,9 @@
   \partpage
 \end{frame}
 
-\section*{Oversikt over del~2: ZFS!}
+\section*{Oversikt over del~3: ZFS!}
 \begin{frame}%[allowframebreaks]
-  \frametitle{Oversikt over del~2: ZFS!}
+  \frametitle{Oversikt over del~3: ZFS!}
     \tableofcontents%[pausesections]
 \end{frame}
 
@@ -418,7 +777,7 @@
   \frametitle{Administrasjon av ZFS}
   \pause
   \begin{itemize}[<+->]
-  \item To kommandoer (med underkommandoer):
+  \item To kommandoer (med underkommandoer)
     \begin{enumerate}[<+->]
     \item \texttt{zpool}
       \begin{itemize}[<+->]
@@ -426,12 +785,15 @@
       \end{itemize}
     \item \texttt{zfs}
       \begin{itemize}[<+->]
-      \item Administrasjon av filsystemer, snapshots, kloner, m.m.
+      \item Administrasjon av filsystemer, zvolumer, snapshots,
+        kloner, m.m.
       \end{itemize}
     \end{enumerate}
-  \item Det finnes en tredje kommando for de nysgjerrige: \texttt{zdb}
+  \item Det finnes en tredje kommando: \texttt{zdb}
     \begin{itemize}[<+->]
-    \item Brukes for å avlese indre ZFS-detaljer
+    \item Brukes for å avlese de indre detaljene til ZFS
+    \item Bør bare brukes av eksperter \dots
+    \item \dots\ eller av de nysgjerrige \dots
     \end{itemize}
   \end{itemize}
 \end{frame}
@@ -443,29 +805,114 @@
   %\pause
   \begin{itemize}%[<+->]
   \item \texttt{zpool add}
+    \begin{itemize}%[<+->]
+    \item Brukes for å innføre en helt ny vdev-gruppe med
+      harddisker\slash partisjoner
+    \end{itemize}
   \item \texttt{zpool attach}
+    \begin{itemize}%[<+->]
+    \item Brukes for å tilføye en harddisk\slash partisjon til en
+      eksisterende vdev-gruppe
+    \end{itemize}
   \item \texttt{zpool clear}
+    \begin{itemize}%[<+->]
+    \item Brukes for å nullstille tellerne for lese-, skrive- og
+      sjekksumfeil
+    \end{itemize}
   \item \texttt{zpool create}
+    \begin{itemize}%[<+->]
+    \item Brukes for å opprette pooler
+    \end{itemize}
   \item \texttt{zpool destroy}
+    \begin{itemize}%[<+->]
+    \item Brukes for å ødelegge pooler
+    \end{itemize}
   \item \texttt{zpool detach}
+    \begin{itemize}%[<+->]
+    \item Brukes for å fjerne en harddisk\slash partisjon fra en
+      vdev-gruppe
+    \end{itemize}
   \item \texttt{zpool export}
+    \begin{itemize}%[<+->]
+    \item Brukes for å eksportere en pool, for senere import i samme
+      eller et annet system
+    \end{itemize}
   \item \texttt{zpool get}
+    \begin{itemize}%[<+->]
+    \item Brukes for å vise verdien til alle eller utvalgte
+      \texttt{zpool}-egenskaper
+    \end{itemize}
   \item \texttt{zpool history}
+    \begin{itemize}%[<+->]
+    \item Brukes for å vise historikken til poolen
+    \end{itemize}
   \item \texttt{zpool import}
+    \begin{itemize}%[<+->]
+    \item Brukes for å importere en pool eller å vise en liste over
+      pooler som kan importeres
+    \end{itemize}
   \item \texttt{zpool iostat}
+    \begin{itemize}%[<+->]
+    \item Brukes for å vise I/O-statistikk i sann tid
+    \end{itemize}
   \item \texttt{zpool labelclear}
+    \begin{itemize}%[<+->]
+    \item Brukes for å fjerne alle spor av ZFS' disklabels
+    \end{itemize}
   \item \texttt{zpool list}
+    \begin{itemize}%[<+->]
+    \item Brukes for å liste opp importerte pooler
+    \end{itemize}
   \item \texttt{zpool offline}
+    \begin{itemize}%[<+->]
+    \item Brukes for å deaktivere en harddisk\slash partisjon
+    \end{itemize}
   \item \texttt{zpool online}
+    \begin{itemize}%[<+->]
+    \item Brukes for (re)aktivere en harddisk\slash partisjon
+    \end{itemize}
   \item \texttt{zpool reguid}
+    \begin{itemize}%[<+->]
+    \item Brukes for å tildele en ny, tilfeldig GUID til en bestemt
+      pool
+    \end{itemize}
   \item \texttt{zpool remove}
+    \begin{itemize}%[<+->]
+    \item Brukes for å fjerne en harddisk\slash partisjon
+    \end{itemize}
   \item \texttt{zpool reopen}
+    \begin{itemize}%[<+->]
+    \item Brukes for \dots
+    \end{itemize}
   \item \texttt{zpool replace}
+    \begin{itemize}%[<+->]
+    \item Brukes for å fortelle ZFS at en harddisk\slash partisjon har
+      blitt skiftet ut
+    \end{itemize}
   \item \texttt{zpool scrub}
+    \begin{itemize}%[<+->]
+    \item Brukes for å lese gjennom alt aktivt innhold, og sjekke
+      samsvaret mellom lagret data og lagrete sjekksummer
+    \end{itemize}
   \item \texttt{zpool set}
+    \begin{itemize}%[<+->]
+    \item Brukes for å endre \texttt{zpool}-egenskapene
+    \end{itemize}
   \item \texttt{zpool split}
+    \begin{itemize}%[<+->]
+    \item Brukes for å skille et speilmedlem fra resten av gruppa
+    \end{itemize}
   \item \texttt{zpool status}
+    \begin{itemize}%[<+->]
+    \item Brukes for å vise status til poolen, dens medlemmer og deres
+      status, og telleverkene for lese-, skrive og sjekksumfeil
+    \end{itemize}
   \item \texttt{zpool upgrade}
+    \begin{itemize}%[<+->]
+    \item Brukes for å oppgradere poolene til nye formater, vise
+      hvilke pooler som er utdaterte, og hvilke versjoner som er
+      tilgjengelig i systemet
+    \end{itemize}
   \end{itemize}
 \end{frame}
 
@@ -476,34 +923,121 @@
   %\pause
   \begin{itemize}%[<+->]
   \item \texttt{zfs allow}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs bookmark}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs clone}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs create}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs destroy}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs diff}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs get}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs groupspace}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs holds}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs hold}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs inherit}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs jail}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs list}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs mount}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs promote}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs receive}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs release}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs rename}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs rollback}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs send}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs set}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs share}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs snapshot}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs unallow}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs unjail}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs unmount}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs unshare}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs upgrade}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \item \texttt{zfs userspace}
+    \begin{itemize}%[<+->]
+    \item 
+    \end{itemize}
   \end{itemize}
 \end{frame}
 
@@ -596,7 +1130,10 @@
   \item \texttt{feature@lz4\_compress}
   \item \texttt{feature@multi\_vdev\_crash\_dump}
   \item \texttt{feature@spacemap\_histogram}
+  \item \texttt{feature@enabled\_txg}
+  \item \texttt{feature@hole\_birth}
   \item \texttt{feature@extensible\_dataset}
+  \item \texttt{feature@bookmarks}
   \end{itemize}
 \end{frame}
 
@@ -655,6 +1192,18 @@
   \item \texttt{logicalused}
   \item \texttt{logicalreferenced}
   \end{itemize}
+\end{frame}
+
+\part{Oppstartsmiljøer}
+
+\begin{frame}
+  \partpage
+\end{frame}
+
+\section*{Oversikt over del~4: Oppstartsmiljøer}
+\begin{frame}%[allowframebreaks]
+  \frametitle{Oversikt over del~4: Oppstartsmiljøer}
+    \tableofcontents%[pausesections]
 \end{frame}
 
 \end{document}
