Uniksowy system plików
| SFU | ||
|---|---|---|
| deweloper | CSRG | |
| Pełne imię i nazwisko | System plików UNIX | |
| Obsługiwane systemy operacyjne | A/UX , DragonFlyBSD , FreeBSD , FreeNAS , HP-UX , NetBSD , Linux , OpenBSD , Solaris , SunOS , Tru64 UNIX , UNIX System V i inne | |
| Wstęp | ( 4.2BSD ) | |
| Struktury | ||
| zawartość katalogu | Stół | |
| Granic | ||
| Maksymalny rozmiar pliku | 2 73 bajty (8 ZB ) | |
| Maksymalny rozmiar nazwy pliku | 255 bajtów | |
| Maksymalny rozmiar woluminu | 2 73 bajty (8 ZB ) | |
| Charakterystyka | ||
Unix File System (UFS) to system plików używany przez różne systemy operacyjne UNIX i POSIX . Jest to pochodna Berkeley Fast File System ( FFS ), który jest rozwijany z FS UNIX (ten ostatni opracowany w Bell Labs ).
Prawie wszystkie pochodne BSD , w tym FreeBSD , NetBSD , OpenBSD , NeXTStep i Solaris używają wariantu UFS. W systemie Mac OS X jest dostępny jako alternatywa dla HFS . W systemie Linux , istnieje częściowe wsparcie dla systemu plików UFS tylko do odczytu i używa natywnego systemu plików typu ext3 , z projektem inspirowanym UFS.
Projekt
System plików UFS składa się z następujących części:
- kilka bloków na początku partycji zarezerwowanej dla ładowania początkowego (która musi być inicjowana oddzielnie od systemu plików).
- superblok zawierający magiczną liczbę identyfikującą go jako UFS i kilka innych ważnych liczb opisujących parametry dostrajania geometrii i zachowania.
- zbiór grup cylindrów. Każda grupa butli ma następujące elementy:
- kopia zapasowa superbloku.
- nagłówek cylindra ze statystykami, listą wolnego miejsca itp. o tym bloku cylindrów, podobnie jak w superbloku.
- liczba i- węzłów , z których każdy zawiera atrybuty pliku.
- szereg bloków danych.
I-węzły są ponumerowane sekwencyjnie. Kilka pierwszych i-węzłów jest zarezerwowanych ze względów historycznych, po których następują i- węzły katalogu głównego .
Pliki katalogów zawierają tylko listę plików w katalogu i skojarzony i-węzeł dla każdego pliku. Wszystkie metadane ( metadane ) są przechowywane w i- węźle .
Historia i ewolucja
Najwcześniejsze wersje systemu UNIX wykorzystywały system plików zwany po prostu FS . FS zawierał tylko blok startowy, superblok, garść i-węzłów i bloki danych. Działało to dobrze w przypadku małych dysków, dla których zaprojektowano wówczas system UNIX , ale zaawansowana technologia i dyski zaczęły rosnąć, przesuwając głowami tam iz powrotem między pulą i-węzłów a blokami danych, do których się odnosiły. ”, szum spowodowany przez obracające się głowice dysków wykonujące szybkie, powtarzające się wyszukiwanie danych z dala od magnetycznych talerzy dysku. BSD zoptymalizowało to w FFS , odwracając grupy cylindrów, dzieląc dysk na mniejsze grupy, z których każda ma własną pulę i-węzłów i bloków danych.
To, co robi BSD FFS, to próba zlokalizowania powiązanych bloków danych i metadanych w tej samej grupie cylindrów, a najlepiej, całej zawartości katalogu (dane i metadane dla całego pliku) w tym samym lub w pobliżu przez grupę cylindry, dzięki czemu udało się zmniejszyć fragmentację spowodowaną rozproszeniem zawartości katalogów na całym dysku.
Niektóre parametry wydajności w superbloku obejmują liczbę ścieżek i sektorów, prędkość obrotową dysku oraz wyrównanie sektorów między ścieżkami. W w pełni zoptymalizowanym systemie głowicę można przesuwać między sąsiednimi ścieżkami, aby odczytać pofragmentowane sektory naprzemiennych ścieżek podczas oczekiwania na obrót dysku.
W miarę jak dyski stawały się coraz większe, optymalizacje na poziomie sektorów stały się przestarzałe (zwłaszcza w przypadku dysków, które używały numeracji liniowej i zmiennych sektorów na ścieżkę ). Przy większych dyskach i większych plikach pofragmentowane odczyty stały się większym problemem. Aby temu zaradzić, BSD zwiększyło rozmiar bloku systemu plików z jednego sektora do 8k. Miało to różne skutki. Szansa, że sektory plików są ciągłe, jest znacznie większa. Zmniejsza się ilość narzutu na wyliczenie bloków pliku. Zwiększono liczbę bloków reprezentowanych w szerokości ustalonego bitu (pozwalając na większe dyski).
Przy większych rozmiarach bloków dyski z wieloma małymi plikami mogą stracić dużo miejsca, więc BSD dodało „fragmentację na poziomie bloku”, gdzie ostatni częściowy blok danych z wielu plików może być przechowywany w jednym bloku „fragmentu” zamiast wielu puste bloki.
Realizacje
Większość producentów systemów POSIX dostosowała UFS do własnych potrzeb, dodając zastrzeżone rozszerzenia, które mogą nie być rozpoznawane przez wersje UNIX innych programistów . Co zaskakujące, wielu nadal używa oryginalnego rozmiaru bloków i pól danych o tej samej szerokości co oryginalny UFS, więc pewien stopień zgodności (odczytu) jest zachowany na różnych platformach.
FreeBSD 5.0 wprowadził UFS2 , który dodaje obsługę woluminów powyżej 1TB ( TeraByte ) oraz obrazów systemu plików. Został przeniesiony do NetBSD .
System plików Linux ext2 został napisany od podstaw w oparciu o koncepcje UFS. ext2 umożliwia konfigurowanie rozmiarów bloków w czasie tworzenia systemu plików w celu obsługi większych dysków. Posiada również 64-bitowe pola danych w i-węźle do akceptowania większych plików. Ext3 dodaje kronikowanie . ReiserFS był pierwszym systemem plików z księgowaniem zawartym w jądrze Linuksa i jest szybszy podczas pracy z małymi plikami. Linux zawiera implementację UFS w celu zapewnienia zgodności binarnej na poziomie odczytu z innymi systemami UNIX , ale ponieważ nie ma standardowej implementacji rozszerzeń zewnętrznych dostawców, Linux ma obecnie tylko eksperymentalną obsługę zapisu dla UFS.
Począwszy od Solaris 7 firma Sun Microsystems włączyła rejestrowanie UFS do środowiska operacyjnego Solaris, które udostępnia systemowi plików z obsługą kronikowania systemowi UFS . Solaris UFS ma również rozszerzenia dla dużych plików, dużych dysków i innych funkcji.
Linki zewnętrzne
- Małe FAQ dotyczące UFS2 (w języku angielskim)
- Narzędzia UFS2 dla Linuksa