Write FS simulator in python

Implement a file system simulator

// Disk layout:
// [ boot block | sb block | log | inode blocks | free bit map | data blocks ]

Design a crash recovery system in Python

A system call pattern:

Begin ops Get a buffer Write data to buffer Write actions to log (Log_write) End ops

Flow

Begin ops waits until enough space in log blocks. Mark current ops as outstanding. Log_write adds a new block to the log list. End_op commits if no other outstanding system calls. Call commit. Commit does 4 steps: 1. Write modified blocks from cache to log blocks in disk 2. Write header to disk 3. Install writes from log blocks into home locations 4. Clear log 5. Clear head

Recover from log:

Triggers when the system restarts. 1. Read log head from disk. 2. Install writes into home locations. 3. Clear log. 4. Clear head.

Design a simple file system

The possible operations are:

  • mkdir() - creates a new directory

  • creat() - creates a new (empty) file

  • open(), write(), close() - appends a block to a file

  • link() - creates a hard link to a file

  • unlink() - unlinks a file (removing it if linkcnt==0)

The state of the file system is shown by printing the contents of four different data structures:

inode bitmap - indicates which inodes are allocated
inodes             - table of inodes and their contents
data bitmap   - indicates which data blocks are allocated
data                 - indicates contents of data blocks

Initial plan: 1. Read very simple fs impl. 2. Draw a PoC about how it works in the end 3. Write logging system 4. Design fs data structure 5. Implement my version of fs 6. Use mock for testing

Support transaction

Q: In actual system calls impl, each fs system call has a pattern, used for logging purpose. How do we design our simulator to work the same? A: To make it simple, let’s have batch updates: Begin Mkdir a Open a/test.txt Write a/test.txt ‘A Msg’ Link a/test.txt a/twins.txt Close a/test.txt End

With these sequences, we are making a transaction. All operations will be logged to log system, then perform the disk updates.

Last updated