% -*- coding: utf-8 -*-
% $Ximalas$
%\documentclass{beamer}
%\documentclass[handout]{beamer}
%\usepackage{pgfpages}
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]
%\pgfpagesuselayout{4 on 1}[a4paper,landscape,border shrink=5mm]
%\setbeameroption{show notes} % on second screen}

\def\jobname{zfs-foredrag} % Sett riktig navn på presentasjonen her.
\setjobnamebeamerversion{\jobname}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[norsk]{babel}
\usepackage{booktabs}
\usepackage{multicol}
\usepackage{fancyvrb}
%\usepackage{epstopdf}
%\epstopdfsetup{update}

%\usetheme{AnnArbor}
%\usetheme{Boadilla}
%\usetheme{boxes}
%\usetheme{CambridgeUS}
%\usetheme{Antibes}
%\usetheme{Bergen}
%\usetheme{Berkeley}
%\usetheme{Berlin}
%\usetheme{Copenhagen}
%\usetheme{Darmstadt}
%\usetheme{Dresden}
%\usetheme{Frankfurt}
%\usetheme{Goettingen}
%\usetheme{Hannover}
%\usetheme{Ilmenau}
%\usetheme{JuanLesPins}
%\usetheme{Luebeck}
\usetheme{Madrid}
%\usetheme{Malmoe}
%\usetheme{Marburg}
%\usetheme{Montpellier}
%\usetheme{PaloAlto}
%\usetheme{Pittsburgh}
%\usetheme{Rochester}
%\usetheme{Singapore}
%\usetheme{Szeged}
%\usetheme{Warsaw}

\hypersetup{colorlinks,linkcolor=,urlcolor=blue}

