fallocate failed: Operacja nie jest obsługiwana

10

Podczas biegania

fallocate -l 10G /path/to/file

Zwrócił mi następujący błąd:

fallocate: file: fallocate failed: Operation not supported

Działa tworzenie pliku przy użyciu dd (if = / dev / zero lub if = / dev / urandom), ale jeśli próbuję utworzyć duże pliki o rozmiarach kilkudziesięciu GB, to zajmie to kilka godzin.

Uruchamianie Ubuntu 14.04. Używanie partycji ext4, określenie typu pliku nie wydaje się zmieniać wyniku.

Działa dobrze na moich komputerach CentOS6, po prostu nie Ubuntu.

John J Johnson
źródło
jakiego systemu plików używasz?
g_p,
Zaktualizuj również typ tworzonego pliku.
vembutech,
W przypadku ext4 typ pliku nie wydaje się mieć znaczenia. Niezależnie od tego, czy tworzę pusty plik, .txt, .img, pojawia się ten sam błąd.
John J Johnson,

Odpowiedzi:

11

Jeśli pliki rzadkie są dla Ciebie odpowiednie (np. Chcesz utworzyć obraz w celu zapełnienia go systemem plików), są one tworzone w mgnieniu oka

100 GB zajmuje 3 milisekundy:

# time dd if=/dev/zero of=tmptst.dat bs=1G seek=100 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0,00037726 s, 0,0 kB/s

real    0m0.003s
user    0m0.000s
sys 0m0.002s

Wynikowy plik:

# ls -lh tmptst.dat
-rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat

Jego rzeczywisty rozmiar w tej chwili: 0 bajtów

# ls -lsh tmptst.dat
0 -rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat
Murxo
źródło
Dotyczyło to stworzenia kontenera dm-crypt / LUKS, działającego przy założeniu, że utworzenie kontenera przy użyciu / dev / urandom byłoby bezpieczniejsze niż utworzenie kontenera z / dev / zero i stopniowe wypełnianie go danymi. Od tamtej pory nauczyłem się, że używanie Fallocate nie rozwiązałoby mojego problemu, ponieważ niska prędkość była po prostu ograniczeniem szybkości działania pRNG / dev / urandom, ale nadal nie mam pojęcia, dlaczego sama Fallocate odmawia działania. Okrzyki za odpowiedź, przyjęte, jak sobie wyobrażam po całym tym czasie, to najlepsza odpowiedź, jaką dostanę haha.
John J Johnson
Zastanawiam się, czy Fallocate nie może zrobić tego samego? To miałoby dla mnie sens.
unfa
3

Jeśli nie zależy ci na treści, ale potrzebujesz tylko danych,

Po pierwsze

dd if=/dev/urandom of=tmp.txt bs=1M count=1

To stworzy

-rw-r--r-- 1 root root 1.0M Oct 17 00:30 tmp1.txt.

Następnie, jeśli chcesz utworzyć plik 10M, użyj powyższego wygenerowanego pliku do dołączania wielokrotnie,

for i in {1..10}; do dd if=tmp.txt of=tmp1.txt bs=1M oflag=append conv=notrunc; done;
użytkownik1234
źródło
2

Wpadłem również na ten problem.

Problemem może być dowiązanie symboliczne w ścieżce katalogu. spróbuj tego samego polecenia na / tmp i powinno działać.

Byłem w stanie obejść ten problem, dodając „-x” do polecenia fallocate. Ten wymuszony „tryb posiksowy” musiał trwać dłużej.

Mimo że systemem plików był ext4, symboliczne łącze powodowało błąd „nieobsługiwany w tym systemie plików”. W rzeczywistości, jeśli poszedłem bezpośrednio do nazwy katalogu (bez żadnych dowiązań symbolicznych), wywołanie fallocate () zadziałało.

A1: nigdzie nie ma dowiązań symbolicznych w pełnej nazwie ścieżki tworzonego pliku.

A2: użyj „-x”, nawet jeśli zajmuje to więcej czasu.

b \ 375

Brett Bolen alias Wing Ed Lizard
źródło