Courses/Computer Science/CPSC 457.F2014/Lecture Notes/Filesystems
Contents
File Systems
In this session, we will consider what a file system is and what its role is as a data storage and namespace management infrastructure.
We will look at how it supports indexing file structure, using FAT, the Unix File System, and the ext2/3/4 file systems as examples.
Notes
Major Kernel Data Structures supporting Files and File Systems
scribe notes
- s1
- s2
- s3
File Holes Code
(eye@mordor files)$ cat seek.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <unistd.h> #define ONE_GB (1 * 1024 * 1024 * 1024) char* message1 = "I swear by my life and my love of it that I will never live for the sake of another man, "; char* message2 = "nor ask another man to live for mine.\n"; int main(int argc, char* argv[]) { int fd; off_t offset = ONE_GB; int whence = SEEK_END; fd = open("moralcodecastinsteel.txt", O_WRONLY | O_CREAT, S_IRWXU); if (-1==fd) { perror("main"); return -1; } write(fd, message1, strlen(message1)); lseek(fd, offset, whence); write(fd, message2, strlen(message2)); sync(); close(fd); return 0; } (eye@mordor files)$
Hard and Soft Links Example
The question was: does a hard link use the same inode or a new one? In contrast, what does a soft link require?
(This also demonstrates the use of the stat(1) command for examining file metadata).
(eye@mordor files)$ cd (eye@mordor ~)$ man ln (eye@mordor ~)$ ln /home/eye/457/lectures/files/seek.c s.c (eye@mordor ~)$ ll -h total 236K drwxr-xr-x. 35 eye cpsc 4.0K Nov 18 12:45 ./ drwxr-xr-x. 4 root root 4.0K Oct 8 21:00 ../ drwxrwxr-x. 9 eye sauron 4.0K Oct 23 13:44 457/ ... -rw-r--r--. 2 eye sauron 741 Nov 18 11:32 s.c ... (eye@mordor ~)$ more s.c ... (eye@mordor ~)$ stat s.c File: `s.c' Size: 741 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 438978 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 500/ eye) Gid: ( 502/ sauron) Access: 2013-11-18 12:45:55.077096047 -0700 Modify: 2013-11-18 11:32:50.860726198 -0700 Change: 2013-11-18 12:45:41.631749590 -0700 (eye@mordor ~)$ stat seek-soft.c File: `seek-soft.c' -> `/home/eye/457/lectures/files/seek.c' Size: 35 Blocks: 0 IO Block: 4096 symbolic link Device: 803h/2051d Inode: 438878 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 500/ eye) Gid: ( 502/ sauron) Access: 2013-11-18 12:46:40.482265607 -0700 Modify: 2013-11-18 12:46:36.621166153 -0700 Change: 2013-11-18 12:46:36.621166153 -0700 (eye@mordor files)$ stat /home/eye/457/lectures/files/seek.c File: `/home/eye/457/lectures/files/seek.c' Size: 741 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 438978 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 500/ eye) Gid: ( 502/ sauron) Access: 2013-11-18 12:45:55.077096047 -0700 Modify: 2013-11-18 11:32:50.860726198 -0700 Change: 2013-11-18 12:45:41.631749590 -0700 (eye@mordor ~)$
Note how the soft link has its own (new) inode, and how the link count for 'seek.c' has been increased by 1 by virtue of the hard link at ~/s.c
Trivia
http://pages.cpsc.ucalgary.ca/~locasto/teaching/2012/CPSC457/code/jailed.txt
- you need to copy at least the dynamically linked libraries that the app needs; you can use the ldd utility to list them
- or you can statically compile and link your program so it brings what it needs.
- programs may also depend on other utilities in /usr/bin/ or /bin (i.e., they may fork off a process to accomplish some task)
http://pages.cpsc.ucalgary.ca/~locasto/teaching/2012/CPSC457/code/escapejail.txt
- note that using a symbolic link to get out doesn't work, but a hard link does; however:
- this link needs to be set up beforehand -- you can't create such a link once chroot'd
script demonstrating semantics of Directory Permissions
Scribe Notes
- s1
- s2
- s3
Reading
- MOS, Chapter 4.3: File System Implementation
- MOS, Chapter 4.5: Example File Systems
- MOS, Chapter 10.6: The Linux File System
Optional Reading
- (if you have it) ULK, Chapter 1: SS: An Overview of the Unix Filesystem (pp 12---19)