2009-03-18 11 views

Odpowiedz

6

ARG_MAX ma zamiar zająć to ... na przykład, rm -rf * (podczas gdy w katalogu) powie "zbyt wiele argumentów". Narzędzia, które chcą wykonać jakiś rodzaj globowania (lub powłoki), będą miały pewne problemy z działaniem.

Jeśli ten katalog jest dostępny publicznie (powiedzmy przez ftp lub serwer WWW), mogą wystąpić dodatkowe problemy.

Wpływ na dowolny system plików zależy wyłącznie od tego systemu plików. Jak często są one dostępne, czym jest system plików? Pamiętaj, że Linux (domyślnie) preferuje utrzymywanie ostatnio otwieranych plików w pamięci podczas wprowadzania procesów do wymiany, w zależności od twoich ustawień. Czy ten katalog jest obsługiwany przez http? Czy Google go zobaczy i zaindeksuje? Jeśli tak, być może trzeba dostosować ciśnienie cache VFS i swappiness.

Edit:

ARG_MAX to system szeroki limit ile argumenty mogą być przedstawione do punktu wejścia danego programu. Zatem weźmy "rm", a przykład "rm -rf *" - powłoka zmieni "*" w listę plików rozdzielaną spacjami, która z kolei stanie się argumentem "rm".

To samo stanie się z ls i kilkoma innymi narzędziami. Na przykład ls foo * może się zepsuć, jeśli zbyt wiele plików zaczyna się od "foo".

Doradzam (bez względu na to, co jest w użyciu), aby podzielić go na mniejsze fragmenty katalogów, tylko z tego powodu.

+0

Wielkie dzięki, Sir :) Ten wpis bardzo mi pomógł! –

3

Kiedy przypadkowo wykonasz "ls" w tym katalogu, albo użyjesz tabulatora, lub chcesz wykonać "rm *", będziesz miał poważne kłopoty. Ponadto mogą występować problemy z wydajnością w zależności od systemu plików.

Uważa się za dobrą praktykę pogrupowanie plików w katalogi o nazwach pierwszych 2 lub 3 znaków nazw plików, np.

 
aaa/ 
    aaavnj78t93ufjw4390 
    aaavoj78trewrwrwrwenjk983 
    aaaz84390842092njk423 
    ... 
abc/ 
    abckhr89032423 
    abcnjjkth29085242nw 
    ... 
... 
3

Większość dystrybucje używać Ext3 domyślnie, które mogą korzystać z b-tree indeksowanie dla dużych katalogów. Niektóre z dystrybucji mają domyślnie włączoną tę funkcję dir_index w innych, które musisz włączyć samodzielnie. Jeśli ją włączysz, nie będzie spowolnienia nawet dla milionów plików.

Aby sprawdzić, czy dir_index cecha Czy Do aktywacji (jako root):

tune2fs -l /dev/sdaX | grep features 

Aby aktywować dir_index funkcję (jako root):

tune2fs -O dir_index /dev/sdaX 
e2fsck -D /dev/sdaX 

Wymień /dev/sdaX z partycji, dla którego chcesz aktywować to.

+1

Nie * jest * karą, różnica między karą wykładniczą, liniową lub logarytmiczną – dsm

+0

Wykonuj swoje liczby. Masz 1 milion plików. Dzięki indeksowi przejście do pliku po nazwie zajmuje N sekund. Teraz podzielisz go na 1000 katalogów po 1000 plików każdy. Przejście do katalogu zajmuje N/2 sekundy, kolejne N/2 do dostępu do pliku. Łącznie N sekund nie licząc narzutu do przełączania katalogów. – vartec

0

Oczywistą odpowiedzią jest to, że folder będzie niezwykle trudny do wykorzystania przez ludzi na długo przed jakimkolwiek ograniczeniem technicznym, (czas potrzebny na odczytanie wyniku z ls dla jednego, ich są dziesiątki innych powodów). Czy istnieje dobry powód, dla którego nie można podzielić na podfoldery?

3

Moje doświadczenie z dużych katalogów na ext3 i dir_index włączona:

  • Jeśli znasz nazwę pliku, który chcesz uzyskać dostęp, nie ma prawie kara
  • nie Jeżeli chcesz zrobić operacje, które potrzebę do odczytu w całym wpisie do katalogu (jak prosty ls w tym katalogu) zajmie to kilka minut po raz pierwszy. Następnie katalog pozostanie w pamięci podręcznej jądra i nie będzie już żadnych kar.
  • Jeśli liczba plików jest zbyt wysoka, pojawiają się problemy z ARG_MAX i innymi. Oznacza to, że dzikie karty (*) nie zawsze działają zgodnie z oczekiwaniami. To jest tylko, jeśli naprawdę chcesz, aby wykonać operację na wszystkich plikach na raz

Bez dir_index jednak jesteś naprawdę wkręca :-D

0

Nie każdy system plików obsługuje że wiele plików.

W przypadku niektórych z nich (ext2, ext3, ext4) bardzo łatwo jest przekroczyć limit i-węzła.

Powiązane problemy