Wykonuję testy fragmentu kodu i chcę wypełnić dysk twardy danymi. znalazłem to dd
może zrobić ogromne pliki w jednej chwili, ale df
nie zgadza się. Oto co próbowałem:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
pokazuje plik 10G. Jednak, df -h
pokazuje, że partycja się nie zmniejszyła. Więc co muszę zrobić, aby to zrobić df
rozpoznasz teraz dane? Mam nadzieję na coś szybkiego, który koduję w teście jednostkowym.
linux
hard-drive
User1
źródło
źródło
Odpowiedzi:
Kłopot z
seek=<big number>
Sztuczka polega na tym, że system plików jest (zazwyczaj) sprytny: jeśli część pliku nigdy nie została zapisana (a zatem wszystkie są zerami), nie przejmuje się przydzielaniem na nią miejsca - więc, jak widzieliście, może mieć plik 10 GB, który nie zajmuje miejsca (jest to znane jako „plik rzadki” i może być bardzo przydatne w niektórych przypadkach, np. w niektórych implementacjach baz danych).Możesz wymusić przydzielenie miejsca (na przykład):
zajmie to znacznie więcej czasu, ale faktycznie wypełni dysk. Zalecam, aby rozmiar bloku był znacznie większy niż jeden, ponieważ określa to, ile systemu wywołuje
dd
proces sprawia, że im mniejszy rozmiar bloku, tym więcej wywołań systemowych, a więc im wolniej będzie działać. (Choć ponad 1 MB lub tak, prawdopodobnie nie zrobi to wielkiej różnicy i może nawet spowolnić ...)źródło
Jako inna opcja, możesz użyć tak wraz z pojedynczym łańcuchem i jest to około 10 razy szybsze niż uruchomienie dd if = / dev / urandom = bigfile. Lubię to
źródło
Stworzyłeś tak zwany „plik rozrzedzony” - plik, który, ponieważ większość jest pusta (tzn. Czyta z powrotem jako 0), nie zajmuje miejsca na dysku oprócz tego, co jest rzeczywiście napisane (1B, po 10 GB luki).
Nie sądzę, byś mógł tworzyć ogromne pliki, biorąc rzeczywiste miejsce na dysku w jednej chwili - zajmowanie przestrzeni fizycznej oznacza, że system plików musi przydzielić bloki dysku do pliku.
Myślę, że utknąłeś w starym stylu „dd if = / dev / zero of = nazwa pliku bs = 100M liczba = 100”, co jest ograniczone przez prędkość zapisu sekwencyjnego napędu.
źródło
Jeśli testujesz tylko przypadki z wypełnionymi systemami plików, być może powodzenie jest wystarczające. I jeszcze szybciej! na przykład
źródło
fallocate -l 150G foo
. Niemniej jednak +1 za wymienienie narzędzia.Przestań używać
seek
i użyj bardzo dużegobs
i / lubcount
. Jak to robisz rzadki plik i oczywiście nie musisz tego robić.źródło
Jeśli chcesz dosłownie wypełnić dysk twardy, zrób to:
Opcjonalnie możesz określić liczbę, jeśli chcesz ograniczyć rozmiar, ale jeśli pominiesz licznik, będzie on działał tylko do wyczerpania miejsca na dysku.
Jak wspomniano w psmears, uzyskasz lepszą wydajność, jeśli ustawisz rozmiar bloku na 1 MB (bs = 1M) zamiast 1 B (bs = 1). Nadal zajmie to trochę czasu, ale jeśli chcesz sprawdzić postęp swojego polecenia, otwórz oddzielną konsolę i uruchom następujące polecenia:
Użyj PID dd w tym poleceniu (zamień PID na PID dd):
Następnie spójrz na swój terminal dd. Oczywiście ma to ograniczone zastosowanie, gdy próbujesz tylko wypełnić dysk (możesz użyć df lub du, aby sprawdzić odpowiednio wolne miejsce na dysku lub rozmiar pliku). Są jednak inne momenty, w których przydatny jest postęp w dd.
Dodatkowy kredyt: jednym z praktycznych zastosowań zerowania wolnego miejsca jest to, że później możesz usunąć „zero” plików i zadać całą partycję (lub dysk, jeśli wyzerowałeś wszystkie partycje) do pliku obrazu dysku (powiedz , disk-backup.dd), a następnie skompresuj plik. Wolne miejsce jest teraz wysoce ściśliwe, więc skompresowany obraz dd będzie dużo mniejszy niż oryginalne urządzenie blokowe, którego zawartość zawiera.
Shenanigans: zapisz duży plik zer i wyślij go e-mailem do wszystkich znajomych. Powiedz im, że to coś naprawdę fajnego.
źródło
Tworzysz nie rzadki plik 1 TB za pomocą następującego polecenia:
Było to przydatne w testowaniu tego, co się dzieje, gdy limity są przekroczone lub system plików się zapełnia.
df -h
pokazuje, że dostępna przestrzeń staje się mniejsza.źródło