Szef kuchni poleca: Beefy Miracle t-shirts O mnie Planeta !apcoh Social
Szef kuchni poleca: Beefy Miracle t-shirts O mnie Planeta !apcoh Social
Jak
pisałem dwa lata temu, systemd pozbywa się pojęcia runleveli,
dając w zamian cele. Cel jest swego rodzaju punktem
synchronizacji, w którym system zapewnia określoną funkcjonalność. Zależności
między celami, tak jak między innymi jednostkami, nie są liniowe:
Otwórzmy powyższy obrazek i zastanówmy, co ja pacze?
Na początek legenda. Czarna strzałka oznacza, że wskazywany
cel jest wymagany przez wskazujący (Requires=).
Zielona wskazuje na kolejność, wskazywany musi się aktywować
do końca, zanim systemd przejdzie do wskazywanego (After=).
Czerwona oznacza konflikt (Conflicts=). Jak widać
shutdown.target konfliktuje ze wszystkich, czyli aktywacja
shutdownu powoduje zwinięcie wszystkich innych celi.
Jak widać w górnej-lewej części obrazka: nss-lookup.target nie
wymaga network.target. Jeśli jednak z jakiegoś powodu network.target
zostanie aktywowany, to nss-lookup.target wykona się po
nim — zielona strzałka.
Przy systemd nie można za bardzo powiedzieć o kolejności przy starcie systemu. Tutaj wybiera się docelowy stan systemu i osiąga go poprzez przywołanie wszystkich zależności. Analizę co się dzieje łatwiej jednak prowadzić od końca.
Załóżmy więc, że system ma działać w trybie graficznym. Celem jest więc
graphical.target, który z grubsza można porównać z runlevelem
2. w debianowatych. 4. w Slackware, 5. w starych redhatowych, SUSE i Archu —
umożliwia logowanie użytkowników w trybie graficznym.
Jako pierwsze aktywowane zostaną wymagania sysinit.target
(A special target unit covering early boot-up scripts). Ten zaciąga
przestrzenie wymiany (swap.target), lokalne systemy plików
(local-fs.target), w tym również szyfrowane z pytaniem o hasło,
jeśli potrzeba (cryptsetup.target). Aktywacje tej trójki odbywają
się równolegle. Kiedy zakończą się aktywacje i wystartowane zostaną
usługi dla tego celu, sysinit.target zostaje osiągnięty.
Umożliwia to przejście do basic.target. Zadaniem tego jest
dodatkowo uruchomienie wszystkich gniazd, na których słucha systemd
(sockets.target). System w tym stanie może przejść do trybu ratunkowego
(rescue.target) który daje powłokę odzyskiwania systemu. Przypominając:
mamy zamountowane lokalne systemy plików, włączony swap i zainicjowane
podstawowe mechanizmy dystrybucji. Taki runlevel 1.
Tu warto wspomnieć o trybie awaryjnym emergency.target. Jest to
absolutnie minimalny stan, w którym można próbować naprawić całkowicie zepsuty
system. Odpowiada niemal uruchomieniu jądra z parametrem init=/bin/sh,
daje jednak możliwość kontynuacji normalnego uruchamiania po naprawie.
Stąd system może przejść również multi-user.target. Jest to
podstawowy stan linuksa — działają prawie wszystkie demony, użytkownicy
moga logować się na konsolach (dzięki zaciągnięciu getty.target). Pachnie
jak runlevel 3. multi-user.target nie wymaga trybu ratunkowego,
ale jeśli takowy był uruchomiony, to musi skończyć się wykonywać przed przejściem
w m-u.target — zielona strzałka.
Z aktywnego multi-user.target już tylko krok do uruchomienia
graficznego zarządcy logowania i osiągnięcia zadanego graphical.target.
Większość z tych etapów opisana jest na stronie manuala
systemd.special.
Skąd brany jest cel przy starcie systemu? Zazwyczaj wskazuje go łącze symboliczne:
/usr/lib/systemd/system/default.target -> graphical.target. Administrator
może je przesłonić podając w linii poleceń jądra frazę systemd.unit=.
Cele są punktami, do których przypisujemy usługi do uruchomienia w obecnym
stanie. Weźmy np. wiszące luzem na obrazku cele po prawej stronie. Taki
bluetooth.target aktywowany jest przez pojawienie się urządzenia
obsługującego BT:
/usr/lib/udev/rules.d/99-systemd.rules:SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}="bluetooth.target"
i powoduje wystartowanie odpowiedniej usługi:
/etc/systemd/system/bluetooth.target.wants/bluetooth.service.
Podobnie można np. przywiesić usługi do wystartowanie w związku z kartą dźwiękową
do sound.target.
Nie należy zapominać, że start to tylko jeden z etapów życia systemu. Wdzięczny do omówienia, gdyż powoduje kaskadę aktywacji różnych celi. W normalnym użytkowaniu jest to jednak bardzo specyficzna sytuacja i nie należy się na niej skupiać w celach innych niż akademickie.
Obrazek wygenerowany grepem z systemctl dot.
Dekadę po wprowadzeniu architektury AMD64 przerobiłem w końcu ostatnią z moich maszyn na dystrybucję 64-bitową. Sprzęt był capable od dawna, ale jego wymiana odbyła się metodą transplantacji dysków ze starego komputera i nie było kiedy zmienić softu.
Procedura jest prosta. Instalujemy kernel 64 bitowy, uruchamiany z niego system z 32-bitowym userlandem i reinstalujemy wszystkie pakiety po kolei w wersjach x86_64. Userland 32 na jądrze 64 działa sprawnie nawet na x86, ale trzeba mieć na uwadze trzy drobiazgi:
Automount ma rozbieżne wielkości strukturki danych między 32 a 64 bity. Owocuje to zawieszeniem w czasie uruchamiania systemu 32 bit na jądrze 64 bit. Pamiętać należy o wyłączeniu automountów przed takim bootem.
RRD nie lubi baz stworzonych na innej architekturze. Tu warto zrobić rrdtool dump do xml na 32 bitach, a po upgradzie rrdtool restore.
PostgreSQL też nie lubi plików baz danych utworzonych na innej architekturze. Podobnie jak z RRD, najpierw pg_dumpall, a po upgradzie initdb i psql -f dump.sql.
Inny soft na razie problemów nie wykazuje. Zapomnienie o zrzutach może zawocować drapaniem się w głowę podczas poszukiwania jakieś jeszcze działającej 32 bitowej instalacji, żeby dokonać ich post factum. Ale na szczęście wystarcza pendrive USB z zainstalowaną 32 bitową instalacją i katalogi baz danych wyeksportowane przez NFS.
Ostatnio przemigrowałem z tgt na nowy, lepszy, wbudowany w jądro LIO. Chodzi o cel SCSI. Po robocie odsunąłem się od monitorów, spojrzałem na stary config, spojrzałem na nowy i naszła mnie refleksja.
Czy przejście z takiego sposobu konfigurowania:
vendor_id UTC FS Support
product_id Linux iSCSI
# Set the driver. If not specified, defaults to "iscsi".
default-driver iscsi
<target iqn.2010-08.com.fs.utc:dvdtmp>
backing-store /dev/mapper/sabretoothvg-iscsi.dvdtmp
</target>
<target iqn.2010-08.com.utc.fs:winxppp45client-stor1>
backing-store /dev/sabretoothvg/iscsi.winxppp45client-stor1
</target>
<target iqn.2011-02.com.utc.fs:esxi.local-space0>
backing-store /dev/sabretoothvg/iscsi.esxi.local-space0
</target>
<target iqn.2011-02.com.utc.fs:fcoe.test0>
backing-store /dev/mapper/sabretoothvg-fcoe.test0
allow-in-use yes
</target>
na taki (uwaga, ściana tekstu):
to naprawdę jakiś postęp? Powyżej to drobny fragment, całość ,,nowości'' ma prawie pół tysiąca linii i postać skryptu, który odtwarza ustawienia przez wykonanie wszystkich katalogów i dowiązań symbolicznych.#### Parameters for TCM subsystem plugin storage object reference python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --establishdev iblock_0/iblock0 /dev/sabretoothvg/fcoe.test0 python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --setunitserialwithmd iblock_0/iblock0 72ad13f0-c8d2-4d96-bffe-30f9cfc46f2f #### Parameters for TCM subsystem plugin storage object reference python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --establishdev iblock_1/gilbertus.swap /dev/sabretoothvg/iscsi.gilbertus.swap python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --setunitserialwithmd iblock_1/gilbertus.swap 7e05140f-6536-4813-a1a0-d9fdc3b7bca8 #### Parameters for TCM subsystem plugin storage object reference python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --establishdev iblock_3/esxi.local-space0 /dev/sabretoothvg/iscsi.esxi.local-space0 python /usr/lib/python2.6/site-packages/rtsadmin/tcm_node.py --setunitserialwithmd iblock_3/esxi.local-space0 5bcaffac-6da0-42b0-ad07-fe130609674 #### iSCSI Target Ports mkdir -p /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_0 ln -s /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_0/../../../../../../target/core/iblock_0/iblock0 /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_0/6efd3cb027 lio_node --aluasecmd iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd 1 0 mkdir -p /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_1 ln -s /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_1/../../../../../../target/core/iblock_4/winxppp45client-stor1 /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/lun/lun_1/1d6312ea35 lio_node --aluasecmd iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd 1 1 #### iSCSI Initiator ACLs for iSCSI Target Portal Group mkdir -p /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/acls/iqn.1994-05.com.fedora:5f21153a55f echo 16 > /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/acls/iqn.1994-05.com.fedora:5f21153a55f/cmdsn_depth mkdir /sys/kernel/config/target/fc #### fc Target Ports mkdir -p /sys/kernel/config/target/fc/20:00:00:23:ae:b2:f4:3b/tpgt_1/lun/lun_0 ln -s /sys/kernel/config/target/fc/20:00:00:23:ae:b2:f4:3b/tpgt_1/lun/lun_0/../../../../../../target/core/iblock_0/iblock0 /sys/kernel/config/target/fc/20:00:00:23:ae:b2:f4:3b/tpgt_1/lun/lun_0/b522dc7322
Do LIO dostępny jest targetcli, będący tak naprawdę kolorową nakładką na
mkdir, ln i touch. Ja rozumiem, że wszystko
jest plikiem, ale naprawdę zajęło mi pół godziny wpadnięcie na intuicyjny
sposób określenia IP, na który jądro ma słuchać. (Tym sposobem jest utworzenie
katalogu, dokładniej
mkdir -p /sys/kernel/config/target/iscsi/iqn.2003-01.org.linux-iscsi.sabretooth.x8664:sn.aeee2b8d6fdd/tpgt_1/np/192.168.6.9:3260).
Plik konfiguracyjny jest dla mnie czymś solidnym. Skrypt zastępujący go setkami poleceniem powłoki sprawia wrażenie sznurka i taśmy klejącej.
UPDATE: Ktoś jednak stwierdził, że lepsze będzie trzymanie konfiguracji w JSON. No cóż, ma szansę sprawdzić się lepiej niż skrypt shellowy.
Czytając o systemd
można czasem przeoczyć większą wizję. Celem nie jest jedynie napisanie kolejnego
zastępcy inita. To tylko element całości, którą jest zdefiniowanie (również
poprzez stworzenie) platformy Linuksowej. Ostatecznie
będzie można powiedzieć, że ,,w Linuksie''
systemd-loginctl list-sessions.socket/etc/machine-idxinetd, inetd
czy jeszcze czegoś innego. Osuszanie bagienka różnic między dystrybucjami powinno
ułatwić dostarczanie oprogramowania firmom trzecim.
Aby osiągnać ten cel, systemd dostarczany jest wraz z
garścią pomocniczych programików pojedynczego
zastosowania. Część ujednolica czynności wykonywane we wszystkich dystrybucjach,
część implementuje nowe mechanizmy mające stać się API Linuksa.
Najprostsze (ograniczające się do pojedyńczych syscalli) wbudowane
są w samą binarkę systemd.
Do czego zacząć się przyzwyczajać?
hostname1 — dostępna przez D-Bus usługa zarządzająca
krótką oraz opisową nazwą komputera; konfigurowana w /etc/hostnamesystemd-localed — dostępne przez D-Bus ustawianie
języka systemu; konfigurowane w /etc/locale.confsystemd-timedated — D-Bus; ustawianie czasu, daty,
strefy czasowej; konfiguracja w /etc/adjtime, /etc/timezone,
/etc/locatimesystemd-vconsole-setup — ustawienie układu klawiatury
i fontu na konsoli tekstowej; konfiguracja w /etc/vconsole.confsystemd-binfmt — konfiguracja jak traktować różne
pliki wykonywalne; katalog z konfiguracją: /etc/bindfmt.dsystemd-tmpfiles — tworzenie plików, katalogów i gniazd
przy starcie systemu; również kasowanie starych, nie używanych plików;
konfiguracja z /usr/lib/tmpfiles.d i /etc/tmpfiles.dsystemd-sysctl — ustawienie zmiennych jądra; konfiguracje
z katalogów {/usr/lib,/etc,/run}/sysctl.d i pliku /etc/sysctl.confsystemd-modules-load — ładowanie modułów jądra; pliki
konfiguracyjne w /etc/modules-load.dsystemd-kmsg-syslogd — minimalny demon zapamiętujący
informacje przed uruchomieniem właściwego syslogdsystemd-random-seed — inicjacja puli entropii generatora
pseudolosowego; również zapisanie stanu przy wyłączaniu komputeraWydzielenie tych drobiazgów ze skryptow startowych umożliwia:
/etc/binfmt.d)Ważnym nowością jest systemd-loginctl i
skojarzony /etc/systemd/systemd-logind.conf zarządzajacy sesjami
użytkownika. Odpowiada m. in. za automatycznie uruchamianie getty
na konsolach, na które przełącza się użytkownik. Login manager daje
informacje o zalogowanych użytkownikach, aktywnych sesjach i także pilnuje sprzątania
procesów po użytkownikach wylogowanych. Poleceniem systemd-loginctl enable-linger
można zażyczyć sobie uruchamiania sesji dla zwykłych użytkowników przy starcie systemu.
systemd-logind zarządza również wszystkimi zestawami
klawiatura+mysz+monitor+inne urządzenia, ułatwiając pracę wielu użytkowników
jednocześnie. Jest to efekt zapowiadanego
pozbycia się ConsoleKit.
W życiu zachodzi czasem potrzeba modyfikacji skryptów startowych (jednostek systemd). Co jeśli mamy jakiś niepełnosprawny program i chcemy opóźnić jego uruchomienie, a nie możemy tego wyrazić poprawnymi zależnościami?
Systemowe (dostarczane przez dystrybucję) skrypty startowe
znajdują się w /lib/systemd/system. Administrator
nie powinienen ich ruszać, za to może przesłonić skrypt systemowy
swoim, umieszczając go w /etc/systemd/system.
Skrypt z /lib wygląda następująco:
[Unit] Description=uses CDP / LLDP frames to inform switches about connected hosts Requires=network.target [Service] EnvironmentFile=/etc/sysconfig/ladvd ExecStart=/usr/sbin/ladvd -f $LADVD_OPTIONS PIDFile=/var/run/ladvd.pid StandardOutput=syslog [Install] WantedBy=multi-user.target
Przepisywanie całości jest niezdrowe, dużo roboty i możliwe rozjechanie
gdy aktualizacja zmieni systemową jednostkę. W takich sytucjach najlepiej
posłużyć się dyrektywą .include:
.include /lib/systemd/system/ladvd.service [Service] ExecStartPre=/bin/sleep 20s [Install] WantedBy=multi-user.target
Pierwsza linijka zaciąga całą treść oryginalnej jednostki. Sekcja
[Service] wprowadza interesującą nas zmianę. Końcowka
jest potrzebna do korzystania z systemctl enable/disable.
Inny przykład: dodanie zależności, wpływa na kolejność startu. Tworzymy /etc/systemd/system/radvd.service z zawartością:
.include /lib/systemd/system/radvd.service [Unit] After=aiccu.service
Wraz ze zmianą numeracji jądra pojawiło się kilka problemów z programami spodziewających się numeracji x.y.z. Brak trzeciego numerka odczuły jak dotąd:
lvm2 — efektem jest problem z bootowaniem, naprawiony już w najnowszej wersjimdadm też krztusi się z dwucyfrowym numerkiemdistributed.net client nie startuje, wysypuje się na inicjalizacji timerówmodule-init-tools w Fedorze3.0 udostępnia też katalog /sys/fs/selinux. Biblioteki SELinuksa korzystają z niego w pierwszej kolejności przed /selinux. Zmiana punktu mountowania zaskoczyła systemd, co kończy się pętlą komunikatów loading policy
przy uruchomieniu. Poprawka już jest, w międzyczasie zbootować można dodając selinux=0 do linii poleceń jądra.
A czy Twój kod radzi sobie z nowym numerkiem? I w ogóle po co mu ta informacja, powinien sprawdzać obecność wymaganych ficzerów, a nie numer wersji.
Linuksowi administratorzy w nadchodzących wydaniach swoich ulubionych
dystrybucji natkną się na nowy wpis w katalogu głównym. Będzie to
/run.
Katalog /run jest dostępny zaraz po zamountowaniu
głównego /, przed pojawieniem się /var,
który może być na osobnym wolumenie. Zawiera rzeczy odnoszące się do aktualnie
działających programów i usług (nie przechowuje wpisów przy reboocie). Są to:
/run/lock, dostępne również jako /var/lock)/var/run/dev:
/dev/.udev/dev/.initramfs/dev/.mount/utab (wszystko
to, co nie jest zawarte w /proc/self/mounts)/dev/.systemd/dev/.mdadm/etc/lvm2/cachedracut, plymouth, bootchart
i wszystkie programy, które do tej pory potrzebowały takiego miejsca. Użycie
/dev było podyktowane obecnością tego katalogu od samego
początku uruchamiania systemu. Nie do końca prawidłowe jest jednak przechywanie
w /dev wpisów nie będących urządzeniami, a zwłaszcza ukrywanie ich kropką
w nazwach.
Poza nadużywaniem /dev, dystrybucje do problemu podchodziły
różnie. Debian daje /lib/init/rw, który z kolei narusza
przestrzeń /lib dla bibliotek. Ubuntu udostępnia
/var/run i /var/lock przy starcie, a przy
mountowaniu właściwego /var dokonuje przypięcia (bindmount).
Jest to jednak rozwiązanie podatne na wyścigi.
Wynik międzydystrybucyjnych uzgodnień ogłosił
Kay Sievers, jednocześnie odpowiedzialny za wdrożenie tego rozwiązania
w SUSE.
Zawtórował mu Scott James Remnant, opiekun upstart i członek
rady technicznej Ubuntu. Rozwiązanie wdrożyła Fedora,
poddane zostało również pod dyskusję
w Debianie.
Nasuwać się może pytanie, co z File Hierarchy Standard? Wersja 2.3 nie zakazuje, jednak wymaga rozwagi:
Distributions should not create new directories in the root hierarchy without extremely careful consideration of the consequences including for application portability.Twórcy najważniejszych dystrybucji porozumieli się między sobą i stosowna poprawka do FHS została zgłoszona. Ostatecznie będziemy mieli:
/var do rzeczy zmiennych,
dostępnych pomiędzy restartami i /run dla tych mających sens
jedynie w działającym systemie (wskazane więc użycie tmpfs). Coraz bliżej jest do umożliwienia funkcjonowania
systemu z kluczowymi katalogami (/usr, /etc itp.)
zamountowanymi w trybie tylko-do-odczytu.
Wychodząc naprzeciw trendowi „jeden komputer — jeden użytkownik”,
od następnej wersji Fedory będzie w systemie tylko konto root.
Dzięki temu możliwe stanie się wyeliminowanie programów z suidami.
A tak na poważnie, eliminacja polega na zastąpieniu
suid-rootów odpowiednimi capabilities. Program, który
wymaga tylko uprawnień do zmiany czasu lub używania portów sieciowych
poniżej 1024, dostanie uprawnienia tylko do tego. Do tej pory wszystkie
możliwości roota były przyznawane.
Wcześniej temu wyzwaniu podołał OpenWall Linux. Przez przerobienie niektórych
mechanizmów pozbyto się konieczności uruchamiania przez użytkownika
programów jako root. Przykładowo, zmiana powłoki, opisu, hasła czy innych
pól w bazie użytkowników /etc/passwd wymagała uprawnień
do modyfikacji tego pliku, a więc superużytkownika. W OWL każdy użytkownik
ma swój plik w /etc/tcb, którego jest właścicielem i
którego edycja nie wymaga superusera.
W Fedorze wysiłki zmierzają do konkretnego nadawania uprawnień. W sieci można znaleźć przykłady użycia setpcap. Jest to proces dość żmudny i niekoniecznie zakończy się powodzeniem, już w tej chwili idzie dość opornie. Rozwiązanie z OWL wygląda lepiej i bardziej przypadło mi do gustu.
Tak jak wcześniej ACL'e rozszerzyły uprawnienia plikowe rwx,
tak teraz capabilities rozszerzają ideę rootowego suida. Admini, którzy
do tej pory zwlekali z uzupełnieniem swojej wiedzy mają kolejną szansę na pobudkę
z ręką w nocniku.
Osoby instalujące Fedorę 15 i późniejsze może zaskoczyć drobna zmiana
w nazewnictwie interfejsów sieciowych. Zamiast niemal losowo przyznawanych
ethX, nazwa będzie zgadzała się z położeniem karty sieciowej
w komputerze i opisem producenta. Mianowicie:
em1,
em2 itd.pci3#1 lub pci2#2_15. Druga wersja
wyróżnia funkcje wirtualne w ramach SRV-IO.Przyznawanie nazw dotyczy oczywiście tylko kart pojawiających się w
systemie po raz pierwszy. Raz nazwana, karta zawsze dostanie tę samą etykietkę
na podstawie adresu MAC i
Aktualizacja:. Nazwy nadawane są przy każdym uruchomieniu.
Zamiana karty w slocie PCI na inną spowoduje, że nowy interfejs przejmie
nazwę starego. Nie zmienią się nazwy w systemach aktualizowanych i tam, gdzie
administrator wymusił przypisania w 70-persistent-net.rules.70-persistent-net.rules. Dane o
położeniu fizycznym brane są z ACPI, DMI i tablicy przerwań PCI.

