% -*- 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: