Есть ли что-то вроде альтернативных потоков данных в любой файловой системе Linux? - PullRequest
18 голосов
/ 07 октября 2008

В Windows NTFS есть хорошая, но в основном неиспользуемая функция, которая называется «Альтернативные потоки данных» (ADS), которые я недавно использовал в проекте для хобби.

В Mac HFS + также есть приятная, но в основном неиспользуемая функция, называемая «именные вилки».

Я подумываю о переносе этого проекта в Linux, но я не знаю, есть ли такая возможность в любой файловой системе Linux?

Ответы [ 6 ]

13 голосов
/ 07 октября 2008

Проблема с ADS заключается в том, что Windows «потеряет» эти потоки ADS, как только переместится в любую файловую систему, отличную от NTFS. Он не считает эти потоки важными, поэтому часто они не сохраняются. Вы обнаружите, что они недоступны или пропадают при использовании общего сетевого ресурса, при записи на CD, при подключении к USB-накопителю и т. Д. *

Короче говоря, если у вас нет очень узкого фокуса для вашего приложения (всегда на NTFS), я бы вообще избегал потоков ADS.

11 голосов
/ 07 октября 2008

Существуют файловые системы в Windows и Linux (и других ОС), которые поддерживают расширенные атрибуты (EAs). Поддержка Windows была добавлена ​​для OS / 2 compat и не имеет никакого документированного интерфейса, за исключением хакерского метода через API резервного копирования (это то, что делает Cygwin). Советники предназначены для хранения только небольших значений. В Windows каждый советник имеет имя ASCII (тогда как почти все другие имена являются Unicode), и объединенный размер всех советников в файле не может превышать 64 КБ. Эксперты не являются файлами: вы не можете открыть дескриптор файла советнику и прочитать его как обычный файл.

Альтернативные потоки данных - это отдельная функция, предоставляемая NTFS, которая позволяет вам предоставлять альтернативные субфайлы внутри файла. Каждый файл имеет поток данных без имени по умолчанию, который открывается автоматически, если вы не укажете альтернативный. Вы можете открыть дескриптор ADS и прочитать (даже выполнить) его как обычный файл с одним (Unicode) именем файла. ADS может быть размером с любой файл на диске.

Я не знаю точного аналога ADS в Linux, но вы можете использовать советники на порте Linux вместо этого, если значения данных невелики.

7 голосов
/ 07 октября 2008

Расширенные атрибуты поддерживаются некоторыми файловыми системами, в частности, XFS и (я думаю) JFS; но ограничены в размере (64 КБ в XFS). Reiser4 поддерживает вилки произвольного размера; но он не поддерживается ни одним из известных мне дистрибутивов. Другой вариант - ZFS, опять же не очень удобный для использования.

В конце концов, лучше всего использовать каталог.

0 голосов
/ 07 октября 2008

Обычно используемые файловые системы Linux не поддерживают это. Вместо этого вы можете использовать несколько файлов и подходящую схему именования (возможно, просто добавьте индекс потока к каждому имени файла) или архив, содержащий несколько файлов; в любом случае, вы обнаружите, что такой подход лучше в других отношениях - например, что происходит в Windows, если кто-то хочет создать резервную копию файлов Windows на носителе с файловой системой, отличной от NTFS?

0 голосов
/ 07 октября 2008

Единственное, что я знаю, и это в некоторой степени относится к расширенным атрибутам , но из того, что я читал об ADS, это def. не то же самое. Для чего именно ты это используешь?

0 голосов
/ 07 октября 2008

Большинство файловых систем Linux имеют extended attributes. Я не знаком с потоками NTFS, поэтому я не могу сравнить их. Большинство файловых систем необходимо монтировать с флагами, чтобы включить расширенные атрибуты, поэтому это может не сработать вообще для чьей-либо системы. Они обычно сокращаются до xattr или xattrs.

...