Чи підтримують NFS та SMB файли з обмеженими розмірами?


18

Це питання раніше задавались у переповнення стека, але хороші люди рекомендували мені спробувати спільноту тут.

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

Я розумію, що SMB широко використовується в Windows, і згідно з цим записом сервер SMB може підтримувати розріджений файл, навіть якщо базова файлова система цього не робить. Однак, якщо я маю рацію, файлова система, яка не підтримує розріджені файли, просто заповнить «дірки» нулями, і це може призвести до проблеми з продуктивністю.

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

Отже, мої запитання:

Чи підтримуються розріджені файли в NFS та SMB?

Відповіді:


12

NFS: він має часткову підтримку розрідженого файлу. В основному, він підтримує створення розрідженого файлу, але, читаючи, файл розширюється, включаючи нулі. Це означає, що, хоча ви можете створити розріджений файл за допомогою NFS, при читанні назад цього самого файлу дані мережевої транзиту включатимуть нулі, знайдені у вихідному файлі. Простий тест показує, що поведінка:

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

-rw-r - r--. 1 корінь кореня 1.0G 26 жовтня 11:29 test.img

du -hs test.img

0 тест.імг

Як бачите, файл 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. Можливо, під Windows він поводиться інакше ...


Чи може NFS підтримувати розріджені файли, якщо основна файлова система сервера NFS не підтримує розріджений файл?
Ендрю Генле

2
@shodanshok: ваш тест недійсний. Виконання тих же команд у файловій системі, яка підтримує розріджені файли, дає такий же результат. ddчитає в блоці за блоком і підтримує чи база файлової системи розріджені файли чи ні, ОС перетворює отвори в нулі. Спробуйте його на ext4, і ви побачите однакові цифри.
abligh

@AndrewHenle, якщо базовий FS не підтримує розріджений файл, як NFS може відкрити неіснуючу підтримку? У будь-якому випадку, на сьогоднішній день досить важко знайти файлову систему без розрідженої підтримки файлів, оскільки всі останні файли (ext3 / 4, xfs тощо) підтримують цю функцію.
shodanshok

1
@abligh Ви помиляєтесь. Виконання ddкоманди над локальним розрідженим файлом дасть набагато швидші результати. Дивіться ось приклад :, root@hubble:~# truncate -s 1G test.img root@hubble:~# dd if=test.img of=/dev/null bs=1M iflag=direct 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.10478 s, 10.2 GB/sЯк ви бачите, читання локального розрідженого файлу дає швидкість вводу / виводу на північ від 10 Гб / с
shodanshok

2
@shodanshok - О, я бачу, ви дивитесь на швидкість, а не на перераховану суму. Можливо, уточнення, що у Вашій відповіді було б корисно. Канонічний тест на файл, який зберігається рідко, є du -svs ls -l, але ви правильні, що не допомагає при передачі по мережі; але в будь-якому випадку (як straceпідтверджую) ddчитає весь файл, включаючи "дірки" як нулі, різниця лише в тому, де походять "нулі" (сервер чи клієнт). Тим НЕ менше , зверніть увагу (як на мій відповідь) , що NFS 4,2 робить повністю підтримує розріджені файли.
abligh

10

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. Дивіться тут для отримання додаткової інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.