Что мне нужно, чтобы 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.