| 1 |
% -*- coding: utf-8 -*- |
| 2 |
% $Ximalas$ |
| 3 |
%\documentclass{beamer} |
| 4 |
%\documentclass[handout]{beamer} |
| 5 |
%\usepackage{pgfpages} |
| 6 |
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm] |
| 7 |
%\pgfpagesuselayout{4 on 1}[a4paper,landscape,border shrink=5mm] |
| 8 |
%\setbeameroption{show notes} % on second screen} |
| 9 |
|
| 10 |
\def\jobname{zfs-foredrag} % Sett riktig navn på presentasjonen her. |
| 11 |
\setjobnamebeamerversion{\jobname} |
| 12 |
|
| 13 |
\usepackage[utf8]{inputenc} |
| 14 |
\usepackage[T1]{fontenc} |
| 15 |
\usepackage[norsk]{babel} |
| 16 |
\usepackage{booktabs} |
| 17 |
\usepackage{multicol} |
| 18 |
\usepackage{fancyvrb} |
| 19 |
%\usepackage{epstopdf} |
| 20 |
%\epstopdfsetup{update} |
| 21 |
|
| 22 |
%\usetheme{AnnArbor} |
| 23 |
%\usetheme{Boadilla} |
| 24 |
%\usetheme{boxes} |
| 25 |
%\usetheme{CambridgeUS} |
| 26 |
%\usetheme{Antibes} |
| 27 |
%\usetheme{Bergen} |
| 28 |
%\usetheme{Berkeley} |
| 29 |
%\usetheme{Berlin} |
| 30 |
%\usetheme{Copenhagen} |
| 31 |
%\usetheme{Darmstadt} |
| 32 |
%\usetheme{Dresden} |
| 33 |
%\usetheme{Frankfurt} |
| 34 |
%\usetheme{Goettingen} |
| 35 |
%\usetheme{Hannover} |
| 36 |
%\usetheme{Ilmenau} |
| 37 |
%\usetheme{JuanLesPins} |
| 38 |
%\usetheme{Luebeck} |
| 39 |
\usetheme{Madrid} |
| 40 |
%\usetheme{Malmoe} |
| 41 |
%\usetheme{Marburg} |
| 42 |
%\usetheme{Montpellier} |
| 43 |
%\usetheme{PaloAlto} |
| 44 |
%\usetheme{Pittsburgh} |
| 45 |
%\usetheme{Rochester} |
| 46 |
%\usetheme{Singapore} |
| 47 |
%\usetheme{Szeged} |
| 48 |
%\usetheme{Warsaw} |
| 49 |
|
| 50 |
\hypersetup{colorlinks,linkcolor=,urlcolor=blue} |
| 51 |
|
| 52 |
\newcommand{\Alert}[2]{\alert<#1>{#2}} |
| 53 |
\newcommand{\Textbackslash}{\textbackslash\penalty\exhyphenpenalty} |
| 54 |
\newcommand{\rfc}[1]{\href{http://tools.ietf.org/html/rfc#1}{RFC~#1}} |
| 55 |
\newcommand{\prfc}[1]{(\rfc{#1})} |
| 56 |
|
| 57 |
\title{\textbf{ZFS}} |
| 58 |
\subtitle{Siste ord innen filsystemer} |
| 59 |
\author[T.~Endrestøl]{\href{http://fig.ol.no/~trond/}{Trond Endrestøl}} |
| 60 |
\institute[FSI/IT]{\href{http://fagskolen-innlandet.no/}{Fagskolen Innlandet}, IT-avdelingen} |
| 61 |
%\subject{Emne for bruk i egenskapene til PDF-fila} |
| 62 |
%\keywords{Nøkkelord for bruk i egenskapene til PDF-fila} |
| 63 |
\date{\today} % eller |
| 64 |
%\date{23.\ desember 2013} |
| 65 |
|
| 66 |
\begin{document} |
| 67 |
|
| 68 |
\begin{frame} |
| 69 |
\titlepage |
| 70 |
\end{frame} |
| 71 |
|
| 72 |
\section*{Foredragets filer} |
| 73 |
\begin{frame}[allowframebreaks] |
| 74 |
\frametitle{Foredragets filer} |
| 75 |
\begin{itemize} |
| 76 |
\item Filene til foredraget er tilgjengelig gjennom: |
| 77 |
\begin{itemize} |
| 78 |
\item Subversion: \texttt{svn co |
| 79 |
\url{svn://svn.ximalas.info/zfs-foredrag}} |
| 80 |
\item Web: |
| 81 |
\href{http://svnweb.ximalas.info/zfs-foredrag/}{\texttt{svnweb.ximalas.info/zfs-foredrag}} |
| 82 |
\item Begge metodene er tilgjengelig med både IPv4 og \alert{IPv6} |
| 83 |
\end{itemize} |
| 84 |
\item |
| 85 |
\href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.foredrag.pdf?view=co}{\texttt{zfs-foredrag.foredrag.pdf}} |
| 86 |
vises på lerretet |
| 87 |
\item |
| 88 |
\href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.pdf?view=co}{\texttt{zfs-foredrag.handout.pdf}} |
| 89 |
er mye bedre for publikum å se på |
| 90 |
\item |
| 91 |
\href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.2on1.pdf?view=co}{\texttt{zfs-foredrag.handout.2on1.pdf}} |
| 92 |
og |
| 93 |
\href{http://svnweb.ximalas.info/zfs-foredrag/trunk/zfs-foredrag.handout.4on1.pdf?view=co}{\texttt{zfs-foredrag.handout.4on1.pdf}} |
| 94 |
er begge velegnet til utskrift |
| 95 |
\item \texttt{*.169.pdf}-filene er i 16:9-format |
| 96 |
\item \texttt{*.1610.pdf}-filene er i 16:10-format |
| 97 |
\framebreak |
| 98 |
\item Foredraget er mekket ved hjelp av |
| 99 |
\href{http://www.gnu.org/software/emacs/}{GNU~Emacs}, |
| 100 |
\href{http://www.gnu.org/software/auctex/}{AUC\TeX}, |
| 101 |
\href{http://www.tug.org/applications/pdftex/}{pdf\TeX} fra |
| 102 |
\href{http://miktex.org/}{MiK\TeX}, |
| 103 |
\href{http://www.latex-project.org/}{\LaTeX}-dokumentklassa |
| 104 |
\href{https://bitbucket.org/rivanvx/beamer/wiki/Home}{beamer}, |
| 105 |
\href{http://subversion.apache.org/}{Subversion}, |
| 106 |
\href{http://tortoisesvn.net/}{TortoiseSVN} og |
| 107 |
\href{http://get.adobe.com/no/reader/}{Adobe Reader} |
| 108 |
\item Hovedfila bærer denne identifikasjonen:\\ |
| 109 |
\texttt{\$${}$Ximalas${}$\$} |
| 110 |
\item Driverfila for denne PDF-fila bærer denne identifikasjonen:\\ |
| 111 |
\svndriverfil |
| 112 |
\item Copyright \copyright\ 2013 Trond Endrestøl |
| 113 |
\item Dette verket er lisensiert med: |
| 114 |
\href{http://creativecommons.org/}{Creative Commons}, |
| 115 |
\href{http://creativecommons.org/licenses/by-sa/3.0/no/}{Navngivelse-DelPåSammeVilkår |
| 116 |
3.0 Norge} (CC BY-SA |
| 117 |
3.0)\hfill\includegraphics[scale=.25]{by-sa.pdf} |
| 118 |
\end{itemize} |
| 119 |
\end{frame} |
| 120 |
|
| 121 |
\section*{Oversikt over hele foredraget} |
| 122 |
\begin{frame}%[allowframebreaks] |
| 123 |
\frametitle{Oversikt over hele foredraget} |
| 124 |
\framesubtitle{Del 1: ZFS?} |
| 125 |
\tableofcontents[part=1]%[pausesections] |
| 126 |
\end{frame} |
| 127 |
|
| 128 |
\begin{frame}%[allowframebreaks] |
| 129 |
\frametitle{Oversikt over hele foredraget} |
| 130 |
\framesubtitle{Del 2: ZFS!} |
| 131 |
\tableofcontents[part=2]%[pausesections] |
| 132 |
\end{frame} |
| 133 |
|
| 134 |
\part{Del 1: ZFS?} |
| 135 |
|
| 136 |
\begin{frame} |
| 137 |
\partpage |
| 138 |
\end{frame} |
| 139 |
|
| 140 |
\section*{Oversikt over del~1: ZFS?} |
| 141 |
\begin{frame}%[allowframebreaks] |
| 142 |
\frametitle{Oversikt over del~1: ZFS?} |
| 143 |
\tableofcontents%[pausesections] |
| 144 |
\end{frame} |
| 145 |
|
| 146 |
\section{Hva er ZFS?} |
| 147 |
\begin{frame}%[allowframebreaks] |
| 148 |
\frametitle{Hva er ZFS?} |
| 149 |
\pause |
| 150 |
\begin{itemize}[<+->] |
| 151 |
\item ZFS er både |
| 152 |
\begin{enumerate}[<+->] |
| 153 |
\item Logisk volumhåndterer\hfill(Logical Volume Manager, LVM) |
| 154 |
\item Filsystem med snapshots og kloner |
| 155 |
\end{enumerate} |
| 156 |
\item Enklere organisering enn «Storage Spaces» i Microsoft Windows |
| 157 |
Server 2012 |
| 158 |
\item Lagringen organiseres i pooler som kan bestå av |
| 159 |
\begin{enumerate}[<+->] |
| 160 |
\item Enkeltdisker\slash partisjoner |
| 161 |
\item Striping (RAID~0) mellom to eller flere disker\slash partisjoner |
| 162 |
\item Speiling (RAID~1) mellom to eller flere disker\slash partisjoner |
| 163 |
\item \texttt{raidz1} (RAID~5) over tre eller flere disker\slash |
| 164 |
partisjoner |
| 165 |
\item \texttt{raidz2} (RAID~6) over seks eller flere disker\slash |
| 166 |
partisjoner |
| 167 |
\item \texttt{raidz3} («RAID~7») over ni eller flere disker\slash |
| 168 |
partisjoner |
| 169 |
\end{enumerate} |
| 170 |
\item Visse kombinasjoner av det overstående er også mulig |
| 171 |
\end{itemize} |
| 172 |
\end{frame} |
| 173 |
|
| 174 |
\section{Hva er grensene til ZFS?} |
| 175 |
\begin{frame}%[allowframebreaks] |
| 176 |
\frametitle{Hva er grensene til ZFS?} |
| 177 |
\pause |
| 178 |
\begin{itemize}[<+->] |
| 179 |
\item ZFS er stort sett grenseløs |
| 180 |
\begin{itemize}[<+->] |
| 181 |
\item 128-bit diskadresser |
| 182 |
\item Maks.\ $2^{48}$ poster i hver katalog |
| 183 |
\item Maks.\ $2^{64}$ bytes (16~EiB, 16~exbibytes) for hver fil |
| 184 |
\item Maks.\ $2^{64}$ bytes for hvert attributt |
| 185 |
\item Maks.\ $2^{78}$ bytes (256~ZiB, 256~zebibytes) i hver pool |
| 186 |
\item Maks.\ $2^{56}$ attributter for hver fil (egentlig begrenset |
| 187 |
til $2^{48}$ attributter) |
| 188 |
\item Maks.\ $2^{64}$ enheter tilknyttet en gitt pool |
| 189 |
\item Maks.\ $2^{64}$ pooler i et og samme system |
| 190 |
\item Maks.\ $2^{64}$ filsystemer i samme pool |
| 191 |
\end{itemize} |
| 192 |
\item Vis meg det systemet som klarer å sprenge noen av disse |
| 193 |
grensene! |
| 194 |
\end{itemize} |
| 195 |
\end{frame} |
| 196 |
|
| 197 |
\section{Hvordan virker ZFS?} |
| 198 |
\begin{frame}%[allowframebreaks] |
| 199 |
\frametitle{Hvordan virker ZFS?} |
| 200 |
\pause |
| 201 |
\begin{itemize}[<+->] |
| 202 |
\item ZFS unngår RAID~5-skrivehullet til typiske RAID-kontrollere |
| 203 |
\begin{enumerate}[<+->] |
| 204 |
\item Skriver nye data til de samme datablokkene som tidligere |
| 205 |
\item Regner ut ny paritet |
| 206 |
\item Skriver oppdatert paritet til de samme paritetsblokkene som |
| 207 |
tidligere |
| 208 |
\begin{itemize}[<+->] |
| 209 |
\item Hva skjer hvis du får strømbrudd mellom 1 og 3? |
| 210 |
\item Har diskkontrolleren batteribeskyttet minne? |
| 211 |
\end{itemize} |
| 212 |
\end{enumerate} |
| 213 |
\item ZFS skriver fulle striper; data og paritet samtidig |
| 214 |
\item ZFS bruker «copy-on-write»; skriver nye data til ledige |
| 215 |
diskblokker |
| 216 |
\item Endringer som hører sammen, samles i transaksjonsgrupper |
| 217 |
\item Sjekksummer brukes for alt som blir lagret |
| 218 |
\begin{itemize}[<+->] |
| 219 |
\item ZFS kontrollerer at leste data er de samme som ble skrevet |
| 220 |
\item Oppdages avvik, leter ZFS etter alternativer |
| 221 |
\item Finnes alternativer, enten speilkopier eller paritet |
| 222 |
\begin{enumerate}[<+->] |
| 223 |
\item Leveres korrekte data til applikasjonen, og |
| 224 |
\item avviket korrigeres automatisk på den syke disken |
| 225 |
\end{enumerate} |
| 226 |
\item Finnes ingen alternativer, så må filene restaureres fra |
| 227 |
backup |
| 228 |
\end{itemize} |
| 229 |
\end{itemize} |
| 230 |
\end{frame} |
| 231 |
|
| 232 |
\section{ZFS og RAID-kontrollere} |
| 233 |
\begin{frame}%[allowframebreaks] |
| 234 |
\frametitle{ZFS og RAID-kontrollere} |
| 235 |
\pause |
| 236 |
\begin{itemize}[<+->] |
| 237 |
\item \alert{Ikke} bruk ZFS sammen med RAID-kontrollere! |
| 238 |
\item I verste fall kan RAID-kontrolleren motarbeide ZFS |
| 239 |
\item Sett kontrolleren i JBOD-modus, eller |
| 240 |
\item la hver disk være sitt enslige RAID~0-volum |
| 241 |
\end{itemize} |
| 242 |
\end{frame} |
| 243 |
|
| 244 |
\section{Hvor kommer ZFS fra?} |
| 245 |
\begin{frame}%[allowframebreaks] |
| 246 |
\frametitle{Hvor kommer ZFS fra?} |
| 247 |
\pause |
| 248 |
\begin{itemize}[<+->] |
| 249 |
\item Utviklet av Jeff Bonwick og kollegaer ved Sun Microsystems, |
| 250 |
Inc. |
| 251 |
\item Arbeidet begynte i 2001 |
| 252 |
\item ZFS $\to$ Solaris, oktober 2005 |
| 253 |
\item ZFS er lisensiert etter «Common Development and Distribution |
| 254 |
License» (CDDL) |
| 255 |
\item ZFS $\to$ OpenSolaris, november 2005 |
| 256 |
\item ZFS $\to$ FreeBSD, april 2007 |
| 257 |
\item Linux' GPL~v2-lisens kompliserer import av ZFS |
| 258 |
\begin{itemize}[<+->] |
| 259 |
\item ZFS i Linux gjennom FUSE gjenstår som en (treg) mulighet |
| 260 |
\item Brian Behlendorf ved Lawrence Livermore National Laboratory |
| 261 |
(LLNL) har laget «Native ZFS for\slash on Linux» |
| 262 |
\end{itemize} |
| 263 |
\item ZFS var tilgjengelig i Mac OS~X 10.5, bare read-only, men har |
| 264 |
vært tilbaketrukket siden oktober 2009 |
| 265 |
\item Andre OS med ZFS-støtte: OpenIndiana, FreeNAS, PC-BSD, |
| 266 |
GNU/kFreeBSD og NetBSD |
| 267 |
\end{itemize} |
| 268 |
\end{frame} |
| 269 |
|
| 270 |
\section{Fremtiden for ZFS?} |
| 271 |
\begin{frame}%[allowframebreaks] |
| 272 |
\frametitle{Fremtiden for ZFS?} |
| 273 |
\pause |
| 274 |
\begin{itemize}[<+->] |
| 275 |
\item Oracle kjøpte opp Sun Microsystems, 27.~januar 2010 |
| 276 |
\item Oracle ville gjøre OpenSolaris om til «ClosedSolaris» |
| 277 |
\item Hele ZFS-teamet hos Oracle sa opp på dagen, 90 dager etter den |
| 278 |
avgjørelsen |
| 279 |
\item ZFS lever videre hos |
| 280 |
\begin{itemize}[<+->] |
| 281 |
\item Oracle |
| 282 |
\item illumos |
| 283 |
\item OpenZFS |
| 284 |
\item FreeBSD |
| 285 |
\item Delphix |
| 286 |
\item iXsystems |
| 287 |
\item Joyent |
| 288 |
\item NetBSD |
| 289 |
\item Nexenta |
| 290 |
\end{itemize} |
| 291 |
\end{itemize} |
| 292 |
\end{frame} |
| 293 |
|
| 294 |
%\subsection{Underemne 1a} |
| 295 |
%\begin{frame}%[allowframebreaks] |
| 296 |
% \frametitle{Emne 1} |
| 297 |
% \framesubtitle{Underemne 1a} |
| 298 |
% \pause |
| 299 |
% \begin{itemize}[<+->] |
| 300 |
% \item Bla, bla, bla |
| 301 |
% \end{itemize} |
| 302 |
%\end{frame} |
| 303 |
|
| 304 |
\part{Del 2: ZFS!} |
| 305 |
|
| 306 |
\begin{frame} |
| 307 |
\partpage |
| 308 |
\end{frame} |
| 309 |
|
| 310 |
\section*{Oversikt over del~2: ZFS!} |
| 311 |
\begin{frame}%[allowframebreaks] |
| 312 |
\frametitle{Oversikt over del~2: ZFS!} |
| 313 |
\tableofcontents%[pausesections] |
| 314 |
\end{frame} |
| 315 |
|
| 316 |
\section{Administrasjon av ZFS} |
| 317 |
\begin{frame}%[allowframebreaks] |
| 318 |
\frametitle{Administrasjon av ZFS} |
| 319 |
\pause |
| 320 |
\begin{itemize}[<+->] |
| 321 |
\item To kommandoer (med underkommandoer): |
| 322 |
\begin{enumerate}[<+->] |
| 323 |
\item \texttt{zpool} |
| 324 |
\item \texttt{zfs} |
| 325 |
\end{enumerate} |
| 326 |
\item Det finnes en tredje kommando for de nysgjerrige: \texttt{zdb} |
| 327 |
\begin{itemize}[<+->] |
| 328 |
\item Brukes for å avlese indre ZFS-detaljer |
| 329 |
\end{itemize} |
| 330 |
\end{itemize} |
| 331 |
\end{frame} |
| 332 |
|
| 333 |
\section{Oppretting av pooler} |
| 334 |
\begin{frame}%[allowframebreaks] |
| 335 |
\frametitle{Oppretting av pooler} |
| 336 |
\pause |
| 337 |
\begin{itemize}[<+->] |
| 338 |
\item \texttt{zpool create [\textit{opsjoner}] |
| 339 |
\textit{navn-på-pool\/} [\textit{organiseringstype}] |
| 340 |
\textit{ingredienser\/} [\textit{organiseringstype |
| 341 |
ingredienser}] ...} |
| 342 |
\item Unngå å plassere mer enn 9 enheter i hver vdev |
| 343 |
\item I stedet for å stripe en pool over 20 harddisker, vurdér å |
| 344 |
speile to og to harddisker i 10 grupper |
| 345 |
\end{itemize} |
| 346 |
\end{frame} |
| 347 |
|
| 348 |
\subsection{Enkle pool-eksempler} |
| 349 |
\begin{frame}%[allowframebreaks] |
| 350 |
\frametitle{Oppretting av pooler} |
| 351 |
\framesubtitle{Enkle pool-eksempler} |
| 352 |
\pause |
| 353 |
\begin{itemize}[<+->] |
| 354 |
\item Singledisk: |
| 355 |
\item \texttt{zpool create rpool da0} |
| 356 |
\item RAID~0 over to disker: |
| 357 |
\item \texttt{zpool create rpool da0 da1} |
| 358 |
\item RAID~1 over to disker: |
| 359 |
\item \texttt{zpool create rpool \alert{mirror} da0 da1} |
| 360 |
\item RAID~5 over tre disker: |
| 361 |
\item \texttt{zpool create rpool \alert{raidz1} da0 da1 da2} |
| 362 |
\item RAID~6 over seks disker: |
| 363 |
\item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3 da4 |
| 364 |
da5} |
| 365 |
\item «RAID~7» over ni disker: |
| 366 |
\item \texttt{zpool create rpool \alert{raidz3} da0 da1 da2 da3 da4 |
| 367 |
da5 da6 da7 da8} |
| 368 |
\end{itemize} |
| 369 |
\end{frame} |
| 370 |
|
| 371 |
\subsection{Avanserte pool-eksempler} |
| 372 |
\begin{frame}%[allowframebreaks] |
| 373 |
\frametitle{Oppretting av pooler} |
| 374 |
\framesubtitle{Avanserte pool-eksempler} |
| 375 |
\pause |
| 376 |
\begin{itemize}[<+->] |
| 377 |
\item RAID~\only<1-3|handout:0>{?}\only<4->{1+0 (3 vdevs)}: |
| 378 |
\item \texttt{zpool create rpool \alert{mirror} da0 da1 |
| 379 |
\alert{mirror} da2 da3 \alert{mirror} da4 da5} |
| 380 |
\pause |
| 381 |
\item RAID~\only<5-6|handout:0>{?}\only<7->{5+0 (2 vdevs)}: |
| 382 |
\item \texttt{zpool create rpool \alert{raidz1} da0 da1 da2 |
| 383 |
\alert{raidz1} da3 da4 da5} |
| 384 |
\pause |
| 385 |
\item RAID~\only<8-9|handout:0>{?}\only<10->{6+0 (2 vdevs)}: |
| 386 |
\item \texttt{zpool create rpool \alert{raidz2} da0 da1 da2 da3 \alert{raidz2} da4 da5 da6 da7} |
| 387 |
\pause |
| 388 |
\item RAID~\only<11-12|handout:0>{?}\only<13->{1+5+0 (2 vdevs)}: |
| 389 |
\item \texttt{zpool create rpool \alert{mirror} da0 da1 \alert{raidz1} da2 da3 da4} |
| 390 |
\end{itemize} |
| 391 |
\end{frame} |
| 392 |
|
| 393 |
\end{document} |
| 394 |
|
| 395 |
Local Variables: |
| 396 |
TeX-PDF-mode:t |
| 397 |
End: |