\newcommand{\Alert}[2]{\alert<#1>{#2}}
\newcommand{\Textbackslash}{\textbackslash\penalty\exhyphenpenalty}
\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}}
\institute[FSI/IT]{\href{http://fagskolen-innlandet.no/}{Fagskolen Innlandet}, IT-avdelingen}
%\subject{Emne for bruk i egenskapene til PDF-fila}
%\keywords{Nøkkelord for bruk i egenskapene til PDF-fila}
\date{\today} % eller
%\date{23.\ desember 2013}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\section*{Foredragets filer}
\begin{frame}[allowframebreaks]
  \frametitle{Foredragets filer}
  \begin{itemize}
  \item Filene til foredraget er tilgjengelig gjennom:
    \begin{itemize}
    \item Subversion: \texttt{svn co
        \url{svn://svn.ximalas.info/zfs-foredrag}}
    \item Web:
      \href{http://svnweb.ximalas.info/zfs-foredrag/}{\texttt{svnweb.ximalas.info/zfs-foredrag}}
    \item Begge metodene er tilgjengelig med både IPv4 og \alert{IPv6}
    \end{itemize}
  \item
    \href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.foredrag.pdf?view=co}{\texttt{zfs-foredrag.foredrag.pdf}}
    vises på lerretet
  \item
    \href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.pdf?view=co}{\texttt{zfs-foredrag.handout.pdf}}
    er mye bedre for publikum å se på
  \item
    \href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.2on1.pdf?view=co}{\texttt{zfs-foredrag.handout.2on1.pdf}}
    og
    \href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.4on1.pdf?view=co}{\texttt{zfs-foredrag.handout.4on1.pdf}}
    er begge velegnet til utskrift
  \item \texttt{*.169.pdf}-filene er i 16:9-format
  \item \texttt{*.1610.pdf}-filene er i 16:10-format
  \framebreak
  \item Foredraget er mekket ved hjelp av
    \href{http://www.gnu.org/software/emacs/}{GNU~Emacs},
    \href{http://www.gnu.org/software/auctex/}{AUC\TeX},
    \href{http://www.tug.org/applications/pdftex/}{pdf\TeX} fra
    \href{http://miktex.org/}{MiK\TeX},
    \href{http://www.latex-project.org/}{\LaTeX}-dokumentklassa
    \href{https://bitbucket.org/rivanvx/beamer/wiki/Home}{beamer},
    \href{http://subversion.apache.org/}{Subversion},
    \href{http://tortoisesvn.net/}{TortoiseSVN} og
    \href{http://get.adobe.com/no/reader/}{Adobe Reader}
  \item Hovedfila bærer denne identifikasjonen:\\
    \texttt{\$${}$Ximalas${}$\$}
  \item Driverfila for denne PDF-fila bærer denne identifikasjonen:\\
    \svndriverfil
  \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
      3.0 Norge} (CC BY-SA
    3.0)\hfill\includegraphics[scale=.25]{by-sa.pdf}
  \end{itemize}
\end{frame}

\section*{Oversikt over hele foredraget}
\begin{frame}%[allowframebreaks]
  \frametitle{Oversikt over hele foredraget}
  \framesubtitle{Del 1: Lagringssystemer}
  \tableofcontents[part=1]%[pausesections]
\end{frame}

\begin{frame}%[allowframebreaks]
  \frametitle{Oversikt over hele foredraget}
  \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~2: ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Oversikt over del~2: ZFS?}
    \tableofcontents%[pausesections]
\end{frame}

\section{Hva er ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Hva er ZFS?}
  \pause
  \begin{itemize}[<+->]
  \item ZFS er
    \begin{enumerate}[<+->]
    \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
    \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
  \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 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
      harddisker\slash partisjoner
    \item \texttt{raidz2} (RAID~6, dobbel paritet) over fire eller
      flere harddisker\slash partisjoner
    \item \texttt{raidz3} («RAID~7», trippel paritet) over fem eller
      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?}
  \pause
  \begin{itemize}[<+->]
  \item ZFS er stort sett grenseløs
    \begin{itemize}[<+->]
    \item 128-bit diskadresser
    \item Maks.\ \alert<9->{$2^{48}$} poster i hver katalog
    \item Maks.\ $2^{64}$ bytes (16~EiB, 16~exbibytes) for hver fil
    \item Maks.\ $2^{64}$ bytes for hvert attributt
    \item Maks.\ $2^{78}$ bytes (256~ZiB, 256~zebibytes) i hver pool
    \item Maks.\ $2^{56}$ attributter for hver fil (egentlig begrenset
      til \alert<9->{$2^{48}$} attributter)
    \pause
    \item Maks.\ $2^{64}$ enheter tilknyttet en gitt pool
    \item Maks.\ $2^{64}$ pooler i et og samme system
    \item Maks.\ $2^{64}$ filsystemer i samme pool
    \item Ref.: \texttt{\url{http://en.wikipedia.org/wiki/ZFS}}
    \end{itemize}
  \item Vis meg det systemet som klarer å sprenge noen av disse
    grensene!
  \end{itemize}
\end{frame}

\section{Hvordan virker ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Hvordan virker ZFS?}
  \pause
  \begin{itemize}[<+->]
  \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 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 \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}
  \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 («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
    \item Oppdages avvik, leter ZFS etter alternativer
    \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 («resilver»)
      \end{enumerate}
    \item Finnes ingen alternativer, så må filene restaureres fra
      backup
    \end{itemize}
  \end{itemize}
\end{frame}

\section{ZFS og RAID-kontrollere}
\begin{frame}%[allowframebreaks]
  \frametitle{ZFS og RAID-kontrollere}
  \pause
  \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}
\end{frame}

\section{Hvor kommer ZFS fra?}
\begin{frame}%[allowframebreaks]
  \frametitle{Hvor kommer ZFS fra?}
  \pause
  \begin{itemize}[<+->]
  \item Utviklet av Jeffrey Bonwick, Matthew Ahrens og flere kollegaer
    ved Sun Microsystems, Inc.
  \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)
  \item ZFS $\to$ OpenSolaris, november 2005
  \item ZFS $\to$ FreeBSD, april 2007
  \item Linux' GPL~v2-lisens kompliserer import av ZFS
    \begin{itemize}[<+->]
    \item ZFS i Linux gjennom FUSE gjenstår som en (treg) mulighet
    \item Brian Behlendorf ved Lawrence Livermore National Laboratory
      (LLNL) har laget «Native ZFS for\slash on Linux»
    \end{itemize}
  \item ZFS var tilgjengelig i Mac OS~X 10.5, bare read-only, men har
    vært tilbaketrukket siden oktober 2009
  \item Noen Mac OS~X-entusiaster har laget sine egne ZFS-varianter
  \item Andre OS med ZFS-støtte: OpenIndiana, FreeNAS, PC-BSD,
    GNU/kFreeBSD og NetBSD
  \end{itemize}
\end{frame}

\section{Versjonsnummer i ZFS}
\begin{frame}%[allowframebreaks]
  \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 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}

\subsection{Pool-versjonsnummer}
\begin{frame}[allowframebreaks]
  \frametitle{Versjonsnummer i ZFS}
  \framesubtitle{Pool-versjonsnummer}
  %\pause
  \begin{enumerate}%[<+->]
  \item First release
  \item Ditto Blocks
  \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 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 CIFS server support, dataset quotas
  \item Devices can be added to a storage pool as "cache devices"
  \item Improved \texttt{zpool scrub}/resilver performance
  \item Snapshot properties
  \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 STMF property support
  \item triple-parity RAID-Z
  \item ZFS snapshot holds
  \item ZFS log device removal
  \item zle compression algorithm that is needed to support the ZFS
    deduplication properties in ZFS pool version 21, which were
    released concurrently
  \item Deduplication
  \item \texttt{zfs receive} properties
  \item slim ZIL
  \item System attributes. Symlinks now their own object type. Also
    requires FS v5.
  \item Improved pool scrubbing and resilvering statistics
  \item Improved snapshot deletion performance
  \item Improved snapshot creation performance (particularly recursive
    snapshots)
  \item Multiple virtual device replacements
  \item RAID-Z/mirror hybrid allocator
  \item ZFS encryption
  \item Improved '\texttt{zfs list}' performance
  \item One MB block support
  \item Improved share support
  \item Sharing with inheritance
  \end{enumerate}
\end{frame}

\subsection{Filsystem-versjonsnummer}
\begin{frame}[allowframebreaks]
  \frametitle{Versjonsnummer i ZFS}
  \framesubtitle{Filsystem-versjonsnummer}
  %\pause
  \begin{enumerate}%[<+->]
  \item First release
  \item Enhanced directory entries. In particular, directory entries
    now store the object type. For example, file, directory, named
    pipe, and so on, in addition to the object number.
  \item Support for sharing ZFS file systems over SMB. Case
    insensitivity support. System attribute support. Integrated
    anti-virus support.
  \item Properties: userquota, groupquota, userused and groupused
  \item System attributes; symlinks now their own object type
  \item Multilevel file system support
  \end{enumerate}
\end{frame}

\section{Fremtiden for ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Fremtiden for ZFS?}
  \pause
  \begin{itemize}[<+->]
  \item Oracle kjøpte opp Sun Microsystems, Inc., 27.~januar 2010
  \item Oracle gjorde OpenSolaris om til «ClosedSolaris» i mai 2010
  \item Hele ZFS-teamet hos Oracle sa opp på dagen, omtrent 90 dager
    etter denne avgjørelsen ifølge Bryan Cantrill
  \item ZFS lever videre hos
    \begin{itemize}[<+->]
    \item Oracle Solaris
    \item illumos\slash OpenZFS
      \begin{itemize}[<+->]
      \item OpenIndiana
      \item FreeBSD
      \item Delphix
      \item iXsystems
      \item Joyent
      \item NetBSD
      \item Nexenta
      \item Linux
      \end{itemize}
    \end{itemize}
  \end{itemize}
\end{frame}

%\subsection{Underemne 1a}
%\begin{frame}%[allowframebreaks]
%  \frametitle{Emne 1}
%  \framesubtitle{Underemne 1a}
%  \pause
%  \begin{itemize}[<+->]
%  \item Bla, bla, bla
%  \end{itemize}
%\end{frame}

\part{ZFS!}

\begin{frame}
  \partpage
\end{frame}

\section*{Oversikt over del~3: ZFS!}
\begin{frame}%[allowframebreaks]
  \frametitle{Oversikt over del~3: ZFS!}
    \tableofcontents%[pausesections]
\end{frame}

\section{Administrasjon av ZFS}
\begin{frame}%[allowframebreaks]
  \frametitle{Administrasjon av ZFS}
  \pause
  \begin{itemize}[<+->]
  \item To kommandoer (med underkommandoer)
    \begin{enumerate}[<+->]
    \item \texttt{zpool}
      \begin{itemize}[<+->]
      \item Administrasjon av lagringspoolene
      \end{itemize}
    \item \texttt{zfs}
      \begin{itemize}[<+->]
      \item Administrasjon av filsystemer, zvolumer, snapshots,
        kloner, m.m.
      \end{itemize}
    \end{enumerate}
  \item Det finnes en tredje kommando: \texttt{zdb}
    \begin{itemize}[<+->]
    \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}

\subsection{\texttt{zpool}}
\begin{frame}[allowframebreaks]
  \frametitle{Administrasjon av ZFS}
  \framesubtitle{\texttt{zpool}-kommandoer}
  %\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}

\subsection{\texttt{zfs}}
\begin{frame}[allowframebreaks]
  \frametitle{Administrasjon av ZFS}
  \framesubtitle{\texttt{zfs}-kommandoer}
  %\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}

\section{Oppretting av pooler}
\begin{frame}%[allowframebreaks]
  \frametitle{Oppretting av pooler}
  \pause
  \begin{itemize}[<+->]
  \item \texttt{zpool create [\textit{opsjoner}]
      \textit{navn-på-pool\/} [\textit{organiseringstype}]
      \textit{ingredienser\/} [\textit{organiseringstype
        ingredienser}] ...}
  \item Unngå å plassere mer enn 9 enheter i hver vdev
  \item I stedet for å stripe en pool over 20 harddisker, vurdér å
    speile to og to harddisker i 10 grupper
  \end{itemize}
\end{frame}

\subsection{Enkle pool-eksempler}
\begin{frame}%[allowframebreaks]
  \frametitle{Oppretting av pooler}
  \framesubtitle{Enkle pool-eksempler}
  \pause
  \begin{itemize}[<+->]
  \item Singledisk:
  \item \texttt{zpool create rpool da0}
  \item RAID~0 over to disker:
  \item \texttt{zpool create rpool da0 da1}
  \item RAID~1 over to disker:
  \item \texttt{zpool create rpool \alert{mirror} da0 da1}
  \item RAID~5 over tre disker:
  \item \texttt{zpool create rpool \alert{raidz1} da0 da1 da2}
  \item RAID~6 over fire disker:
  \item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3}
  \item «RAID~7» over fem disker:
  \item \texttt{zpool create rpool \alert{raidz3} da0 da1 da2 da3 da4}
  \end{itemize}
\end{frame}

\subsection{Avanserte pool-eksempler}
\begin{frame}%[allowframebreaks]
  \frametitle{Oppretting av pooler}
  \framesubtitle{Avanserte pool-eksempler}
  \pause
  \begin{itemize}[<+->]
  \item RAID~\only<1-3|handout:0>{?}\only<4->{1+0 (3 vdevs á 2 disker)}:
  \item \texttt{zpool create rpool \alert{mirror} da0 da1
      \alert{mirror} da2 da3 \alert{mirror} da4 da5}
  \pause
  \item RAID~\only<5-6|handout:0>{?}\only<7->{5+0 (2 vdevs á 3 disker)}:
  \item \texttt{zpool create rpool \alert{raidz1} da0 da1 da2
      \alert{raidz1} da3 da4 da5}
  \pause
  \item RAID~\only<8-9|handout:0>{?}\only<10->{6+0 (2 vdevs á 4 disker)}:
  \item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3 \alert{raidz2} da4 da5 da6 da7}
  \pause
  \item RAID~\only<11-12|handout:0>{?}\only<13->{1+5+0 (2 vdevs, 2 og 3 disker)}:
  \item \texttt{zpool create rpool \alert{mirror} da0 da1 \alert{raidz1} da2 da3 da4}
  \end{itemize}
\end{frame}

\section{\texttt{zpool}-egenskaper}
\begin{frame}[allowframebreaks]
  \frametitle{\texttt{zpool}-egenskaper}
  %\pause
  \begin{itemize}%[<+->]
  \item \texttt{size}
  \item \texttt{capacity}
  \item \texttt{altroot}
  \item \texttt{health}
  \item \texttt{guid}
  \item \texttt{version}
  \item \texttt{bootfs}
  \item \texttt{delegation}
  \item \texttt{autoreplace}
  \item \texttt{cachefile}
  \item \texttt{failmode}
  \item \texttt{listsnapshots}
  \item \texttt{autoexpand}
  \item \texttt{dedupditto}
  \item \texttt{dedupratio}
  \item \texttt{free}
  \item \texttt{allocated}
  \item \texttt{readonly}
  \item \texttt{comment}
  \item \texttt{expandsize}
  \item \texttt{freeing}
  \item \texttt{feature@async\_destroy}
  \item \texttt{feature@empty\_bpobj}
  \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}

