Courses/Computer Science/CPSC 457.F2013/Lecture Notes/Filesystems

= 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.

File Holes Code
(eye@mordor files)$ cat seek.c 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)$
 * 1) include 
 * 2) include 
 * 3) include 
 * 4) include 
 * 5) include 
 * 6) include 
 * 7) include 
 * 8) define ONE_GB (1 * 1024 * 1024 * 1024)

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)