Inne uniksowate zazwyczaj nazywają karty sieciowe na podstawie modelu
urządzenia i obsługującego go sterownika. Ja od lat staram się nazywać
interfejsy od ich funkcji/providera: lan, nsm,
storagenet, tpsa, netia, kabel,
eter itp. Znacząco ułatwia to np. pisanie reguł filtra pakietów. Wieki temu musiałem łatać iptrafa, który upierał się na działaniu
tylko z interfejsami o nazwach ethX. Dzisiaj spokojnie można
zakładać, że tak popsutych programów już nie ma. Nazwy interfejsów sieciowych
można w Linuksie zmieniać od lat!
Więcej na stronie Features/ConsistentNetworkDeviceNaming.
Nadal chcesz przyspieszyć serwer dzięki SSD? Budżet nie pozwala na zakup dającego 1,5 miliona IOPS Kaminario K2. Pewnie nie starcza nawet na najmniejszą konfigurację K2 (300 kIOPS, 1TB, $200k), ani na małego RamSan-440.
Pozostaje dopingować (a najlepiej zasponsorować) Bena Chocieja z IBM, który pracuje nad infrastrukturą do śledzenia temperatury danych. Im gorętsze — częściej używane — tym bardziej nadają się do przeniesienia na szybszą pamięć masową. Czyli na dyski 10k, 15k RPM, short-stroked, SSD czy wysokowydajne wolumeny RAID10 na macierzy.
Łatki Bena na początek współdziałają z btrfs. Pojawiły się głosy za umieszczeniem funkcjonalności na poziomie VFS, co daje możliwość korzystanie z niej innym systemom plików. Koncepcja jak najbardziej słuszna.
W stosunku do rozwiązań cache'ujących, pojemność szybkiej pamięci masowej wchodzi w skład dostępnej przestrzeni dyskowej w puli. Stąd już tylko krótki krok do niezłej implementacji hierarchicznego składowania w Linuksie. I do zastąpienia DMAPI, niedawno usuniętego z XFS w jądrze.