Dodawanie liczb jest łatwe. Problem polega na tym, że istnieje wiele różnych liczb do dodania.
Ile miejsca na dysku zajmuje plik?
Podstawową ideą jest to, że plik zawierający n bajtów wykorzystuje n bajtów miejsca na dysku, plus trochę dla niektórych informacji kontrolnych: metadane pliku (uprawnienia, znaczniki czasu itp.), I trochę narzutu dla informacji potrzebnych systemowi znajdź, gdzie plik jest przechowywany. Istnieje jednak wiele komplikacji.
Powikłania mikroskopowe
Pomyśl o każdym pliku jako serii książek w bibliotece. Mniejsze pliki tworzą tylko jeden wolumin, ale większe pliki składają się z wielu woluminów, takich jak encyklopedia. Aby móc zlokalizować pliki, istnieje katalog kart, który odwołuje się do każdego woluminu. Każdy tom ma trochę narzutu z powodu okładek. Jeśli plik jest bardzo mały, narzut ten jest stosunkowo duży. Również sam katalog kart zajmuje trochę miejsca.
Idąc nieco bardziej technicznie, w typowym prostym systemie plików, przestrzeń jest podzielona na bloki . Typowy rozmiar bloku to 4KiB. Każdy plik zajmuje całkowitą liczbę bloków. O ile rozmiar pliku nie jest wielokrotnością rozmiaru bloku, ostatni blok jest używany tylko częściowo. Tak więc plik 1-bajtowy i plik 4096-bajtowy zajmują 1 blok, podczas gdy plik 4097-bajtowy zajmuje dwa bloki. Możesz to zaobserwować za pomocą du
polecenia: jeśli twój system plików ma rozmiar bloku 4KiB, wtedy du
zgłosi 4KiB dla pliku 1-bajtowego.
Jeśli plik jest duży, to dodatkowe bloki są potrzebne tylko do przechowywania listy bloków, które tworzą plik (są to bloki pośrednie , bardziej wyrafinowane systemy plików mogą zoptymalizować ten w postaci zakresów ). Nie wyświetlają się one w rozmiarze pliku zgłoszonym przez ls -l
GNU du --apparent-size
; du
, który zgłasza użycie dysku w przeciwieństwie do rozmiaru, uwzględnia je.
Niektóre systemy plików próbują ponownie wykorzystać wolne miejsce w ostatnim bloku, aby spakować kilka ogonów plików w tym samym bloku . Niektóre systemy plików (takie jak ext4 od Linuksa 3.8 używają bloków 0 dla małych plików (zaledwie kilka bajtów), które całkowicie pasują do i-węzła.
Powikłania makroskopowe
Ogólnie, jak pokazano powyżej, całkowity rozmiar zgłaszany przez du
jest sumą rozmiarów bloków lub zakresów używanych przez plik.
Rozmiar zgłaszany przez du
może być mniejszy, jeśli plik jest skompresowany. Systemy uniksowe tradycyjnie obsługują prostą formę kompresji: jeśli blok pliku zawiera tylko bajty puste, to zamiast przechowywać blok zer, system plików może całkowicie pominąć ten blok. Plik z pominiętymi blokami taki jak ten nazywa się plikiem rzadkim . Pliki rzadkie nie są tworzone automatycznie, gdy plik zawiera dużą serię pustych bajtów, aplikacja musi ustawić, aby plik był rzadki.
Niektóre systemy plików, takie jak btrfs i zfs, obsługują kompresję ogólnego zastosowania .
Zaawansowane komplikacje
Dwie główne cechy bardzo nowoczesnych systemów plików, takie jak zfs i btrfs, znacznie zwiększają zależność między wielkością pliku a użyciem dysku: migawki i deduplikacja.
Migawki to stan zablokowania systemu plików w określonym dniu. Systemy plików obsługujące tę funkcję mogą zawierać wiele migawek wykonanych w różnych terminach. Te migawki oczywiście zajmują miejsce. Z jednej strony, jeśli usuniesz wszystkie pliki z aktywnej wersji systemu plików, system plików nie stanie się pusty, jeśli pozostaną migawki.
Każdy plik lub blok, który nie zmienił się od momentu utworzenia migawki lub pomiędzy dwoma migawkami, istnieje identycznie w migawce i w aktywnej wersji lub innej migawce. Jest to realizowane przez kopiowanie przy zapisie . W niektórych przypadkach może się zdarzyć, że usunięcie pliku w pełnym systemie plików zakończy się niepowodzeniem z powodu niewystarczającej ilości dostępnego miejsca - ponieważ usunięcie tego pliku wymagałoby wykonania kopii bloku w katalogu i nie ma już miejsca na ten blok.
Deduplikacja to technika optymalizacji pamięci, która polega na unikaniu przechowywania identycznych bloków. W przypadku typowych danych poszukiwanie duplikatów nie zawsze jest warte wysiłku. Zarówno zfs, jaki btrfs obsługują deduplikację jako funkcję opcjonalną.
Dlaczego suma du
różni się od sumy rozmiarów plików?
Jak widzieliśmy powyżej, rozmiar zgłaszany przez du
dla każdego pliku jest zwykle sumą rozmiarów bloków lub zakresów używanych przez plik. Zauważ, że domyślnie ls -l
wyświetla rozmiary w bajtach, ale du
podaje rozmiary w KiB lub 512-bajtowych jednostkach (sektorach) w niektórych bardziej tradycyjnych systemach ( du -k
wymusza użycie kilobajtów). Większość współczesnych jednorożców obsługuje ls -lh
i du -h
używa liczb „czytelnych dla człowieka” za pomocą K, M, G itp. (Odpowiednio dla KiB, MiB, GiB).
Po uruchomieniu du
w katalogu sumuje się użycie na dysku wszystkich plików w drzewie katalogów, w tym samych katalogów . Katalog zawiera dane (nazwy plików i wskaźnik do miejsca, w którym znajdują się metadane pliku), więc potrzebuje trochę miejsca do przechowywania. Mały katalog zajmie jeden blok, większy katalog będzie wymagał więcej bloków. Ilość pamięci wykorzystywanej przez katalog czasami zależy nie tylko od zawartych w nim plików, ale również od kolejności ich wstawienia i usunięcia niektórych plików (w przypadku niektórych systemów plików może to powodować problemy - kompromis między miejscem na dysku a wydajnością ), ale różnica będzie niewielka (dodatkowy blok tu i tam). Kiedy biegnieszls -ld /some/directory
, podany jest rozmiar katalogu. (Zauważ, że linia „total NNN” u góry wyniku ls -l
jest liczbą niepowiązaną, jest to suma rozmiarów w blokach wymienionych pozycji, wyrażona w KiB lub sektorach.)
Pamiętaj, że du
obejmuje pliki kropek, które ls
nie są wyświetlane, chyba że użyjesz opcji -A
lub -a
.
Czasami du
zgłasza mniej niż oczekiwana suma. Dzieje się tak, jeśli wewnątrz drzewa katalogów znajdują się twarde łącza : du
zlicza każdy plik tylko raz.
W niektórych systemach plików, takich jak ZFS
Linux, du
nie zgłasza pełnego miejsca na dysku zajmowanego przez rozszerzone atrybuty pliku.
Uwaga: jeśli w katalogu znajdują się punkty montowania, du
policzą również wszystkie pliki w tych punktach montowania, chyba że podano -x
opcję. Jeśli na przykład chcesz mieć całkowity rozmiar plików w głównym systemie plików, uruchom du -x /
, a nie du /
.
Jeśli system plików jest podłączony do niepustego katalogu , pliki w tym katalogu są ukryte przez podłączony system plików. Nadal zajmują swoje miejsce, ale du
ich nie znajdują.
Usunięte pliki
Gdy plik zostanie usunięty , to tylko usuwa się wpis w katalogu, niekoniecznie sam plik. Aby faktycznie usunąć plik i tym samym odzyskać miejsce na dysku, konieczne są dwa warunki:
- Liczba linków pliku musi spaść do 0: jeśli plik ma wiele twardych linków, usunięcie jednego nie wpływa na inne.
- Tak długo, jak plik jest otwarty przez jakiś proces, dane pozostają. Plik jest usuwany dopiero po zamknięciu wszystkich procesów. Dane wyjściowe
fuser -m
lub lsof
punkt podłączenia obejmują procesy, w których plik jest otwarty w tym systemie plików, nawet jeśli plik zostanie usunięty.
- nawet jeśli żaden proces nie ma otwartego usuniętego pliku, przestrzeń pliku może nie zostać odzyskana, jeśli plik ten jest zapleczem
loop
urządzenia. losetup -a
(as root
) może powiedzieć, które loop
urządzenia są aktualnie skonfigurowane i na jakim pliku. Urządzenie pętli musi zostać zniszczone (za pomocą losetup -d
), aby można było odzyskać miejsce na dysku.
Jeśli usuniesz plik w niektórych menedżerach plików lub środowiskach GUI, może on zostać umieszczony w koszu, gdzie można go usunąć. Tak długo, jak plik można usunąć, jego miejsce jest nadal zajęte.
Z czego df
dokładnie pochodzą te liczby ?
Typowy system plików zawiera:
- Bloki zawierające dane plików (w tym katalogów) i niektóre metadane (w tym bloki pośrednie i rozszerzone atrybuty w niektórych systemach plików).
- Darmowe bloki.
- Bloki zarezerwowane dla użytkownika root.
- superbloki i inne informacje kontrolne.
- I-węzły
- czasopismo
Tylko pierwszy rodzaj jest zgłaszany przez du
. Jeśli chodzi o to df
, co wchodzi w kolumny „używane”, „dostępne” i całkowitą, zależy od systemu plików (oczywiście używane bloki (w tym pośrednie) są zawsze w kolumnie „używane”, a nieużywane bloki zawsze w „ dostępne ”).
Systemy plików w ext2 / ext3 / ext4 rezerwują 5% miejsca dla użytkownika root. Jest to przydatne w głównym systemie plików, aby utrzymać działanie systemu, jeśli się zapełni (w szczególności do rejestrowania, i pozwolić administratorowi systemu przechowywać trochę danych podczas rozwiązywania problemu). Nawet w przypadku partycji danych, takich jak /home
zachowanie zarezerwowanego miejsca jest przydatne, ponieważ prawie pełny system plików jest podatny na fragmentację. Linux próbuje uniknąć fragmentacji (co spowalnia dostęp do plików, szczególnie na obrotowych urządzeniach mechanicznych, takich jak dyski twarde), wstępnie przydzielając wiele kolejnych bloków podczas zapisywania pliku, ale jeśli nie ma wielu kolejnych bloków, to nie może działać .
Tradycyjne systemy plików, włącznie z ext4, ale bez btrfs, rezerwują stałą liczbę i- węzłów podczas tworzenia systemu plików. To znacznie upraszcza konstrukcję systemu plików, ale ma tę wadę, że liczba i-węzłów musi być odpowiednio dobrana: przy zbyt wielu i-węzłach marnuje się miejsce; przy zbyt małej liczbie i-węzłów w systemie plików może zabraknąć i-węzłów, zanim zabraknie miejsca. Polecenie df -i
podaje liczbę używanych i-węzłów i liczbę dostępnych (systemy plików, w których koncepcja nie ma zastosowania, mogą zgłaszać 0).
Uruchamianie tune2fs -l
na woluminie zawierającym system plików ext2 / ext3 / ext4 zgłasza niektóre statystyki, w tym całkowitą liczbę i liczbę wolnych i-węzłów i bloków.
Inną funkcją, która może mylić materię, są podwoluminy (obsługiwane w btrfs i w zfs pod zestawami danych nazw ). Wiele podwoluminów ma tę samą przestrzeń, ale ma osobne korzenie drzewa katalogów.
Jeśli system plików jest podłączony przez sieć (NFS, Samba itp.), A serwer eksportuje część tego systemu plików (np . Serwer ma /home
system plików i eksportuje/home/bob
), to df
na kliencie odzwierciedla dane dla całego systemu plików, a nie tylko dla części, która jest eksportowana i montowana na kliencie.
Co wykorzystuje miejsce na moim dysku?
Jak widzieliśmy powyżej, całkowity rozmiar zgłaszany przez df
nie zawsze uwzględnia wszystkie dane sterujące systemu plików. Użyj narzędzi specyficznych dla systemu plików, aby w razie potrzeby uzyskać dokładny rozmiar systemu plików. Na przykład w przypadku ext2 / ext3 / ext4 uruchom tune2fs -l
i pomnóż rozmiar bloku przez liczbę bloków.
Podczas tworzenia systemu plików zwykle wypełnia on dostępne miejsce na otaczającej partycji lub woluminie. Czasami możesz mieć mniejszy system plików, gdy przenosisz systemy plików lub zmieniasz rozmiar woluminów.
W systemie Linux lsblk
przedstawia ładny przegląd dostępnych woluminów pamięci. Aby uzyskać dodatkowe informacje lub jeśli nie masz lsblk
, skorzystaj ze specjalistycznych narzędzi do zarządzania woluminami lub partycjonowania, aby sprawdzić, jakie masz partycje. W systemie Linux istnieje lvs
, vgs
, pvs
dla LVM , fdisk
dla tradycyjnych PC-style ( „MBR”) przegród (jak również GPT w dotychczasowych systemach), gdisk
dla GPT partycji, disklabel
dla etykiet dysków BSD Parteda itp pod Linuksem, cat /proc/partitions
daje krótkie podsumowanie. Typowe instalacje mają co najmniej dwie partycje lub woluminy używane przez system operacyjny: system plików (czasem więcej) i wolumin wymiany .
Niektóre komputery mają partycję zawierającą BIOS lub inne oprogramowanie diagnostyczne. Komputery z UEFI mają dedykowaną partycję bootloadera.
Na koniec zauważ, że większość programów komputerowych używa jednostek opartych na mocach 1024 = 2 10 (ponieważ programiści kochają binarne i potęgi 2). Więc 1 kB = 1024 B, 1 MB = 1048576 B, 1 GB = 1073741824, 1 TB = 1099511627776 B, ... Oficjalnie, jednostki te są znane jako kibibyte KiB, mebibyte MiB, itp, ale większość oprogramowania tylko raporty k lub kB, M lub MB itp. Z drugiej strony producenci dysków twardych systematycznie stosują system metryczny (jednostki oparte na 1000). Tak więc dysk o pojemności 1 TB to tylko 931 GiB lub 0,904 TiB.
tune2fs
wymaga dostępu do odczytu do urządzenia blokowego zawierającego system plików, co ogólnie wymaga rootowania, ponieważ pozwala to na odczyt zawartości dowolnego pliku.du
robi konto dla bloków pośrednich. To główna różnica w stosunku do rozmiaru pliku zgłoszonego przezls -l
.Krótkie podsumowanie komplikacji związanych z obliczaniem rozmiarów plików i przestrzeni dyskowych:
Przestrzeń, jaką plik zajmuje na dysku, jest zwielokrotnieniem liczby bloków, jakie zajmuje, w stosunku do wielkości każdego bloku + liczby zajętych i-węzłów. 1 bajtowy plik zajmie co najmniej 1 blok, 1 i-węzeł i jeden wpis do katalogu.
Ale może to zająć tylko 1 dodatkowy wpis katalogu, jeśli plik jest twardym łączem do innego pliku. Byłoby to tylko kolejne odniesienie do tego samego zestawu bloków.
ls
wyświetla.To tylko drapanie po powierzchni systemów plików i jest zbyt uproszczone. Pamiętaj także, że różne systemy plików działają inaczej.
stat
jest bardzo pomocny w wykrywaniu niektórych z tych informacji. Oto kilka przykładów użycia statystyki i jej zastosowania: http://landoflinux.com/linux_stat_command_examples.htmlźródło
Zilustruję tutaj różne przypadki, które powodują
du
odmiennośćdf
.df
zlicza bloki przydzielone przez system plików,du
użyj informacji o rozmiarze każdego pliku. Różnica może mieć wiele przyczyn:1) Niepowiązane (usunięte) pliki, które są nadal otwarte przez aplikację. Brak informacji o pliku, blok jest nadal przydzielany.
lsof +aL1 <filesystem>
pomoże ci zidentyfikować procesy. Przez większość czasu musisz zabijać procesy, aby zwolnić miejsce (zależy to od procesu, czasem wystarczy przeładowanie konfiguracji).2) Pliki poniżej punktów montowania ukryte,
du
ale nie dodf
.debugfs
może pomóc w odczytaniu systemu plików.3) Rzadkie pliki, które wyglądają na większe niż w rzeczywistości. nieprzydzielone bloki nie są liczone,
df
ale pozorny rozmiar pliku jest liczony przezdu
.Pamiętaj, że twarde linki nie głupią
du
źródło
df
jest zwykle używany do sprawdzenia, jakie są systemy plików, jak pełny jest każdy z nich i gdzie są zamontowane. Jest to bardzo przydatne, gdy brakuje miejsca w systemie plików i być może chcesz przenosić różne systemy plików lub kupić większy dysk itp.du
pokazuje szczegóły, ile skumulowanej przestrzeni dyskowej zużywa każdy z katalogów (podobnie jakwindirstat
w systemie Windows). Idealne do znalezienia miejsca, w którym zajmujesz miejsce podczas próby czyszczenia plików.Oprócz drobnych różnic liczbowych wyjaśnionych przez innych, myślę, że narzędzia
du
idf
narzędzia służą bardzo różnym celom.źródło