Что мне нужно, чтобы SEEK_HOLE работал с разреженными файлами?

Я пытаюсь работать более эффективно с разреженными файлами. Я читал о функциональности SEEK_HOLE в новых ядрах Linux. По мнению других людей, это должно быть в версии ядра 3.1 и позже.

Однако, как видно ниже, в этом должно быть что-то еще. Я нахожусь на ядре 3.2+, и работа с разреженными файлами все еще идет медленно.

Выполнение "cp" или "tar" для этого (полностью пустого) разреженного файла должно занять менее 1 секунды.

Есть идеи, что мне не хватает? Как я могу проверить, поддерживается ли SEEK_HOLE / активирован?

Здесь обсуждают то же самое, но по какой-то причине я не могу публиковать там комментарии о том, что это не работает:

Копирование файла размером 1 ТБ

(root@r1)-(/nbd/test)# uname -a
Linux r1.exice.com 3.2.0-33-generic #52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64  x86_64 x86_64 GNU/Linux
(root@r1)-(/nbd/test)# dd if=/dev/zero of=10g.img seek=10G bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000271811 s, 3.7 kB/s
(root@r1)-(/nbd/test)# time cp 10g.img new.img

real    0m15.370s
user    0m1.544s
sys     0m13.405s
(root@r1)-(/nbd/test)# time bsdtar cvfz new.tar.gz 10g.img
a 10g.img

real    1m59.898s
user    1m43.938s
sys     0m15.769s
(root@r1)-(/nbd/test)# time tar cvfz new2.tar.gz 10g.img
10g.img

real    1m58.584s
user    1m51.275s
sys     0m30.382s

1 ответ

Убедитесь, что вы используете инструмент, который поддерживает SEEK_HOLE,

bsdtar >=3.0.4

cp >=8.13

Также убедитесь, что вы запускаете файловую систему, которая поддерживает его. Работает нормально с ext4. Не работает с reiserfs.

Другие вопросы по тегам