--- trunk/zfs-foredrag.tex 2013/12/23 13:42:53 3 +++ trunk/zfs-foredrag.tex 2014/02/23 12:56:54 12 @@ -54,12 +54,25 @@ \newcommand{\rfc}[1]{\href{http://tools.ietf.org/html/rfc#1}{RFC~#1}} \newcommand{\prfc}[1]{(\rfc{#1})} -\title{\textbf{Tittel}} -\subtitle{Undertittel} +% 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} +%\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} @@ -69,97 +82,1128 @@ \titlepage \end{frame} -\section*{Oversikt av hele foredraget} +\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 av hele foredraget} - \framesubtitle{Del 1: Bla, bla, bla} + \frametitle{Oversikt over hele foredraget} + \framesubtitle{Del 1: Lagringssystemer} \tableofcontents[part=1]%[pausesections] \end{frame} \begin{frame}%[allowframebreaks] - \frametitle{Oversikt av hele foredraget} - \framesubtitle{Del 2: Bla, bla, bla} + \frametitle{Oversikt over hele foredraget} + \framesubtitle{Del 2: ZFS?} \tableofcontents[part=2]%[pausesections] \end{frame} -\part{Del 1} +\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: Bla, bla, bla} +\section*{Oversikt over del~1: Lagringssystemer} \begin{frame}%[allowframebreaks] - \frametitle{Oversikt over del~1: Bla, bla, bla} + \frametitle{Oversikt over del~1: Lagringssystemer} \tableofcontents%[pausesections] \end{frame} -\section{Sammendrag} +\section{Hva kan et lagringssystem bestå av?} \begin{frame}%[allowframebreaks] - \frametitle{Sammendrag} + \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 Bla, bla, bla + \item Data som en gang ble lagret, avleses senere som noe helt annet \end{itemize} \end{frame} -\section{Emne 1} +\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{Emne 1} + \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 Bla, bla, bla + \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} -\subsection{Underemne 1a} \begin{frame}%[allowframebreaks] - \frametitle{Emne 1} - \framesubtitle{Underemne 1a} + \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 Bla, bla, bla + \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} -\part{Del 2} +\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~2: Bla, bla, bla} +\section*{Oversikt over del~3: ZFS!} \begin{frame}%[allowframebreaks] - \frametitle{Oversikt over del~2: Bla, bla, bla} + \frametitle{Oversikt over del~3: ZFS!} \tableofcontents%[pausesections] \end{frame} -\section{Sammendrag} +\section{Administrasjon av ZFS} \begin{frame}%[allowframebreaks] - \frametitle{Sammendrag} + \frametitle{Administrasjon av ZFS} \pause \begin{itemize}[<+->] - \item Bla, bla, bla + \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} -\section{Emne 2} +\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{Emne 2} + \frametitle{Oppretting av pooler} \pause \begin{itemize}[<+->] - \item Bla, bla, bla + \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{Underemne 2a} +\subsection{Enkle pool-eksempler} \begin{frame}%[allowframebreaks] - \frametitle{Emne 2} - \framesubtitle{Underemne 2a} + \frametitle{Oppretting av pooler} + \framesubtitle{Enkle pool-eksempler} \pause \begin{itemize}[<+->] - \item Bla, bla, bla + \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}