Połączenie - Czyszczenie systemu plików

Debian dołącza wreszcie do innych uniksowych dystrybucji, wprowadzając łączenie katalogów /usr.


Ferdinand Thommes

Od 1993 roku Filesystem Hierarchy Standard (HS) [1] jest wyznacznikiem struktury katalogów wzorowanej na tej, która jest w Uniksie. Wymaga on partycji root, w której umieszczone są wszystkie pliki systemu potrzebne do rozruchu i montowania innych partycji. W efekcie mamy 14 katalogów (lub dowiązań symbolicznych): /bin, /boot, /dev, /etc, /lib, /media, /mnt, /opt, /run, /sbin, /srv, /tmp, /usri /var. Jedynie katalogi /opt, /usri /var mogą być umieszczone na innych partycjach. Dodatkowo FHS uważa katalog domowy za opcjonalny, podobnie jak /root, /lib32i /lib64. W 2015 roku FHS został zintegrowany z LSB (Linux Standard Base) i jest teraz utrzymywany pod parasolem Linux Foundation. Od 2012 roku kilka dystrybucji zdecydowało się na połączenie katalogów obecnych w /usr [2], modyfikując w ten sposób FHS (i z tego powodu nie są już zgodne z LSB). Od dziesiątej wersji systemu Debian dołączył do tego grona. b001 Rysunek 1: Oto jak na schemacie drzewa katalogów odbywa się łączenie w /usr. Zmiany w katalogu głównym W Debianie 10 wprowadzono zmiany do katalogu root dla nowych instalacji. To, co nazywamy łączeniem w /usr, to przeniesienie zawartości /bin, /sbin, /libi /lib64 do odpowiednich katalogów w /usr. Ze względu na kompatybilność w katalogu głównym pozostają jedynie dowiązania symboliczne. Wynika z tego, że dwa katalogi z plikami binarnymi oraz dwa katalogi z bibliotekami łączą się w jedno (Rysunek 1). Debian, w porównaniu do innych dystrybucji, dosyć późno dołączył do systemów łączących katalogi z /usr. Już w 2012 roku deweloperzy Fedory, Harald Hoyer i Kay Sievers, zaimplementowali łączenie w /usrw Fedorze 17 [3]. Solaris zdecydował się na taki krok dwa lata wcześniej, w wersji 11. Arch Linux również rozpoczął scalanie katalogów w 2012 roku, a łączenie w /usrw 2013 roku. W systemie tym połączono też /bini /sbin, na co Debian w tej chwili się nie decyduje. Zmianę tę wspierał Lennart Poettering, twórca PulseAudio, Avahi i systemd, gdyż umożliwia ona wprowadzenie systemów bezstanowych [4]. Po wprowadzeniu łączenia w /usr, możliwe jest montowanie trwałych części zainstalowanego systemu operacyjnego z ochroną przed zapisem tak, aby możliwa była ich automatyczna aktualizacja, a nawet dystrybuowanie ich do różnych hostów lub kontenerów. Zanim wprowadzono łączenie w /usr, aby montować /usr poprzez sieć lub jako oddzielną partycję, potrzebne było historyczne partycjonowanie. System montuje katalog /usr dosyć wcześnie w procesie rozruchu, na długo przed initrd [5]. b002 Rysunek 2: Przed połączeniem w /usr (powyżej): katalogi /bin, /lib, /lib64i /sbin znajdują się w katalogu głównym i są duplikowane w katalogu /usr. Po konwersji (poniżej): katalogi /bin, /lib, /lib32, /lib64i /sbin istnieją w formie dowiązań symbolicznych do fizycznych katalogów w /usr. Uwarunkowania historyczne Historycznie, podział katalogów, w którym niektóre z nich duplikują się w katalogu głównym i w /usr, sięga początków rozwoju Uniksa, czyli wczesnych lata 70. XX w.. Kiedy Ken Thompson i Dennis Ritchie zaczęli rozwijać Uniksa w 1969 roku, przestrzeń dyskowa była ograniczona. Na początku Thompson i Ritchie korzystali z dyskietek, a potem, około 1971 roku, przenieśli się na komputer PDP-11 [6]. PDP-11 miał już twardy dysk o pojemności do 512 kB i wspierał nośniki taśmowe RK05 DECpack [7] o pojemności 2,5 MB, które były duże, ale zdecydowanie wolniejsze. Kiedy katalog główny urósł powyżej pół megabajta, największy katalog z aplikacjami i narzędziami został zapisany na RK05-DECpack, gdzie do tej pory znajdowały się jedynie dane użytkownika. W oparciu na to punkt montowania nazwano /usr (inne źródła twierdzą, że akronim ten oznacza „Unix System Resources”). Prawdopodobnie obie wersje są prawdziwe, ponieważ po wprowadzeniu trzeciego dysku twardego dane użytkownika zostały na niego przeniesione, sprawiając, że zmiana nazwy nabrała sensu. Ponieważ katalog główny, ze względu na ograniczenia pojemnościowe, był teraz dystrybuowany na dwóch dyskach twardych, udany rozruch wymagał, aby wszystko, co znajdowało się na pierwszym dysku, pozostawało dostępne, aby system mógł dojść do momentu, kiedy może zamontować /usr. Z tego powodu wprowadzono między innymi katalogi /bin, /libi /sbin, które znajdziemy zarówno w katalogu głównym, jak i w /usr. Pomimo wprowadzenia dysków twardych o pojemności wystarczającej dla całego systemu root, taki historyczny podział utrzymywał się przez wiele lat i przeniesiony został do FHS. Dzisiaj nie ma już powodu do duplikowania tych katalogów (więcej na ten temat znajdziemy w eseju Roba Landleya [8]) b003 Rysunek 3: Zmiany widać też w katalogu głównym, który wyświetla w terminalu dowiązania symboliczne. Przedostatni Canonical wprowadził połączenie katalogów w /usrw Ubuntu 19.04. Po wydaniu Debian Buster openSUSE będzie jedyną główną dystrybucją bez łączenia katalogów w /usr. Debian rozpoczął migrację w 2016 roku, kiedy to pakiet usrmerge stał się dostępny w niestabilnej gałęzi [9]. usrmerge zawiera skrypt w Perlu, który konwertuje aktualny system tak, że katalogi w /usr stają się połączone. Twórcy wprowadzili też zmiany do pakietu debootstrapi teraz tworzy on wymagane dowiązania symboliczne, zanim zacznie instalacje pakietów w chroot. Ze względu na błędy, których nie udało się na czas naprawić w Debianie 9, twórcy przenieśli połączenie /i /usr do Debiana 10. Jednak w czasie dalszych prac pojawiły się inne błędy, gdyż pakiety utworzone po połączeniu nie działały na systemach bez łączenia. Większości z tych błędów już dawno nie ma lub dostępne są do nich odpowiednie łatki [10]. Mimo to deweloper Debiana, Ian Jackson, uważa, że opisywana zmiana może prowadzić do serii poważnych błędów i zaapelował do Komitetu Technicznego Debiana (TC) o ponowne odroczenie łączenia w /usr [11]. Jednak w marcu TC nie zgodziło się z jego prośbą i Debian 10 wprowadza pełne łączenie w /usr [12]. Testowanie zmiany W ramach wyjaśnienia TC przedstawiło zalety i wady oraz plany na przyszłość dla Debiana 11 Bullseye. Ci, którzy zainstalowali Debiana 10 lub jego pochodne, mogą więc spodziewać się systemu z połączonym katalogiem /usri dowiązaniami symbolicznymi /bin, /sbini /lib, prowadzącymi do katalogów /usr/bin, /usr/sbini /usr/lib (Rysunek 2). Zmiana nie jest wprowadzana na istniejących systemach, chyba że użytkownik sam się na nią zdecyduje. W takim wypadku musimy jedynie zainstalować pakiet usrmerge, który przeniesie odpowiednie katalogi i wprowadzi dalsze zmiany. W czasie instalacji Debian prosi o potwierdzenie, gdyż zmian nie da się odwrócić. Po zmianach sprawdzamy, czy istnieje katalog /etc/dpkg/dpkg.cfg.d/usrmergei czy zawiera nazwy pakietów. Jeśli tak, to oznacza to, że ciągle istnieją konflikty z tymi pakietami. Jeśli jest pusty lub nie istnieje, możemy usunąć usrmerge. W innym przypadku czekamy, aż lista będzie pusta (Rysunek 3). W przeciwieństwie do Debiana, inne dystrybucje wprowadziły łączenie w /usr zgodnie z harmonogramem. Komplikacje w przypadku Debiana wynikały z decyzji deweloperów zakładającej, że starsze systemy pozostaną nietknięte, a użytkownicy będą mogli wybrać, czy wprowadzać zmianę. Bardziej szczegółowa analiza problemów Debiana z tą migracją znajduje się na stronie LWN.net [13].
Wnioski i prognozy Przejście na połączenie katalogu /usr eliminuje historyczne duplikowanie katalogów i otwiera drogę dla nowych technik, takich jak bezstanowe systemy i atomowe aktualizacje, umożliwiając tym samym obsługę migawek. Jednak większość użytkowników raczej nie zauważy żadnych zmian. Z drugiej strony dowiązania symboliczne do podkatalogów w /usr pozostaną pewnie z nami przez parę lat. W Debianie 11 celem jest to, aby pakiety Debiana mogły być budowane w systemach ze zmianą w /usr oraz bez niej i aby działały na innych systemach bez ograniczeń. Info [1] FHS: https://pl.wikipedia.org/wiki/Filesystem_Hierarchy_Standard [2] Łączenie /usr: https://wiki.debian.org/UsrMerge [3] Fedora 17: https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/ [4] Systemy bezstanowe: https://en.wikipedia.org/wiki/Stateless_protocol [5]initrd: https://pl.wikipedia.org/wiki/Initrd [6] PDP-11: https://pl.wikipedia.org/wiki/PDP-11 [7] RK05: https://en.wikipedia.org/wiki/RK05 [8] Rob Landley: http://landley.net/writing/hackermonthly-issue022-pg33.pdf [9] Pakiet usrmerge: https://salsa.debian.org/md/usrmerge/raw/master/debian/README.Debian [10] Błędy: https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=usrmerge;[email protected] [11] Raport o błędach Ian Jacksona: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23914897 [12] Decyzja TC: https://lists.debian.org/debian-devel-announce/2019/03/msg00001.html [13] Problemy z migracją w Debianie: https://lwn.net/Articles/773342/

Zaloguj się, aby dodać komentarz

Nie masz konta? Zarejestruj się »

Zobacz także

Skuteczne narzędzia do wykrywania uszkodzonych podzespołów

pobierz

Wykrywanie i usuwanie niechcianych programów

pobierz

Polecane artykuły

Array ( [docId] => 50148 )

Array ( [docId] => 50148 )