Monday, September 20, 2010

Unix File System


Understanding UNIX / Linux file system

A conceptual understanding of file system, especially data structure and related terms will help you become a successful system administrator. I have seen many new Linux system administrator w/o any clue about file system. The conceptual knowledge can be applied to restore file system in an emergency situation.

What is a File?

File are collection of data items stored on disk. Or it's device which can store the information, data, music (mp3), picture, movie, sound, book etc. In fact what ever you store in computer it must be inform of file. Files are always associated with devices like hard disk ,floppy disk etc. File is the last object in your file system tree. 

What is a directory?

Directory is group of files. Directory is divided into two types:
  • Root directory - Strictly speaking, there is only one root directory in your system, which is denoted by / (forward slash). It is root of your entire file system and can not be renamed or deleted.
  • Sub directory - Directory under root (/) directory is subdirectory which can be created, renamed by the user.
Directories are used to organize your data files, programs more efficiently.

Linux supports numerous file system types

  • Ext2: This is like UNIX file system. It has the concepts of blocks, inodes and directories.
  • Ext3: It is ext2 filesystem enhanced with journalling capabilities. Journalling allows fast file system recovery. Supports POSIX ACL (Access Control Lists).
  • Isofs (iso9660): Used by CDROM file system.
  • Sysfs: It is a ram-based filesystem initially based on ramfs. It is use to exporting kernel objects so that end user can use it easily.
  • Procfs: The proc file system acts as an interface to internal data structures in the kernel. It can be used to obtain information about the system and to change certain kernel parameters at runtime using sysctl command. For example you can find out cpuinfo with following command:
# cat /proc/cpuinfo
  • Or you can enable or disable routing/forwarding of IP packets between interfaces with following command:
# cat /proc/sys/net/ipv4/ip_forward
# echo "1" > /proc/sys/net/ipv4/ip_forward
# echo "0" > /proc/sys/net/ipv4/ip_forward
  • NFS: Network file system allows many users or systems to share the same files by using a client/server methodology. NFS allows sharing all of the above file system.
  • Linux also supports Microsoft NTFS, vfat, and many other file systems. See Linux kernel source tree Documentation/filesystem directory for list of all supported filesystem.
You can find out what type of file systems currently mounted with mount command:
$ mount
OR
$ cat /proc/mounts

What is a UNIX/Linux File system?

A UNIX file system is a collection of files and directories stored. Each file system is stored in a separate whole disk partition. The following are a few of the file system:
  • / - Special file system that incorporates the files under several directories including /dev, /sbin, /tmp etc
  • /usr - Stores application programs
  • /var - Stores log files, mails and other data
  • /tmp - Stores temporary files
But what is in a File system?
Again file system divided into two categories:
  • User data - stores actual data contained in files
  • Metadata - stores file system structural information such as superblock, inodes, directories
  • Links:  http://www.pathname.com/fhs/pub/fhs-2.3.html
  • http://www.nycbug.org/files/FFS.pdf

Unix Process Management

                Every process has a process identification number that is used as the index to the process table. The Unix operating system provides a number of system calls for process management. The fork system call is used to create an identical copy of a process. The created process is called the child process and the original process is called as the parent process.

The exit( ) system call is called by a process that wants to terminate itself and leave a status to its parent. Inter-process synchronization can be achieved as follows. A parent process can get blocked using the wait system call until the termination of one of its child process. Signals are used to inform a process about the occurrence of an event. The kernel handles the signals in the context of the process that receive the signal by executing a routine called as the signal handler. The exec system call and its variation are used to execute another program by passing the arguments and environmental variables. The nice system call can be used by a process to control their scheduling priority. The following system calls allocreg, attachreg, growreg, loadreg, freereg, detachreg are used for memory management.

Example  for fork() in c programming


#include
#include
#include
#include


using namespace std;

int main() {
                int pid;
                pid=fork();

                if(pid==-1)
                {
                                printf("\nCant fork the process");
                                exit(1);
                }
                else if(pid== 0)
                {
                                printf("\nI am in Child Process:");
                }
                else
                {
                                printf("\nI am in Parent Process:");
                }

                return 0;
}