Mocowanie Unii

W komputerowych systemach operacyjnych montowanie unii jest sposobem łączenia wielu katalogów w jeden, który wydaje się zawierać ich połączoną zawartość . Montaż Union jest obsługiwany w Linuksie , BSD i kilku jego następcach oraz Planie 9 , z podobnym, ale nieco innym zachowaniem.

Jako przykład zastosowania montażu złączy rozważmy potrzebę aktualizacji informacji zawartych na płycie CD-ROM lub DVD . Chociaż dysk CD-ROM nie jest zapisywalny, można nałożyć punkt montowania dysku CD na zapisywalny katalog w montowaniu typu Union. Następnie aktualizacja plików w katalogu union spowoduje, że znajdą się one w katalogu z możliwością zapisu, dając złudzenie, że zawartość CD-ROM-u została zaktualizowana.

Implementacje

Plan 9

W systemie operacyjnym Plan 9 firmy Bell Labs (od połowy lat 80. XX wieku) montowanie w związkach jest centralną koncepcją, zastępując kilka starszych konwencji uniksowych katalogami związkowymi; na przykład kilka katalogów zawierających pliki wykonywalne , połączonych razem w jednym katalogu /bin , zastępuje zmienną PATH do wyszukiwania poleceń w powłoce.

Semantyka związku planu 9 jest znacznie uproszczona w porównaniu z implementacjami dla systemów operacyjnych w stylu POSIX : związek dwóch katalogów jest po prostu połączeniem ich zawartości, więc lista katalogów związku może wyświetlać zduplikowane nazwy. Ponadto nie podejmuje się żadnych wysiłków w celu rekurencyjnego łączenia podkatalogów, co prowadzi do niezwykle prostej implementacji. Katalogi są połączone w sterowalną kolejność; u/nazwa , gdzie u jest katalogiem unii, oznacza plik o nazwie nazwa w pierwszym katalogu składowym, który zawiera taki plik.

Uniksa i BSD

Implementacje unix/POSIX mają inne wymagania niż implementacja planu 9 ze względu na ograniczenia w zachowaniu tradycyjnego systemu plików Unix, co znacznie komplikuje ich implementację i często prowadzi do kompromisów. Problemy napotykane przez Union Mounting w systemach operacyjnych typu Unix obejmują:

  • Zduplikowane nazwy plików w katalogu są niedopuszczalne, ponieważ złamałoby to oczekiwania aplikacji dotyczące sposobu działania systemu plików Unix. Umieszczenie logicznego, stosu porządku pierwszeństwa na składnikach unii częściowo rozwiązuje ten problem, ale wymaga pamięci do rejestrowania, które pliki należy pominąć podczas wyświetlania katalogu (co w przeciwnym razie jest operacją prawie bezstanową).
  • Usuwanie wymaga specjalnego wsparcia: jeśli pliki o tej samej nazwie istnieją w kilku składnikach katalogu unii, zwykłe usunięcie go z jednego z elementów składowych powoduje ponowne pojawienie się pliku z jednego z pozostałych.
  • Wstawienie katalogu do stosu może spowodować niespójność w pamięci podręcznej nazw plików jądra .
  • Zmiana nazwy pliku w pojedynczym zamontowanym systemie plików (za pomocą wywołania systemowego rename ) powinna być operacją atomową , ale zmiana nazwy w ramach montowania unii może wymagać zmian w wielu katalogach składowych unii. Możliwym rozwiązaniem jest uniemożliwienie zmiany nazwy w takich sytuacjach i zamiast tego wymaganie od implementacji kopiowania i usuwania.
  • Stabilne numery i-węzłów dla plików, dowiązań twardych i we/wy mapowanych w pamięci ( mmap ) są trudne do poprawnej implementacji.

Wczesne próby dodania łączenia do systemów plików Unix obejmowały trójwymiarowy system plików ( Bell Labs ) i Translucent File Service w SunOS ( Sun Microsystems , 1988). Implementacja montowania złączy została dodana do wersji BSD systemu Unix w wersji 4.4 (1994), czerpiąc inspirację z tych wcześniejszych prób, planu 9 i systemów plików z możliwością układania w stosy w Spring (Słońce, 1994). 4.4BSD implementuje opisane powyżej podejście stosu katalogów. Podobnie jak w planie 9, operacje przechodzą przez ten stos od góry do dołu, aby rozwiązać nazwy, ale w przeciwieństwie do planu 9, montowania unii BSD są rekurencyjne, więc zawartość podkatalogów wygląda na scaloną w katalogu unii. Również w przeciwieństwie do wersji Plan 9, wszystkie warstwy z wyjątkiem górnej są tylko do odczytu: modyfikacja plików w unii powoduje, że ich zawartość jest najpierw kopiowana do górnej warstwy stosu, gdzie modyfikacje są następnie stosowane. Usuwanie plików jest realizowane poprzez zapisanie specjalnego typu pliku zwanego whiteout do najwyższego katalogu, co skutkuje oznaczeniem nazwy pliku jako nieistniejącej i ukryciem plików o tej samej nazwie w niższych warstwach stosu. Zaniki wymagają wsparcia ze strony bazowego systemu plików.

Linuks

Montowanie Union zostało zaimplementowane dla Linuksa 0.99 w 1993 roku; ta początkowa implementacja nosiła nazwę Inheriting File System, ale została porzucona przez jej programistę ze względu na jej złożoność. Kolejnym dużym wdrożeniem był UnionFS , który wyrósł z projektu FiST na Uniwersytecie Stony Brook . Próba zastąpienia UnionFS, aufs , została wydana w 2006 roku, a następnie w 2009 roku przez OverlayFS . W 2014 roku OverlayFS została dodana do standardowego kodu źródłowego jądra Linuksa .

Podobnie GlusterFS oferuje możliwość montowania różnych systemów plików rozproszonych w sieci, zamiast znajdować się na tej samej maszynie.

MergerFS, pierwotnie wydany w 2014 roku, jest aktywnie rozwijaną wtyczką FUSE typu open source, umożliwiającą łączenie dowolnych katalogów.