сбой Fallocate: операция не поддерживается


10

Когда работает,

fallocate -l 10G /path/to/file

Мне возвращается следующая ошибка:

fallocate: file: fallocate failed: Operation not supported

Создание файла с использованием dd (если = / dev / zero или if = / dev / urandom) работает, но если я пытаюсь создать большие файлы размером в десятки ГБ, то на это уходит несколько часов.

Запуск Ubuntu 14.04. При использовании раздела ext4 указание типа файла не влияет на результат.

Хорошо работает на моих машинах CentOS6, только не на Ubuntu.


какую файловую систему вы используете?
g_p

Также сообщите нам тип файла, который вы создаете.
vembutech

Используя ext4, тип файла не имеет значения. Создаю ли я пустой файл, .txt, .img, я получаю ту же ошибку.
Джон Джей Джонсон

Ответы:


11

Если для вас подходят разреженные файлы (например, вы хотите создать изображение, чтобы заполнить его файловой системой), они создаются в кратчайшие сроки.

100 ГБ занимают 3 миллисекунды:

# 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

Полученный файл:

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

Его реальный размер на данный момент: 0 байт

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

Это касалось создания контейнера dm-crypt / LUKS, работающего в предположении, что создание контейнера с использованием / dev / urandom будет более безопасным, чем создание контейнера с / dev / zero и постепенное заполнение его данными. С тех пор я узнал, что использование fallocate не решило бы мою проблему, несмотря на то, что медленная скорость была просто ограничением того, как быстро работает pRNG для / dev / urandom, но я до сих пор не знаю, почему сама функция fallocate отказывается работать. Приветствую ответ, хотя, принятый, как я представляю, после всего этого времени, это лучший ответ, который я получу, ха-ха.
Джон Дж. Джонсон

Интересно, не может ли fallocate отступить, чтобы сделать то же самое? Это имело бы смысл для меня.
unfa

3

Если вы не заботитесь о содержании, а просто нуждаетесь в некоторых данных,

Сначала сделай,

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

Это создаст,

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

Затем, если вы хотите создать файл 10M, используйте созданный выше файл для добавления несколько раз,

for i in {1..10}; do dd if=tmp.txt of=tmp1.txt bs=1M oflag=append conv=notrunc; done;

2

Я тоже столкнулся с этой проблемой.

Кажется, проблема в символической ссылке в пути к каталогу. попробуйте ту же команду на / tmp, и она должна работать.

Я смог обойти эту проблему, добавив '-x' к команде fallocate. Это принудительный «режим posix», и это должно занять больше времени.

Несмотря на то, что файловая система была ext4, символическая ссылка вызывала ошибку «не поддерживается в этой файловой системе». Фактически, если я перешел непосредственно к имени каталога (без каких-либо символических ссылок), вызов fallocate () сработал.

A1: не используйте символические ссылки в любом месте полного пути к файлу, который вы создаете.

A2: используйте '-x', хотя это займет больше времени.

б \ 375

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.