Поддерживает ли NFS и SMB разреженные файлы?

Этот вопрос ранее задавался при переполнении стека, но хорошие люди там рекомендовали вместо этого попробовать сообщество.

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

Я понимаю, что SMB широко используется в Windows и что согласно этой записи сервер SMB может поддерживать разреженный файл, даже если основная файловая система этого не делает. Однако, если я прав, файловая система, которая не поддерживает разреженные файлы, просто заполнит "дыры" нулями, и это может привести к проблемам с производительностью.

Что касается NFS, я не смог ничего узнать об использовании NFS, поддерживающей разреженные файлы.

Следовательно, мои вопросы,

Поддерживаются ли разреженные файлы в NFS и SMB?

2 ответа

Решение

NFS: имеет частичную поддержку разреженных файлов. По сути, он поддерживает создание разреженного файла, но при чтении файл расширяется и включает нули. Это означает, что, хотя вы можете создать разреженный файл через NFS, при чтении того же самого файла данные в транзитной сети будут содержать любые нули, найденные в исходном файле. Простой тест покажет это поведение:

cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img

-rw-р - r--. 1 root root 1.0G 26 октября 11:29 test.img

du -hs test.img

0 test.img

Как видите, файл test.img имеет размер на диске 0 байт. Тем не менее, читая его обратно, используя dd if=test.img of=/dev/null bs=1M iflag=direct шоу

1024+0 записей в
1024+0 записей
Скопировано 1073741824 байта (1,1 ГБ), 10,2269 с, 105 МБ / с

Понятно, что при передаче разреженного файла он расширяется и включает все нули.

NFSv4.2 будет расширена за счет включения специальной обработки для сетевой передачи разреженных файлов. Другими словами, с NFSv4.2 выше dd будет завершено почти мгновенно.

SMB: он работает так же, как NFS, по крайней мере в моих тестовых средах, используя сервер Samba v3.6.x с CIFS v1 и клиент Linux с использованием mount.cifs. Может под виндой ведёт себя по другому...

NFS

Да, NFS 4.2 полностью поддерживает разреженные файлы (см. Этот канонический документ и эту презентацию).

До NFS 4.2 модель клиент / сервер NFS поддерживала разреженные файлы в том смысле, что API поддерживал все файловые операции POSIX. Это означало, что запись разреженных файлов на сервер, который поддерживал разреженные файлы в резервной файловой системе, приводила к созданию разреженного файла (а не к хранению большого количества нулей). Но чтение файла приведет к передаче множества нулей для разреженного элемента. IE ответ "частично".

NFS 4.2 добавляет возможность для клиента "видеть" дыры в файлах, и поэтому серверу не нужно передавать все эти нули. Из удостоверения личности:

1.4.3.  Sparse Files

Sparse files are ones which have unallocated or uninitialized data
blocks as holes in the file.  Such holes are typically transferred as
0s during I/O. READ_PLUS (see Section 15.10) allows a server to send
back to the client metadata describing the hole and DEALLOCATE (see
Section 15.4) allows the client to punch holes into a file.  In
addition, SEEK (see Section 15.11) is provided to scan for the next
hole or data from a given location.

Несмотря на то, что спецификация поддерживает разреженные файлы, ленивый разработчик может избежать реализации поддержки разреженных файлов на клиенте или сервере.

SMB

Я меньше знаю о SMB, но считаю, что он также поддерживает разреженные файлы, если установлен соответствующий бит возможностей FS. Смотрите здесь для получения дополнительной информации.

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