Do celów testowych muszę wygenerować plik o określonym rozmiarze (aby przetestować limit wysyłania).
Co to jest polecenie utworzenia pliku o określonym rozmiarze w systemie Linux?
Do celów testowych muszę wygenerować plik o określonym rozmiarze (aby przetestować limit wysyłania).
Co to jest polecenie utworzenia pliku o określonym rozmiarze w systemie Linux?
Odpowiedzi:
dd if=/dev/zero of=upload_test bs=file_size count=1
Gdzie file_size
jest rozmiar twojego pliku testowego w bajtach
dd
ma limit 2 ^ 32 dla jej wartości, tak aby utworzyć plik większy niż 4 GB, istnieje trik: dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.
Proszę, nowoczesność jest łatwiejsza i szybsza. W systemie Linux (wybierz jedną)
truncate -s 10G foo
fallocate -l 5G bar
To wymaga , aby stwierdzić, że truncate
w systemie plików wspierające pliki rozrzedzone utworzy plik rozrzedzony i fallocate
nie będzie. Plik rzadki to taki, w którym jednostki alokacji tworzące plik nie są w rzeczywistości przydzielane, dopóki nie zostaną użyte. Metadane dla pliku zajmą jednak trochę miejsca, ale prawdopodobnie nie będzie w pobliżu rzeczywistego rozmiaru pliku. Aby uzyskać więcej informacji, zapoznaj się z zasobami dotyczącymi rzadkich plików, ponieważ ten typ pliku ma zalety i wady. Plik nierzadki ma swoje bloki (jednostki alokacji) alokowane z wyprzedzeniem, co oznacza, że miejsce jest zarezerwowane tak długo, jak widzi to system plików. Również fallocate
ani truncate
nie ustawi zawartość pliku do określonej wartości , takich jak dd
, zamiast tego zawartość pliku zaalokowanego z fallocate
lub truncate
może być jakąkolwiek wartością kosza, która istniała w przydzielonych jednostkach podczas tworzenia, a to zachowanie może być pożądane lub nie. dd
Jest najwolniejsza, ponieważ faktycznie zapisuje wartość lub porcji danych dla całego strumienia pliku zgodnie z nim w opcji wiersza poleceń.
To zachowanie może być potencjalnie inne - w zależności od używanego systemu plików i zgodności tego systemu plików z dowolnym standardem lub specyfikacją. Dlatego zaleca się przeprowadzenie odpowiednich badań w celu upewnienia się, że zastosowano odpowiednią metodę.
truncate
. Utworzył plik o rozmiarze zerowym przy użyciu powyższej składni. „Strona fallocate
podręcznika ” dla mówi, że tworzone przez niego pliki są space
raczej puste niż dane. Wydaje się, że nie byłoby to przydatne w niektórych oczekiwanych przypadkach, takich jak „ile czasu zajmuje skopiowanie pliku 1G”.
brew install coreutils
. To doda g przed komendą, więc trzeba uruchomić go tak: gtruncate -s 10G foo
. Mam nadzieję że to pomoże!
NTFS
partycji.
Aby śledzić post Toma , możesz użyć dd do tworzenia rzadkich plików:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Spowoduje to utworzenie pliku z „dziurą” w większości uniksów - dane nie zostaną w rzeczywistości zapisane na dysku ani nie zajmą miejsca, dopóki nie zostanie w nim zapisane coś innego niż zero.
count=0
, bs * seek
staje się rozmiarem pliku
Na OSX (i najwyraźniej Solaris) mkfile
polecenie jest również dostępne:
mkfile 10g big_file
To tworzy plik o rozmiarze 10 GB o nazwie „duży_plik”. Znalazłem to podejście tutaj.
truncate
i fallocate
nie są dostępne. dd
działa również jak opisano powyżej, chociaż m
dotyczy megabajtów, nie M
.
Użyj tego polecenia:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
Aby utworzyć duży (pusty) plik, ustaw $INPUT-FILE=/dev/zero
.
Całkowity rozmiar pliku to $BLOCK-SIZE * $NUM-BLOCKS
.
Nowy utworzony plik będzie $OUTPUT-FILE
.
Możesz to zrobić programowo:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
To podejście jest szczególnie przydatne do późniejszego mmapowania pliku do pamięci.
użyj następującego polecenia, aby sprawdzić, czy plik ma prawidłowy rozmiar:
# du -B1 --apparent-size /tmp/foo.txt
Bądź ostrożny:
# du /tmp/foo.txt
prawdopodobnie wypisze 0, ponieważ jest alokowany jako plik rzadki, jeśli jest obsługiwany przez twój system plików.
zobacz także: mężczyzna 2 otwarty i mężczyzna 2 obcięty
Niektórych z tych odpowiedzi używasz /dev/zero
jako źródła swoich danych. Jeśli testujesz prędkość wysyłania do sieci, może to nie być najlepszy pomysł, jeśli twoja aplikacja wykonuje jakąkolwiek kompresję, plik pełen zer kompresuje się naprawdę dobrze. Użycie tego polecenia do wygenerowania pliku
dd if=/dev/zero of=upload_test bs=10000 count=1
Mogłem skompresować upload_test
do około 200 bajtów. Możesz więc postawić się w sytuacji, w której myślisz, że przesyłasz plik o rozmiarze 10 KB, ale w rzeczywistości będzie to znacznie mniej.
Sugeruję użycie /dev/urandom
zamiast /dev/zero
. W ogóle nie mogłem skompresować wyjścia /dev/urandom
.
/dev/zero
, więc /dev/urandom
jest dobry.
dd if=/dev/zero of=my_file.txt count=12345
Odpowiedzi jest wiele, ale żadna nie wyjaśniła ładnie, co jeszcze można zrobić. Patrząc na strony podręcznika dla dd , można lepiej określić rozmiar pliku.
Spowoduje to utworzenie pliku /tmp/zero_big_data_file.bin wypełnionego zerami, który ma rozmiar 20 megabajtów:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Spowoduje to utworzenie pliku /tmp/zero_1000bytes_data_file.bin wypełnionego zerami, który ma rozmiar 1000 bajtów:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
lub
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Jako polecenie powłoki:
< /dev/zero head -c 1048576 > output
Użyj, fallocate
jeśli nie chcesz czekać na dysk.
Przykład:
fallocate -l 100G BigFile
Stosowanie:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version