% -*- 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})}

\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\ 2013 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: ZFS?}
  \tableofcontents[part=1]%[pausesections]
\end{frame}

\begin{frame}%[allowframebreaks]
  \frametitle{Oversikt over hele foredraget}
  \framesubtitle{Del 2: ZFS!}
  \tableofcontents[part=2]%[pausesections]
\end{frame}

\part{Del 1: ZFS?}

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

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

\section{Hva er ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Hva er ZFS?}
  \pause
  \begin{itemize}[<+->]
  \item ZFS er både
    \begin{enumerate}[<+->]
    \item Logisk volumhåndterer\hfill(Logical Volume Manager, LVM)
    \item Filsystem med snapshots og kloner
    \end{enumerate}
  \item Enklere organisering enn «Storage Spaces» i Microsoft Windows
    Server 2012
  \item Lagringen organiseres 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 \texttt{raidz1} (RAID~5) over tre eller flere disker\slash
      partisjoner
    \item \texttt{raidz2} (RAID~6) over seks eller flere disker\slash
      partisjoner
    \item \texttt{raidz3} («RAID~7») over ni eller flere disker\slash
      partisjoner
    \end{enumerate}
  \item Visse kombinasjoner av det overstående er også mulig
  \end{itemize}
\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.\ $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 $2^{48}$ attributter)
    \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
    \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 typiske RAID-kontrollere
    \begin{enumerate}[<+->]
    \item Skriver nye data til de samme datablokkene som tidligere
    \item Regner ut ny paritet
    \item Skriver oppdatert paritet til de samme paritetsblokkene som
      tidligere
      \begin{itemize}[<+->]
      \item Hva skjer hvis du får strømbrudd mellom 1 og 3?
      \item Har diskkontrolleren batteribeskyttet minne?
      \end{itemize}
    \end{enumerate}
  \item ZFS skriver fulle 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 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
      \begin{enumerate}[<+->]
      \item Leveres korrekte data til applikasjonen, og
      \item avviket korrigeres automatisk på den syke disken
      \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 I verste fall kan RAID-kontrolleren motarbeide ZFS
  \item Sett kontrolleren i JBOD-modus, eller
  \item la hver disk 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 Jeff Bonwick og kollegaer ved Sun Microsystems,
    Inc.
  \item Arbeidet begynte i 2001
  \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 Andre OS med ZFS-støtte: OpenIndiana, FreeNAS, PC-BSD,
    GNU/kFreeBSD og NetBSD
  \end{itemize}
\end{frame}

\section{Fremtiden for ZFS?}
\begin{frame}%[allowframebreaks]
  \frametitle{Fremtiden for ZFS?}
  \pause
  \begin{itemize}[<+->]
  \item Oracle kjøpte opp Sun Microsystems, 27.~januar 2010
  \item Oracle ville gjøre OpenSolaris om til «ClosedSolaris»
  \item Hele ZFS-teamet hos Oracle sa opp på dagen, 90 dager etter den
    avgjørelsen
  \item ZFS lever videre hos
    \begin{itemize}[<+->]
    \item Oracle
    \item illumos
    \item OpenZFS
    \item FreeBSD
    \item Delphix
    \item iXsystems
    \item Joyent
    \item NetBSD
    \item Nexenta
    \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{Del 2: 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{Administrasjon av ZFS}
\begin{frame}%[allowframebreaks]
  \frametitle{Administrasjon av ZFS}
  \pause
  \begin{itemize}[<+->]
  \item To kommandoer (med underkommandoer):
    \begin{enumerate}[<+->]
    \item \texttt{zpool}
    \item \texttt{zfs}
    \end{enumerate}
  \item Det finnes en tredje kommando for de nysgjerrige: \texttt{zdb}
    \begin{itemize}[<+->]
    \item Brukes for å avlese indre ZFS-detaljer
    \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 seks disker:
  \item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3 da4
      da5}
  \item «RAID~7» over ni disker:
  \item \texttt{zpool create rpool \alert{raidz3} da0 da1 da2 da3 da4
      da5 da6 da7 da8}
  \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)}:
  \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)}:
  \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)}:
  \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)}:
  \item \texttt{zpool create rpool \alert{mirror} da0 da1 \alert{raidz1} da2 da3 da4}
  \end{itemize}
\end{frame}

\end{document}

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