Projektując serwis WWW lub zlecając firmie zewnętrznej jego napisanie, rzadko kiedy przewidujemy, co się stanie, gdy wzrośnie nam ruch np. 10-krotnie, kiedy skończy sie nam miejsce na dysku, albo w jaki sposób będziemy przechowywać ciągle przybywające dane od użytkowników. Każdy z nas lubi adrenalinę i pracę w stresie, dlatego nie zastanawia się nad możliwymi problemami które mogą wystąpić w przyszłości. Czasami mamy nawet spokój przez kilka miesiący, a szczęśliwcy latami. Oczywiście są sytuacje, których nie da się przewidzieć, ale warto przynajmniej spróbować zastanowić się, co może spowodować problemy wraz ze wzrostem ruchu.
Problem pojawił się… ;-/ i nie ma za bardzo jak zwalić winy na twórce kodu ;-) albo jeszcze inaczej, nie zawsze chodzi o błędnie zaprojektowane rozwiązania zaimplementowane w kodzie serwisu, czasami problem występuje w połączeniu – problemy implementacji + błędna konfiguracja systemu, albo… źle dobrany filesystem. Takie mieszanki wybuchowe mają opóźniony zapłon, bo kto myśli o wyborze filesystemu… ;-)
No właśnie, filesystem… jaki wybrać? xfs? reiserfs? ext3? a może ext4? nie będę opisywał żadnego z nich, nie będę też robił żadnych testów wydajnościowych… ale poruszę ciekawą kwestię związaną z ograniczeniami w systemie ext3 (który jest jeszcze bardzo popularny). Dla przedstawienia sytuacji, wyobraźmy sobie serwis służący do składowania obrazków od użytkowników, serwis jest otwarty więc każdy może wrzucić swój plik, no i z czasem robi się tego naprawdę dużo…
Nasze obrazki składujemy w następujący sposób:
/obrazki/2010-03-24-11-54/obrazek_1.jpg
/obrazki/2010-03-25-13-27/obrazek_2.jpg
/obrazki/2010-03-25-13-31/obrazek_3.jpg
/obrazki/2010-03-26-21-52/obrazek_4.jpg
przynajmniej do czasu kiedy pojawi nam się komunikat:
# mkdir 2010-03-27-16-52
mkdir: nie można utworzyć katalogu `2010-03-27-16-52′: Za dużo dowiązań
Zamierzeniem takiego rozwiązania było zapisywanie obrazków w katalogach zawierających datę, godzinę i minutę… wszystko jest fajnie, wyszukanie obrazka dodanego o konkretnej dacie nie stanowi żadnego problemu, ale po stworzeniu 32000 takich katalogów, uśmiech z twarzy nam zniknie… 32000 to magiczna liczba która niektórym powinna śnić się po nocach ;-) Jest to maksymalna ilość podkatalogów w jednym katalogu. Nie da się tego limitu zmienić bez zmiany filesystemu na inny, najszybszym rozwiązaniem teraz jest rozproszenie katalogów do wielu podkatalogów np. tak:
/obrazki_links/2010/03/24/11/54/obrazek_1.jpg
/obrazki_links/2010/03/25/13/27/obrazek_2.jpg
/obrazki_links/2010/03/25/13/31/obrazek_3.jpg
/obrazki_links/2010/03/26/21/52/obrazek_4.jpg
oraz dla zachowania spójności stworzenie linków symbolicznych:
ln -s /obrazki_links/2010/03/24/11/54/ /obrazki/2010-03-24-11-54
ln -s /obrazki_links/2010/03/25/13/27/ /obrazki/2010-03-25-13-27
itd…
Dodatkowo wspomnę, że maksymalny rozmiar pliku możliwy do utworzenia na partycji ext3 to 2TB, więc warto pamiętać również o tym.
Jako wniosek wyciągnijmy, żeby przed wdrożeniem zapoznać się z limitami systemu plików na którym powstanie rozwiązanie, bo późniejsze migrowanie zajmie nam zdecydowanie więcej czasu niż mkfs. ;-)


oceń artykuł (4 gł., średnia: 4,50)


Systemy klasy Enterprise jeszcze długo będą używać Ext3 jako domyślnego filesystemu, raczej mało kto pozwoli sobie na używanie Xfs’a czy innego fs’a na produkcyjnym systemie.
Pozdrowienia,
[...] założenia dużej ilości zagnieżdżonych katalogów, w celu przygotowania jakiejś struktury do przechowywania danych, można to zrobić na kilka sposobów, najlepiej w taki który jest dla nas najwygodniejszy. W [...]
A jednak! powoli dojrzewają do zmian… ;-) http://press.redhat.com/2010/04/21/red-hat-enterprise-linux-6-beta-available-today-for-public-download/ Wychodzi na to, że RHEL6 będzie posiadał ext4 ;-)