View Łukasz Herman's LinkedIn profileView my profile

statystyki www stat.pl

poniedziałek, 01 września 2008

Po co? Na przykład że zapchać dysk. A zapychać go można by sprawdzić jak jakaś aplikacja sobie poradzi z taką sytuacją, lub zrobić głupi kawał koledze :)

Pierwszą rzeczą jaką przyszła mi na myśl był program debug.exe dostępny w standardowo w Windowsie. Trochę (bardzo) archaiczne narzędzie, ale ma również taką funkcjonalność. Pierwsze od czego rozpocząłem to dojść w jaki sposób utworzyć pojedynczy pusty plik (bez żadnych informacji) i udało się. Z paroma zastrzeżeniami.

zaczynamy od uruchomienia debuga z parametrem wskazującym na plik na którym będziemy operowali. Ja mam zamiar tworzyć nowy plik, więc sobie mogę wymyślić dowolną nazwę i wklepać w cmd "debug bigfile.dat". I od razu komunikat błędu że podany plik nie istnieje. Ale w tej chwili mnie to nie interesuje, ponieważ zaraz go sobie stworzę.

Dokumentacja do debuga jaką udało mi się znaleźć jest bardzo skąpa i zdecydowanie niewystarczająca. Ale czego można oczekiwać od takiego narzędzia. to co udało mi się znaleźć w internecie, to informacja że najważniejsze dla mnie będą komendy rcx i rbx. Określają one rozmiar plików. Weźmy dla przykładu, że chcemy mieć plik o rozmiarze 10MB (czyli 10485760B). zamieniamy wartość wyrażoną w bajtach na postać szesnastkową (hex) i otrzymujemy A00000. Uzupełniamy z przodu zerami do uzyskania wartości składającej sie z 8 znaków. Pierwsze 4 będą określały wartość dla argumentu RBX, końcowe 4 dla RCX.

W oknie debuga wpisujemy więc: RBX i podajemy mu wartość 00A0, a następnie RCX i analogicznie 0000. Po zadeklarowaniu potrzebnych danych zapisujemy plik komendą "W" i wychodzimy poprzez "Q". W ten sposób jesteśmy w stanie utworzyć plik o z góry założonej wielkości. W naszym wypadku dokładnie 10 MB.

No to następnym krokiem byłoby utworzenie czegoś większego, ale...

Dobry obserwator zauważy, że rozmiar pliku w systemie szesnastkowych podawaliśmy przez ciąg 8 znaków, a to jest ogromne ograniczenie już dla większych plików. Ponadto debug bardzo często powiadamia o braku miejsca na dysku gdy chcemy utworzyć większy plik, chociaż to miejsce na dysku jest (stawiałbym na to że ma problem z dyskiem który jest pofragmentowany).

Dlatego napisałem sobie krótki skrypcik tworzący więcej małych plików. Nie będę go opisywał, ale go tutaj po prostu wkleję.

Pliki.bat:

@echo off
setLocal EnableDelayedExpansion
set /p X=Ile plikow chcesz utworzyc?
:loop
set /a N+=1
if !N! gtr !X! goto :eof
debug file!N!.dat < komendy.dat
echo !N!
goto :loop

komendy.dat:

rcx
0000
rbx
2000
W
Q

Takim skryptem tworzę określoną ilość GB plików po 512 MB każdy. Z moich testów wyszło, że z taki rozmiar jest największy, gwarantując zarazem pewność utworzenia pliku.

Odpalam więc swój skrypcik, wpisuję większą wartość i... można iść na kawę. Debug mieli dyskiem tworząc te pliki, strasznie długo...

A przecież można dużo szybciej, wystarczy skorzystać z narzędzia fsutil.

fsutil file createnew 10485760

I w ten sposób utworzymy plik wielkości 10MB. A nic nie stoi na przeszkodzie by utworzyć dużo większy plik i to wszystko w mgnieniu oka.