Chcę utworzyć duży plik ~ 10G wypełniony zerami i losowymi wartościami. Próbowałem użyć:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Tworzy plik o wielkości około 2 Gb i wychodzi ze statusem wyjścia „0”. Nie rozumiem dlaczego?
Próbowałem także utworzyć plik, używając:
head -c 10G </dev/urandom >myfile
Utworzenie go zajmuje około 28-30 minut. Ale chcę, żeby powstało szybciej. Czy ktoś ma rozwiązanie?
Również chcę utworzyć wiele plików z tym samym (pseudo) losowym wzorem do porównania. Czy ktoś wie, jak to zrobić?
dd
powodu rozmiaru bloku. Możesz przyjrzeć się temu postowi stackoverflow.com/questions/6161823/... zawiera on kilka dobrych odpowiedzi, jak obliczyć najlepszy rozmiar bloku, a także niektóre skrypty / programy użytkownika i inne sugestiedd
.Odpowiedzi:
Co powiesz na użycie fallocate, to narzędzie pozwala nam wstępnie przydzielić miejsce dla pliku (jeśli system plików obsługuje tę funkcję). Na przykład przydzielając 5 GB danych do pliku o nazwie „przykład”, można wykonać:
Jest to znacznie szybsze niż dd i bardzo szybko przydziela miejsce.
źródło
/dev/zero
?truncate
w przeszłości i dowiedziałem się, że nie przydziela fizycznie pliku na urządzeniu i po prostu tworzy dowolny duży plik do momentu uzyskania dostępu, niezależnie od dostępnej przestrzeni. Jesteś pewien, że tak nie jestfallocate
? Sprawdziłbym to, ale jestem na telefonie komórkowym ...Możesz użyć
dd
do utworzenia pliku składającego się wyłącznie z zer. Przykład:Jest to bardzo szybkie, ponieważ tylko jeden bajt jest naprawdę zapisywany na dysku fizycznym. Jednak niektóre systemy plików nie obsługują tego.
Jeśli chcesz utworzyć plik zawierający pseudolosową zawartość, uruchom:
Sugeruję użycie 10M jako rozmiaru bufora (
bs
). Wynika to z faktu, że 10 M nie jest zbyt duże, ale nadal zapewnia dobry rozmiar bufora. Powinien być dość szybki, ale zawsze zależy od szybkości dysku i mocy przetwarzania.źródło
Używając dd, powinno to stworzyć plik 10 GB wypełniony losowymi danymi:
count
jest w megabajtach.Źródło: stackoverflow - Jak utworzyć plik o danym rozmiarze w systemie Linux?
źródło
dd if=/dev/urandom of=10Gfile bs=500M count=20
, co dało mi 10237226010 bajtów w niecałe 20 minut.Odpowiadając na pierwszą część pytania:
Próba zapisania bufora równego 5 GB nie jest dobrym pomysłem, ponieważ twoje jądro prawdopodobnie tego nie obsługuje. W żadnym wypadku nie przyniesie to żadnych korzyści. Pisanie 1M na raz to dobre maksimum.
źródło
To pytanie zostało otwarte 5 lat temu. Natknąłem się na to i chciałem dodać moje ustalenia.
Jeśli po prostu użyjesz
będzie działać znacznie szybciej, jak wyjaśnia Xiaodongjie. Ale możesz uczynić to jeszcze szybszym, używając
eatmydata
likeCo
eatmydata
powoduje, że wyłącza fsync, dzięki czemu dysk zapisuje się szybciej.Możesz przeczytać więcej na ten temat na https://flamingspork.com/projects/libeatmydata/ .
źródło
dd
jest wystarczająco szybki, i nazywa się to libEAT-MY-DATA z jakiegoś powodu.