diff options
Diffstat (limited to 'linux-basics/filesystems/frm_filesystem_org.tex')
| -rw-r--r-- | linux-basics/filesystems/frm_filesystem_org.tex | 243 |
1 files changed, 243 insertions, 0 deletions
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} |
