Log-strukturert filsystem (BSD) - Log-structured File System (BSD)
Den Log-Strukturert File System (eller LFS ) er en implementering av en log-strukturert filsystem (et konsept opprinnelig foreslått og utført av John Ousterhout ), opprinnelig utviklet for BSD . Den ble fjernet fra FreeBSD og OpenBSD ; den NetBSD gjennomføringen var ikke-fungerende før arbeidet fører opp 4,0 utgivelsen gjort det levedyktig igjen som en produksjons filsystem.
Design
Det meste av LFS-formatet er lånt fra UFS . De indirekte blokkerings-, inode- og katalogformatene er nesten identiske. Dette gjør at testede UFS-filsystemkoder kan brukes på nytt; nåværende implementeringer av LFS deler UFS-koden på høyere nivå med koden for lavere nivå for FFS, siden begge disse filsystemene har mye til felles med UFS.
LFS deler opp disken i segmenter , hvorav bare en er aktiv til enhver tid. Hvert segment har en overskrift som kalles en sammendragsblokk . Hver sammendragsblokk inneholder en peker til neste sammendragsblokk, som kobler segmenter inn i en lang kjede som LFS behandler som en lineær logg. Segmentene trenger ikke nødvendigvis være inntil hverandre på disken; av denne grunn anbefales større segmentstørrelser (mellom 384 kB og 1 MB) fordi de amorterer kostnadene for å søke mellom segmentene.
Hver gang en fil eller katalog endres, skriver LFS til sjefen for denne loggen:
- Eventuelle endrede eller nye datablokker.
- Indirekte blokker oppdatert for å peke på (1).
- Inoder oppdatert for å peke på (2).
- Inode kartblokker oppdatert til punkt på (3).
I motsetning til UFS, har inoder i LFS ikke faste lokasjoner. Et inode-kart - en flat liste over steder i inode-blokkering - brukes til å spore dem. Som med alt annet, blir også inode kartblokker skrevet til loggen når de endres.
Når et segment er fylt, fortsetter LFS å fylle det neste gratis eller rene segmentet. Segmenter sies å være skitne hvis de inneholder levende blokker, eller blokker som det ikke finnes noen nyere kopier lenger i loggen. LFS- søppeloppsamleren gjør skitne segmenter til rene ved å kopiere levende blokker fra det skitne segmentet til det nåværende segmentet og hoppe over resten. Sammendragsblokken i hvert segment inneholder et kart for å spore levende blokker.
Generelt er søppelinnsamlingen forsinket til det ikke er noen rene segmenter igjen; det kan også utsettes for når systemet er inaktivt. Selv da er det bare de minst skitne segmentene som er valgt for samling. Dette er ment å unngå straff ved rengjøring av hele segmenter når I / O-båndbredde er mest nødvendig.
Ved et sjekkpunkt (vanligvis planlagt omtrent hvert 30. sekund) skriver LFS de siste kjente blokkplasseringene av inodekartet og nummeret på det nåværende segmentet til et sjekkpunktregion på et fast sted på disken. Det er to slike regioner; AKU veksler mellom hvert sjekkpunkt. Når det er skrevet, representerer et sjekkpunkt det siste konsistente øyeblikksbildet av filsystemet. Gjenoppretting etter et brak og normal montering fungerer på samme måte - filsystemet rekonstruerer ganske enkelt sin tilstand fra det siste kontrollpunktet og fortsetter loggingen derfra.
ulemper
- Det kan være alvorlig filsystemfragmentering i LFS, spesielt for sakte voksende filer eller flere samtidige store skrifter. Dette påfører en alvorlig ytelsesstraff, selv om designgrunnen for loggstrukturerte filsystemer antar at disklest for det meste vil bli bufret.
- AKU blir gradvis mindre effektiv ettersom den nærmer seg maksimal kapasitet, når søppeloppsamleren må løpe nesten konstant for å gjøre rene segmenter tilgjengelige.
- LFS tillater ikke snapshotting eller versjonering, selv om begge funksjonene er trivielle å implementere generelt på loggstrukturerte filsystemer.
Merknader
- Seltzer, Margo; Bostic, Keith; McKusick, Marshall Kirk; Staelin, Carl (januar 1993), "En implementering av et loggstrukturert filsystem for UNIX" (PDF) , Proceedings of the Winter Winter Usenix 1993
- Matthews, Jeanna Neefe; Roselli, Drew; Costello, Adam M.; Wang, Randolph Y .; Anderson, Thomas E. (oktober 1997), "Forbedre ytelsen til loggstrukturerte filsystemer med adaptive metoder", SOSP '97 Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles : 238–251, doi : 10.1145 / 268998.266700 , ISBN 978-0897919166