% -*- 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{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 \begin{enumerate}[<+->] \item Logisk volumhåndterer\hfill(Logical Volume Manager, LVM) \item Filsystem med bl.a.\ snapshots, kloner, kompresjon og deduplisering \item Tilbyr også «zvolumer» som lagringsenheter for andre filsystemer \end{enumerate} \item ZFS tar dataintegritet på alvor; hastighet kommer i senere rekker \item Enklere organisering enn «Storage Spaces» i Microsoft Windows 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, enkel paritet) over tre eller flere disker\slash partisjoner \item \texttt{raidz2} (RAID~6, dobbel paritet) over fire eller flere disker\slash partisjoner \item \texttt{raidz3} («RAID~7», trippel paritet) over fem 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.\ \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 \item Regner ut ny paritet for datablokkene \item Skriver oppdatert paritet til de samme paritetsblokkene som tidligere \begin{itemize}[<+->] \item Hva skjer nå \textit{og\/} senere hvis du får strømbrudd mellom punktene 1 og 4? \item 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, så \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 RAID-kontrolleren kan i verste fall motarbeide ZFS \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 \item 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 \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: 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} \begin{itemize}[<+->] \item Administrasjon av lagringspoolene \end{itemize} \item \texttt{zfs} \begin{itemize}[<+->] \item Administrasjon av filsystemer, snapshots, kloner, m.m. \end{itemize} \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} \subsection{\texttt{zpool}} \begin{frame}[allowframebreaks] \frametitle{Administrasjon av ZFS} \framesubtitle{\texttt{zpool}-kommandoer} %\pause \begin{itemize}%[<+->] \item \texttt{zpool add} \item \texttt{zpool attach} \item \texttt{zpool clear} \item \texttt{zpool create} \item \texttt{zpool destroy} \item \texttt{zpool detach} \item \texttt{zpool export} \item \texttt{zpool get} \item \texttt{zpool history} \item \texttt{zpool import} \item \texttt{zpool iostat} \item \texttt{zpool labelclear} \item \texttt{zpool list} \item \texttt{zpool offline} \item \texttt{zpool online} \item \texttt{zpool reguid} \item \texttt{zpool remove} \item \texttt{zpool reopen} \item \texttt{zpool replace} \item \texttt{zpool scrub} \item \texttt{zpool set} \item \texttt{zpool split} \item \texttt{zpool status} \item \texttt{zpool upgrade} \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} \item \texttt{zfs bookmark} \item \texttt{zfs clone} \item \texttt{zfs create} \item \texttt{zfs destroy} \item \texttt{zfs diff} \item \texttt{zfs get} \item \texttt{zfs groupspace} \item \texttt{zfs holds} \item \texttt{zfs hold} \item \texttt{zfs inherit} \item \texttt{zfs jail} \item \texttt{zfs list} \item \texttt{zfs mount} \item \texttt{zfs promote} \item \texttt{zfs receive} \item \texttt{zfs release} \item \texttt{zfs rename} \item \texttt{zfs rollback} \item \texttt{zfs send} \item \texttt{zfs set} \item \texttt{zfs share} \item \texttt{zfs snapshot} \item \texttt{zfs unallow} \item \texttt{zfs unjail} \item \texttt{zfs unmount} \item \texttt{zfs unshare} \item \texttt{zfs upgrade} \item \texttt{zfs userspace} \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@extensible\_dataset} \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} \end{document} Local Variables: TeX-PDF-mode:t End: