Czy dowiązania symboliczne faktycznie wpływają na użycie dysku?


21

Czytałem na wielu stronach internetowych, że w Linuksie dowiązania symboliczne (dowiązania miękkie, dowiązania symboliczne) są jak wskaźniki odnoszące się do innego pliku, który może znajdować się w dowolnym miejscu (np. Skróty Windows). Jednak gdy sprawdzam użycie dysku przez folder, w którym znajdują się dowiązania symboliczne, istnieje rozbieżność między tym, co mówi mój menedżer plików, a tym, co duzgłasza. Jednak jeśli piszę du -L( -L, --dereference; dereference all symbolic linksze strony podręcznika), dane wyjściowe du -Li rozmiar raportowane przez mojego menedżera plików są takie same .

Moje pytanie brzmi : jeśli mam łącze do dużego pliku, na przykład na mojej osobnejhomepartycji, czy będę miał jakieś problemy?

Przykład :

Mój /var/tmpfolder jest teraz pusty. Utwórzmy plik:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

I mój menedżer plików (w tym przypadku Thunar) zgłasza się

Rozmiar: 1 sztuka o łącznej wartości 163,0 kB

W porządku. Teraz stwórzmy naprawdę duży plik /tmpi link do niego:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

Na razie wszystko jest w porządku. Ale jeśli otworzę mój menedżer plików:

Rozmiar: 2 elementy o łącznej wartości 570,3 kB

I w końcu:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

Jeśli partycja, na której /var/tmpsię znajduje, ma wielkość 1 GiB i utworzę w niej link do pliku 1 GiB, to czy mój dysk twardy zginie? Wiem, że to duda wynik 168 i Thunar 1 GiB, ale nie wiem, co jest właściwe.


Czy na pewno jeden program nie zgłasza się na przykład w Mib, a inny w MB?
HandyGandy,

Nie, to nie jest problem z jednostkami.
astrojuanlu,

Odpowiedzi:


34

Dowiązania symboliczne oczywiście zajmują miejsce, ale tylko tyle miejsca, ile potrzeba do przechowywania nazwy i celu oraz kilku bajtów dla innych metadanych. Miejsce zajmowane przez dowiązanie symboliczne nie zależy od miejsca zajmowanego przez cel (w końcu cel nie musi nawet istnieć).

Zwykły duzgłasza miejsce zajęte przez drzewo katalogów na dysku. du -Lzgłasza miejsce, które zajęłoby drzewo katalogów, gdyby wszystkie dowiązania symboliczne zostały zastąpione przez cel. Ta pierwsza jest zwykle przydatną informacją; na przykład jest to miejsce, które można odzyskać po usunięciu drzewa, i (w przybliżeniu) miejsce potrzebne do utworzenia kopii zapasowej drzewa.

duw drzewie katalogów pokazuje (zwykle) nieco więcej niż sumę rozmiarów plików. Wynika to z dwóch rzeczy. Po pierwsze, duliczy się także katalogi, które zajmują trochę miejsca do przechowywania nazw plików i metadanych. Po drugie, duzlicza miejsce na dysku zajmowane przez plik, który może różnić się od rozmiaru pliku: najczęstszym efektem jest to, że pliki zajmują całkowitą liczbę bloków (4kB w typowej instalacji Linuksa), więc plik 1-bajtowy może pokaż jako 4kB na wyjściu; ale kompresja (taka jak prymitywna forma zapewniana przez rzadkie pliki w prawie każdym systemie plików UNIX) może spowodować, że rozmiar pliku będzie większy niż użycie dysku.

Z podanych liczb wynika, że ​​Thunar zgłasza sumę rozmiarów plików w drzewie katalogów, podążając za symbolicznymi linkami . Mówi to w subtelny sposób - twierdzi, że całkowity rozmiar to 570,3 kB, a nie, że użycie dysku wynosi 570,3 kB. Z interfejsu użytkownika ani dokumentacji nie wynika wcale, że Thunar podczas obliczania wielkości korzysta z dowiązań symbolicznych.

Który z nich jest „właściwy”, jest kwestią subiektywną. duzgłasza użycie dysku. Thunar zgłasza całkowity rozmiar po symbolicznych linkach. Utworzenie dowiązania symbolicznego ma znikomy wpływ na użycie dysku, ale z definicji zmienia łącza symboliczne podążające za rozmiarami całkowitymi, które raportuje Thunar.


Zredagowałem moje pytanie, więc myślę, że jest teraz całkiem jasne, ale dziękuję za odpowiedź.
astrojuanlu,

@ Juanlu001: Odpowiednio zaktualizowałem swoją odpowiedź. Krótko mówiąc, dupokazuje użycie dysku, podczas gdy Thunar pokazuje coś innego.
Gilles „SO- przestań być zły”

Różnica jest ważna podczas tworzenia kopii zapasowych, które rozwiązują dowiązania symboliczne. Możesz to zrobić, jeśli wiesz, że pod drzewem znajduje się kilka dowiązań symbolicznych, które prowadzą do lokalizacji poza drzewem, ale reszta rzeczy poza tym drzewem nie jest dla Ciebie ważna.
Mel

3

Myślę, że domyślnie twój menedżer plików próbuje uzyskać rozmiar plików, na które wskazują linki miękkie, podczas gdy dudaje ci rozmiar katalogu i samych linków, ale nie plików, na które wskazują.

Wyjaśnić,

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

Nie jestem pewien, czy o to pytasz, ale jeśli tak, to uważam, że może to być odpowiedź na twoje pytanie.


Przepraszam, że nie odpowiedziałem na moje pytanie: to, co powiedziałeś, już wymyśliłem. Właśnie go edytowałem.
astrojuanlu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.