diff options
| author | Holger Dengler <dengler@linutronix.de> | 2019-01-13 15:03:55 +0100 |
|---|---|---|
| committer | John Ogness <john.ogness@linutronix.de> | 2019-01-18 15:27:09 +0100 |
| commit | 9282eadbc3b7cfe5a34e8a5a20fdac878d44b009 (patch) | |
| tree | 6e8128ec9484fdef8b68b4b7e874ea51c31951c7 | |
| parent | 07d65b50c4156453099a3a2083804e00451e2041 (diff) | |
linux-basics: Add Filesystem-Org slides
Add slides about Filesystem Organization and Structural Elements.
Signed-off-by: Holger Dengler <dengler@linutronix.de>
| -rw-r--r-- | images/filesystem-organization.odg | bin | 0 -> 11865 bytes | |||
| -rw-r--r-- | images/filesystem-organization.png | bin | 0 -> 50229 bytes | |||
| -rw-r--r-- | linux-basics/filesystems/Kconfig | 9 | ||||
| -rw-r--r-- | linux-basics/filesystems/Makefile | 1 | ||||
| -rw-r--r-- | linux-basics/filesystems/frm_filesystem_org.tex | 243 | ||||
| -rw-r--r-- | linux-basics/filesystems/pres_filesystem_org.tex | 20 |
6 files changed, 273 insertions, 0 deletions
diff --git a/images/filesystem-organization.odg b/images/filesystem-organization.odg Binary files differnew file mode 100644 index 0000000..c150a27 --- /dev/null +++ b/images/filesystem-organization.odg diff --git a/images/filesystem-organization.png b/images/filesystem-organization.png Binary files differnew file mode 100644 index 0000000..1cbe4f5 --- /dev/null +++ b/images/filesystem-organization.png diff --git a/linux-basics/filesystems/Kconfig b/linux-basics/filesystems/Kconfig index 69a9fd6..5ecd034 100644 --- a/linux-basics/filesystems/Kconfig +++ b/linux-basics/filesystems/Kconfig @@ -3,3 +3,12 @@ config LINUX_FILESYSTEMS default y help Papers about Linux filesystems + +config LINUX_FILESYSTEM_ORG + bool "Linux Filesystem Organization/Structural Elements" + default y + help + Papers about Linux Filesystem Organization and the structural + elements of filesystems. + - inodes/data-blocks + - file types diff --git a/linux-basics/filesystems/Makefile b/linux-basics/filesystems/Makefile index a5135f6..a20185c 100644 --- a/linux-basics/filesystems/Makefile +++ b/linux-basics/filesystems/Makefile @@ -1,2 +1,3 @@ obj-$(CONFIG_LINUX_FILESYSTEMS) += pres_filesystems_en.pdf obj-handout-$(CONFIG_LINUX_FILESYSTEMS) += handout_filesystems_en.pdf +obj-$(CONFIG_LINUX_FILESYSTEM_ORG) += pres_filesystem_org.pdf diff --git a/linux-basics/filesystems/frm_filesystem_org.tex b/linux-basics/filesystems/frm_filesystem_org.tex new file mode 100644 index 0000000..9694766 --- /dev/null +++ b/linux-basics/filesystems/frm_filesystem_org.tex @@ -0,0 +1,243 @@ +\subsubsection{Filesystem Elements} +% ---------------------------- +\begin{frame} +\frametitle{Filesystem: Basics Elements} +\begin{itemize} +\item Filesystem + \begin{itemize} + \item structured data organization for block-devices + \item super-block, inodes, data-blocks + \end{itemize} +\item super-block + \begin{itemize} + \item information about the filesystem itself + \end{itemize} +\item inode + \begin{itemize} + \item organizational data structure + \item unique inode number + \item meta-data + \item list of data-block addresses + \end{itemize} +\item data-block + \begin{itemize} + \item payload storage + \end{itemize} +\end{itemize} +\end{frame} +% Any data on a block-device is stored and accessed in blocks. This is an +% efficient way to deal with large data-sets. Because it is not easy, to +% find the right information in large, unsorted data-sets (especially for +% humans), Linux provides filesystems to organize the data in a +% block-device. +% Filesystems use some blocks of a block-device to store organizational +% information about the payload data on the device. The organizational +% structures are called "inodes". +% The "super-block" of a filesystem stores information about the filesystem +% itself, like block-size, number of blocks, number of inodes, and so on. + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Filesystem: INodes and Data-Blocks} +\begin{figure}[h] +\centering +\includegraphics[width=5cm]{images/filesystem-organization.png} +\end{figure} +\end{frame} +% The Diagram shows the organization of inodes and blocks. The inode is the +% informational part of a file or directory, it contains the meta-data (like +% owner, group, access-permissions) and the addresses of the data-blocks +% (where the data of a file or directory is stored). +% The payload of directories are name/inode-number tuples of their elements. + +\subsubsection{File Types} +% ---------------------------- +\begin{frame}[fragile] +\frametitle{File Types} +\begin{itemize} +\item \textbf{-}: normal file +\item \textbf{d}: directory +\item \textbf{l}: symbolic link +\item \textbf{c}: character device +\item \textbf{b}: block device +\item \textbf{s}: socket +\item \textbf{p}: named pipe (FIFO) +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: all file-types} +\begin{scriptsize} +\begin{verbatim} +-rw-r--r-- 1 6 file +drwxr-xr-x 2 4096 directory +lrwxrwxrwx 1 4 symlink -> file +crw-r--r-- 1 4, 65 devicenode_character +brw-r--r-- 1 8, 0 devicenode_block +srwxr-xr-x 1 0 socket +prw-r--r-- 1 0 pipe +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} +% Linux has several file types. The behaviour varies depending on the file +% type, but for the access to all type of files, the same syscalls are used +% (open, read, write, ioctl, mmap, ...). +% The file-types in Linux are: +% Normal file (-), directory (d), symbolic link (l), character and block +% devicenode, socket and pipe. + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Directory} +\begin{itemize} +\item hierarchical structure +\item references: name -> inode tuples +\item access permissions: create/delete entries +\item create directory: \textbf{mkdir <name>} +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: Directories} +\begin{scriptsize} +\begin{verbatim} +drwxr-xr-x 2 4096 directory1 +dr-xr-x--- 2 4096 directory2 +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} +% Directories provides a hierarchical organization for all file-types. In +% its payload, a directory contains name-inode tuples (file-names). The +% access-permissions of a directory manages the access of the directory +% itself, directory entries can be created or removed. E.g. if a directory +% is read-only, it is not possible to create new files in, or delete +% existing files from this directory. + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Symlinks} +\begin{itemize} +\item reference by pathname (relative and absolute) +\item broken, if destination doesn't exist +\item cross-filesystem: yes +\item access permissions: - +\item size: length of referenced pathname +\item create symlink: \textbf{ln -s <src> <dst>} +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: Symbolic Links} +\begin{scriptsize} +\begin{verbatim} +-rw-r--r-- 1 6 file +lrwxrwxrwx 1 4 symlink_rel -> file +lrwxrwxrwx 1 15 symlink_abs -> /home/user/file +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} +% Symlinks (or symbolic-links) are references to another entity in the +% filesystem-tree, based on its pathname. The path of a symlink can be +% either relative (to the link) or absolute (path starts with a /). Symlinks +% can be created to entities in another filesystem, where hard-links are +% filesystem-local. A link is broken, if the destination entity doesn't +% exist. The length of a symlink depends of the length of the path-name. +% The access-permissions of a symlink has no meaning in Linux. + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Hard Links} +\begin{itemize} +\item additional name entry to same inode-number +\item increase reference-count +\item cross-filesystem: no +\item access permissions: same as destination +\item size: same as destination +\item create hard-link: \textbf{ln <src> <dst>} +\item delete: remove only name-entry + \begin{itemize} + \item remove name-inode tuple (directory) + \item decrease reference-count (inode) + \end{itemize} +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: Hard Links} +\begin{scriptsize} +\begin{verbatim} +3165779 -rw-r--r-- 2 6 Jan 11 14:16 file +3165779 -rw-r--r-- 2 6 Jan 11 14:16 hard_link +3165785 lrwxrwxrwx 1 4 Jan 11 14:22 symlink -> file +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} +% Hardlinks are (additional) named references to an inode. Normal files are +% hard-links with a reference-count of 1. Had-links can only exist +% filesystem-local, because its just a name-inode reference. +% The meta-data (size, timestamp, access-permissions) of a hard-link are +% identical with the destination, because they are stored in the inode, the +% hard-links references to. Deleteing a hard-link does not affect the file +% content, it just removes the name-entry in the directory. Only if the last +% hard-link is removed (reference.count==0), the content is freed. +% Note: The filename is not part of the meta-data, its an entry in the +% directory. + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Character/Block Devices} +\begin{itemize} +\item inode-only +\item device handle/reference for Userspace +\item meta-data: major and minor number +\item more details: see \textbf{Linux Userspace-to-Kernel API} +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: Hard Links} +\begin{scriptsize} +\begin{verbatim} +crw-r--r-- 1 4, 65 devicenode_character +brw-r--r-- 1 8, 0 devicenode_block +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} + +% ---------------------------- +\begin{frame}[fragile] +\frametitle{Pipe and Socket} +\begin{itemize} +\item inode-only +\item named handle to IPC machanism (provided by Kernel) +\item pipe: FIFO (like anonymous pipes) +\item socket: UNIX domain socket +\end{itemize} +\bigskip +\begin{beamerboxesrounded}[shadow=true]{Listing: Hard Links} +\begin{scriptsize} +\begin{verbatim} +srwxr-xr-x 1 0 socket +prw-r--r-- 1 0 pipe +\end{verbatim} +\end{scriptsize} +\end{beamerboxesrounded} +\end{frame} + +% ---------------------------- +\subsubsection*{} +\begin{frame} +\frametitle{Resources} +\begin{itemize} +\item linfo.org + \begin{itemize} + \item \href {http://www.linfo.org/inode.html}{Inode Definition} + \item \href {http://www.linfo.org/file.html}{Files: A Brief Introduction} + \end{itemize} +\item man-Pages + \begin{itemize} + \item \href {http://man7.org/linux/man-pages/man1/ls.1.html}{man 1 ls} + \item \href {http://man7.org/linux/man-pages/man1/rm.1.html}{man 1 rm} + \item \href {http://man7.org/linux/man-pages/man1/ln.1.html}{man 1 ln} + \item \href {http://man7.org/linux/man-pages/man1/mkdir.1.html}{man 1 mkdir} + \item \href {http://man7.org/linux/man-pages/man1/mkfifo.1.html}{man 1 mkfifo} + \item \href {http://man7.org/linux/man-pages/man7/symlink.7.html}{man 7 symlinks} + \item \href {http://man7.org/linux/man-pages/man7/pipe.7.html}{man 7 pipe} + \end{itemize} +\end{itemize} +\end{frame} diff --git a/linux-basics/filesystems/pres_filesystem_org.tex b/linux-basics/filesystems/pres_filesystem_org.tex new file mode 100644 index 0000000..f571b8e --- /dev/null +++ b/linux-basics/filesystems/pres_filesystem_org.tex @@ -0,0 +1,20 @@ +\input{configpres} + +\subsection{Linux Filesystem} +\title{Linux Filesystem} +\subtitle{Organization and Structural Elements} + +% ---------------------------- +\maketitle + +% ---------------------------- +\begin{frame} +\frametitle{Overview} +\tableofcontents +\end{frame} + +% ---------------------------- +\input{linux-basics/filesystems/frm_filesystem_org.tex} + +\subsection*{} +\input{tailpres} |
