4.2.36 · D1 · Coding › Operating Systems › Journaling — why, how it works
Ek single "save" actually bahut saari chhoti disk writes hoti hain, aur unke beech crash ho jaye to filesystem half-broken reh jaata hai. Journaling isko fix karta hai — pehle ek poori to-do list ek scratchpad par likhta hai, aur bilkul end mein usse "DONE" stamp karta hai, taaki recovery ko ya to ek plan jo poora wahan hai mile, ya bilkul nahi — kabhi bhi half-applied nahi.
Is page par kuch bhi assume nahi kiya gaya . Main note padhne se pehle, usmein aane wala har word, symbol, aur picture yahan bilkul scratch se build kiya gaya hai. Upar se neeche padho; har block agla block earn karta hai.
"Writes" ki baat karne se pehle hume us cheez ki ek picture chahiye jis par likha ja raha hai.
Definition Disk, sector, block
Ek disk numbered pigeonholes ki ek lambi shelf hai. Sabse chhota pigeonhole jo hardware ek baar mein read ya write kar sakta hai wo ek sector hota hai (historically 512 bytes). Filesystem sectors ko ek block mein group karta hai (jaise 4 KB) — wo sabse chhoti unit hai jiski usse parwah hoti hai.
Figure dekho: shelf chhote boxes ki ek row hai jinke addresses hain (block 9, block 12, block 50…). "Block 50 likhna" matlab box 50 par jaana aur uska poora content replace karna. Ye kyun matter karta hai: topic baar baar "the inode block", "the bitmap block", "the data block" kehta hai — ye sirf is ek shelf par named boxes hain.
Definition Atomic (single-sector) write
Ek operation atomic hoti hai agar wo ya to completely ho, ya bilkul nahi — koi visible half-state nahi hota. Disk ye promise karta hai exactly ek sector ke liye: chahe power mid-write mein chali jaaye, wo sector ya to poora purana rahega ya poora naya, kabhi bhi smeared mix nahi.
Intuition Hum "one sector" ke peeche kyun padte hain
Ye ek promise hi wo single solid ground hai jis par puri design tiki hai. Main note mein commit block trick isliye kaam karti hai kyunki wo ek chhoti write hai — hardware ki atomicity usse cover karti hai. Journaling jo bhi build karta hai wo ek tarika hai is one-sector guarantee ko writes ke ek group tak stretch karne ka.
Straight rakhne ke liye contrast:
Atomic (guaranteed) ek sector — all-or-nothing, hamesha.
Atomic (NOT guaranteed) do ya zyada writes "saath" hoti hain — disk aisi koi promise nahi deta.
Ek "create file" ya "append" kai named boxes ko touch karta hai. Tumhe har ek pehchaan aana chahiye.
Definition Char structures
Data block — ek box jo file ki actual bytes hold karta hai ("hello world").
Inode — ek box jo file ke baare mein facts rakhta hai: uska size, aur uske data blocks ke pointers (box numbers). Socho index card ek file ke liye.
Bitmap — har block ke liye ek bit: 1 = "ye box use mein hai", 0 = "free". Poori shelf ka used/free map .
Directory entry — name-to-inode mapping: "notes.txt" → inode 9. Phone book .
Figure mein, notes.txt mein ek block append karna teen cheezein ek saath change karta hai: data block (naye bytes), inode (bada size + naye block ka pointer), aur bitmap (naye block ko used mark karo). Topic ko ye kyun chahiye: "ek logical operation = bahut saari writes" literally ye teen arrows alag alag fire hona hai. Crash-consistency problem ek picture mein yahi hai. Zyada poori anatomy ke liye File Systems dekho.
Definition Consistent vs inconsistent
Ek filesystem consistent hota hai jab uske structures ek doosre se agree karte hain. Wo inconsistent (corrupt) hota hai jab wo contradict karte hain.
Do contradictions jo main note naam leta hai — ab inhe picture karo:
Lost block (left): bitmap kehta hai block 12 used hai, lekin koi inode uski taraf point nahi karta. Space leak ho gaya — hamesha ke liye kisi ke liye reserved. Bitmap likhne ke baad inode likhne se pehle crash hone se hota hai.
Dangling pointer (right): directory kehti hai "file → inode 9", lekin inode 9 kabhi likha hi nahi gaya. Usse follow karne par garbage milega — corruption. Inode se pehle directory likhne se hota hai.
Intuition Sirf order kyun nahi bachaa sakta
Chahe tum kaunsa bhi order chuno, ek crash do writes ke beech ki gap mein land kar sakta hai aur inme se ek contradiction produce kar sakta hai. Tum in-place writes ko order karne mein smart hoke ise beat nahi kar sakte — tumhe poori plan stage karne ke liye ek alag jagah chahiye. Woh jagah journal hai.
Ye concept ki writes ka ek group "all or nothing" hona chahiye iska ek naam hai — Atomicity — aur journaling woh tarika hai jisse filesystem usse manufacture karta hai.
Main note core rule ko A ≺ B likhta hai. Ye multiplication ya numbers par less-than nahi hai.
≺ sirf numbers ke liye < hai."
Kyun sahi lagta hai: ye less-than jaisa dikhta hai.
Fix: < sizes compare karta hai; ≺ events ko time mein order karta hai aur, crucially, matlab hai "durably complete" — actually platter par, sirf memory mein baithe nahi. Poora Write-Ahead Logging discipline yahi ek arrow hai: journal write ≺ in-place write.
Recovery rule ⟺ ("if and only if") use karta hai.
Topic ko ye kyun chahiye: ye ek scary "kya crash ne cheezein tod di?" ko ek mechanical yes/no lookup mein badal deta hai — ek block ki presence se.
Ek action idempotent hoti hai agar use dobara apply karne se ek baar apply karne se zyada kuch nahi badalta. Light switch ko ON karna idempotent hai; use flip karna nahi.
Intuition Journaling ko ye kyun
chahiye
Recovery replay ke beech dobara crash ho sakti hai, isliye same journal blocks unke homes par dobara copy ho sakte hain. Agar inode = final value do baar copy karna ek baar se alag ho, to recovery jo fix karne ki koshish kar rahi hai usse corrupt kar sakti hai. Kyunki ek fixed value ki write idempotent hoti hai (box waise bhi wahi value hold karta hai), replay hamesha repeat karne ke liye safe hai. Ye wo quiet property hai jo poori scheme ko sirf fast nahi balki correct banati hai.
Do promises jinhe log constantly confuse karte hain.
Definition Consistent vs durable
Consistent = on-disk structures ek doosre se contradict nahi karti (koi corruption nahi).
Durable = jo specific write tumne maangi thi wo platter par guaranteed hai aur crash survive karegi.
Intuition Journaling pehla deta hai, doosra nahi
Tumhare latest keystrokes power jaane par abhi bhi RAM buffer mein baithe ho sakte hain — journaling unhe magically save nahi karega; ye sirf promise karta hai ki filesystem khud broken nahi hai. Ek specific write ko platter par force karne ke liye tum fsync call karte ho — fsync and Durability dekho. Inhe alag rakho aur "journaling kabhi data nahi khoata" wala myth khatam ho jaata hai.
Definition Circular buffer
Ek fixed-size ring of slots jise tum order mein bharte ho; end par pahunchne ke baad tum wapas start par wrap karte ho aur sabse purane, already-finished slots reuse karte ho. Ek racetrack jahan writers chase karte hain, aur unke peeche ek "cleaner" jo complete ho chuki laps free karta hai.
Intuition Circular kyun, endless kyun nahi
Journal ek temporary intent list hai, backup nahi. Jab ek transaction uske real home par copy ho jaati hai (checkpointed ), uska journal slot dead weight ho jaata hai aur reuse ho jaata hai. Isliye log chhota rehta hai — aur isliye recovery fast hoti hai: tum ek chhoti ring scan karte ho, poori disk nahi (unlike fsck ). Ek related lekin alag trick, Copy-on-Write Filesystems , in-place overwrite ko poori tarah avoid karti hai; aur Databases apne transactions ke liye exactly ye WAL idea use karte hain.
Atomic single-sector write
FS structures: inode bitmap data dir
Inconsistency: lost block, dangling pointer
Commit block and iff recovery rule
Ise aise padho: disk aur uski atomicity guarantee root par hai; structures problem create karti hain (inconsistency); happens-before symbol rule ko power karta hai (WAL); commit block aur idempotency recovery ko correct banate hain — aur ye sab main journaling topic ko feed karta hai.
Khud test karo — tum main note ke liye ready ho jab har reveal tumhare apne words se match kare.
Disk kis ek write ki guarantee deta hai jo all-or-nothing ho? Ek single-sector write — wo ya to poora purana ya poora naya end hota hai, kabhi smeared nahi.
Ek inode kya hai, ek line mein? Ek index card jo file ke facts (size) aur uske data blocks ke pointers hold karta hai.
Bitmap kya store karta hai? Har block ke liye ek bit: 1 = in use, 0 = free — poori disk ka used/free map.
Ek inconsistent filesystem ka ek concrete example do. Lost block (bitmap kehta hai used, koi inode point nahi karta) ya dangling pointer (directory ek unwritten inode ko point karti hai).
Symbol A ≺ B zor se padho aur batao ye kya demand karta hai. "A happens-before B" — A ko B start hone se pehle durably disk par hona chahiye.
⟺ ek ek-taraf ⇒ se kya zyada deta hai?Dono directions: present ⇒ replay AUR absent ⇒ discard, isliye har case decide ho jaata hai.
Idempotent define karo aur batao replay ko ye kyun chahiye. Do baar karna = ek baar karna; recovery doosre crash ke baad blocks re-copy kar sakti hai, isliye repeats harmless hone chahiye.
Consistent vs durable — dono ka difference ek ek line mein? Consistent = structures contradict nahi karte; durable = ek specific write platter par guaranteed hai.
Journal circular buffer kyun hai aur endless kyun nahi? Ye ek temporary intent log hai; checkpointed slots free aur reuse ho jaate hain, isse chhota aur recovery fast rehti hai.