Sposób na natychmiastowe wypełnienie / wykorzystanie dużej ilości miejsca na dysku?


45

Na maszynie wirtualnej z systemem Linux chciałbym TESTOWAĆ monitorowanie NAGIOS głębiej niż tylko wyłączenie maszyny wirtualnej lub odłączenie wirtualnej karty sieciowej; Chciałbym przetestować lub „wymusić alarm miejsca na dysku”, zajmując kilka% wolnego miejsca przez krótki okres czasu.

Wiem, że mógłbym po prostu użyć

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

lub coś w tym stylu ... ale to zabiera czas i ładuje system oraz wymaga czasu podczas usuwania plików testowych za pomocą rm.

Czy istnieje szybki (prawie natychmiastowy) sposób na wypełnienie partycji, która nie obciąża systemu i zajmuje dużo czasu? myślę o czymś, co przydziela przestrzeń, ale jej nie „wypełnia”.


przepraszam, zapomniałem wspomnieć, że jest to system plików >> ext3.
Axel Werner

Musisz go uaktualnić do ext4, aby obsługiwał fallocate.
Rui F Ribeiro

1
Zip bomb zawsze działa
galois

1
@jaska Uczyń to odpowiedzią. To był pierwszy pomysł, jaki wpadłem na pomysł, gdy czytałem tytuł ...
Crowley,

Dlaczego nie używasz /dev/full? (Zakładając, że istnieje). Spróbuj echo 'test' > /dev/fullna Debianie.
Ismael Miguel

Odpowiedzi:


63

Najszybszym sposobem utworzenia pliku w systemie Linux jest użycie fallocate:

fallocate -l 50G file 

Od człowieka:

fallocate służy do manipulowania przydzielonym miejscem na dysku dla pliku, zarówno w celu zwolnienia, jak i wstępnego przydzielenia.
W przypadku systemów plików, które obsługują wywołanie systemowe Fallocate, wstępny przydział odbywa się szybko przez przydzielenie bloków i oznaczenie ich jako niezainicjowanych, nie wymagając od operacji We / Wy bloków danych. Jest to o wiele szybsze niż tworzenie pliku przez wypełnienie go zerami.
Obsługiwany dla XFS (od Linuksa 2.6.38), ext4 (od Linuksa 3.0), Btrfs (od Linuksa 3.7) i tmpfs (od Linuksa 3.5).


1
Dlaczego go uruchamiasz sudo?
gerrit

1
@gerrit Dodano ten punkt do odpowiedzi.
Rui F Ribeiro

3
fallocatepotrzebuje uprawnień roota” Nie w moim systemie (Linux Mint 17.3, poniżej Ubuntu, a więc Debian). (system plików ext4)
TJ Crowder

1
+1, chociaż OP wyraźnie wspomniał, że jego systemem plików jest ext3.
syneticon-dj

1
@RuiFRibeiro, dzięki! w przypadku sles11sp4 udało mi się utworzyć plik, sformatować go przy pomocy ext4, ale nie można go zamontować w trybie RW. później znalazłem komunikat jądra w / var / log / messages, który powiedział, że ext4 jest obsługiwany tylko jako tylko do odczytu. : /
Axel Werner

13

Inne alternatywy to:

  1. aby zmienić progi alarmowe na coś zbliżonego lub poniżej bieżącego użycia, lub
  2. aby utworzyć bardzo małą partycję testową z ograniczonymi i-węzłami, rozmiarem lub innymi atrybutami.

Przydaje się również możliwość testowania takich rzeczy, jak wpuszczanie do zastrzeżonego procentu zarezerwowanego dla katalogu głównego.


root zarezerwowany procent zwykle wynosi 10%, chyba że go poprawisz - kończy się to zbyt dużym marnotrawstwem systemu na dużych partycjach / nowoczesnych dyskach. Definiując alarmy, lepiej już to weź pod uwagę.
Rui F Ribeiro

+1 za pierwszą rzecz. sto razy prawda. dlaczego, do diabła, powinienem rzeczywiście stworzyć coś na dysku komputera? co jeśli coś (np. rdzeń, zadanie wsadowe generujące duże pliki tymczasowe, ...) wydarzy się w czasie moich testów i przypadkowo zostanie zjedzony cały dysk?
Fiisch

2
@Fisch - Dlaczego? Aby upewnić się, że twój próg ostrzegania jest prawidłowy i że nie robisz czegoś takiego jak przypadkowe ustawienie procentu wolnego miejsca na iodziei zamiast procentu wolnego miejsca na dysku (co widziałem wcześniej). Jeśli coś się nie powiedzie, ponieważ zapełniłeś dysk do progu alarmowania, wówczas twój próg alarmowy jest zbyt niski - cały sens alarmowania polega na tym, że powinien on cię ostrzec, zanim coś zacznie się psuć.
Johnny

Kot, dobry punkt. Ale nie ma dla mnie rozwiązania. Nie mam kontroli nad konfiguracją maszyny wirtualnej (nie mogę zmienić partycji lub dysków wirtualnych), ani nie mam kontroli nad serwerem NAGIOS.
Axel Werner

2
@AxelWerner Czy możesz zamontować plik w pętli jako „fałszywa” partycja? To wciąż pozwoli ci przetestować bez poważnego wpływu na wszystko. Sformatuj go przy użyciu jednego z obsługiwanych systemów plików, a możesz także bawić się z fallocate.
Tonny

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

Ponieważ te trzy sposoby mogą szybko wypełnić partycję.

Jeśli lubisz używać dd , zazwyczaj możesz wypróbować go z funkcją seek . Po prostu ustaw seek=file_size_what_you_needi ustaw count=0. To powie systemowi, że istnieje plik , a jego rozmiar jest taki, jaki ustawiłeś, ale system go nie utworzy. I w ten sposób możesz utworzyć plik większy niż rozmiar partycji.


Przykład, na partycji ext4 z dostępną mniej niż 3G. Użyj dd, aby utworzyć plik 5T, który istnieje jako metadane - nie wymagając praktycznie żadnej przestrzeni blokowej.

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

Wynik:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home

1
czy możesz dodać więcej informacji do swojej odpowiedzi?
kot

Dodam więcej myślenia w gotowym pytaniu dla osób, które szukają tego samego pytania w inny sposób. zignoruj ​​to co jeśli nie jesteś.
Se ven

Ta count=0metoda jest dość interesująca, dodałem przykład.
agc

7
Zauważ, że ddpowyższy przykład może przydzielić rzadki plik. W takim przypadku rozmiar pliku to 50G, w rzeczywistości używa on tylko bloku (lub nawet go nie ma), więc dysk się nie zapełnia. YMMV.
MAP

2
Przetestowałem twoją sugestię na moim systemie plików ext3. nie działało zgodnie z oczekiwaniami. truncate i dd utworzyły plik o dużym rozmiarze, ale „df -h” go nie rozpoznał. wciąż pokazuje tę samą wolną przestrzeń HD.
Axel Werner

0

Możesz także skorzystać z narzędzia stresującego, które jest obsługiwane w wielu systemach Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
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.