\section{\texttt{zfs}-egenskaper}
\begin{frame}[allowframebreaks]
  \frametitle{\texttt{zfs}-egenskaper}
  %\pause
  \begin{itemize}%[<+->]
  \item \texttt{type}
  \item \texttt{creation}
  \item \texttt{used}
  \item \texttt{available}
  \item \texttt{referenced}
  \item \texttt{compressratio}
  \item \texttt{mounted}
  \item \texttt{quota}
  \item \texttt{reservation}
  \item \texttt{recordsize}
  \item \texttt{mountpoint}
  \item \texttt{sharenfs}
  \item \texttt{checksum}
  \item \texttt{compression}
  \item \texttt{atime}
  \item \texttt{devices}
  \item \texttt{exec}
  \item \texttt{setuid}
  \item \texttt{readonly}
  \item \texttt{jailed}
  \item \texttt{snapdir}
  \item \texttt{aclmode}
  \item \texttt{aclinherit}
  \item \texttt{canmount}
  \item \texttt{xattr}
  \item \texttt{copies}
  \item \texttt{version}
  \item \texttt{utf8only}
  \item \texttt{normalization}
  \item \texttt{casesensitivity}
  \item \texttt{vscan}
  \item \texttt{nbmand}
  \item \texttt{sharesmb}
  \item \texttt{refquota}
  \item \texttt{refreservation}
  \item \texttt{primarycache}
  \item \texttt{secondarycache}
  \item \texttt{usedbysnapshots}
  \item \texttt{usedbydataset}
  \item \texttt{usedbychildren}
  \item \texttt{usedbyrefreservation}
  \item \texttt{logbias}
  \item \texttt{dedup}
  \item \texttt{mlslabel}
  \item \texttt{sync}
  \item \texttt{refcompressratio}
  \item \texttt{written}
  \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}

Local Variables:
TeX-PDF-mode:t
End:
