--- trunk/zfs-foredrag.tex 2013/12/23 19:29:45 6 +++ trunk/zfs-foredrag.tex 2014/01/02 11:53:00 8 @@ -131,7 +131,7 @@ \tableofcontents[part=2]%[pausesections] \end{frame} -\part{Del 1: ZFS?} +\part{ZFS?} \begin{frame} \partpage @@ -148,11 +148,14 @@ \frametitle{Hva er ZFS?} \pause \begin{itemize}[<+->] - \item ZFS er både + \item ZFS er \begin{enumerate}[<+->] \item Logisk volumhåndterer\hfill(Logical Volume Manager, LVM) - \item Filsystem med snapshots og kloner + \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 @@ -160,12 +163,12 @@ \item Enkeltdisker\slash partisjoner \item Striping (RAID~0) mellom to eller flere disker\slash partisjoner \item Speiling (RAID~1) mellom to eller flere disker\slash partisjoner - \item \texttt{raidz1} (RAID~5) over tre eller flere disker\slash - partisjoner - \item \texttt{raidz2} (RAID~6) over seks eller flere disker\slash - partisjoner - \item \texttt{raidz3} («RAID~7») over ni eller flere disker\slash - partisjoner + \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} @@ -179,15 +182,17 @@ \item ZFS er stort sett grenseløs \begin{itemize}[<+->] \item 128-bit diskadresser - \item Maks.\ $2^{48}$ poster i hver katalog + \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 $2^{48}$ attributter) + 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! @@ -199,14 +204,16 @@ \frametitle{Hvordan virker ZFS?} \pause \begin{itemize}[<+->] - \item ZFS unngår RAID~5-skrivehullet til typiske RAID-kontrollere + \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 Regner ut ny paritet + \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 hvis du får strømbrudd mellom 1 og 3? + \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} @@ -218,10 +225,10 @@ \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 + \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 + \item Avviket korrigeres automatisk på den syke disken \end{enumerate} \item Finnes ingen alternativer, så må filene restaureres fra backup @@ -235,9 +242,9 @@ \pause \begin{itemize}[<+->] \item \alert{Ikke} bruk ZFS sammen med RAID-kontrollere! - \item I verste fall kan RAID-kontrolleren motarbeide ZFS - \item Sett kontrolleren i JBOD-modus, eller - \item la hver disk være sitt enslige RAID~0-volum + \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} @@ -246,9 +253,10 @@ \frametitle{Hvor kommer ZFS fra?} \pause \begin{itemize}[<+->] - \item Utviklet av Jeff Bonwick og kollegaer ved Sun Microsystems, - Inc. + \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) @@ -262,31 +270,123 @@ \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, 27.~januar 2010 - \item Oracle ville gjøre OpenSolaris om til «ClosedSolaris» - \item Hele ZFS-teamet hos Oracle sa opp på dagen, 90 dager etter den - avgjørelsen + \item 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 - \item illumos - \item OpenZFS - \item FreeBSD - \item Delphix - \item iXsystems - \item Joyent - \item NetBSD - \item Nexenta + \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} @@ -301,7 +401,7 @@ % \end{itemize} %\end{frame} -\part{Del 2: ZFS!} +\part{ZFS!} \begin{frame} \partpage @@ -321,7 +421,13 @@ \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}[<+->] @@ -330,6 +436,77 @@ \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} @@ -359,12 +536,10 @@ \item \texttt{zpool create rpool \alert{mirror} da0 da1} \item RAID~5 over tre disker: \item \texttt{zpool create rpool \alert{raidz1} da0 da1 da2} - \item RAID~6 over seks disker: - \item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3 da4 - da5} - \item «RAID~7» over ni disker: - \item \texttt{zpool create rpool \alert{raidz3} da0 da1 da2 da3 da4 - da5 da6 da7 da8} + \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} @@ -374,19 +549,111 @@ \framesubtitle{Avanserte pool-eksempler} \pause \begin{itemize}[<+->] - \item RAID~\only<1-3|handout:0>{?}\only<4->{1+0 (3 vdevs)}: + \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)}: + \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)}: + \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)}: + \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}