Как я могу сохранить атрибуты файлов Windows при копировании файлов под Linux?

8

Я использую собственный скрипт Bash, работающий на компьютере с Linux, для массового дублирования USB-накопителей в формате FAT32.

Мне нужно сохранить атрибуты файла Windows, такие как «скрытый».

Я использую rsync(или ddс findи mkdirв более новой версии, чтобы заставить синхронизацию ввода / вывода для лучшей стабильности и оптимального использования пропускной способности).

Я слепо попробовал -Xи -Aпереключаюсь rsync, что, как говорят, сохраняет некоторые атрибуты файла, но они, кажется, не работают для атрибутов файла Windows.

Есть ли способ чтения и записи файловых атрибутов Windows в среде Linux?

Я мог бы применить их после копирования, если нет более простого способа.

Я не хочу ddиспользовать всю исходную файловую систему, потому что она будет крайне неоптимизирована, особенно когда вам нужно записать сотни дисков. Иногда накопители емкостью 16 ГБ и всего несколько ГБ файлов на них - и глупый ddбудет копировать все 16 ГБ, тратя много времени, чтобы это заработало в производстве.

Я искал в Интернете, но похоже, что расширенные атрибуты Linux не имеют ничего общего с атрибутами файлов Windows, и я не нашел способа прочитать и записать эту информацию (или просто скопировать ее с файлами).

unfa
источник
Является ли «скрытый» единственным, кого вы хотите сохранить, или есть другой?
М. Бесерра
2
Интересно. Драйвер Linux VFAT даже экспортирует эти атрибуты любым способом, который может быть записан?
ilkkachu
@ M.Becerra - в настоящее время мне нужен только атрибут «скрытый», и, вероятно, в будущем я не буду нуждаться ни в каком другом.
unfa
@StephenKitt - мне нужно иметь возможность прочитать это из исходной файловой системы и перенести эту информацию в мои новые дублированные файловые системы. Я предполагаю, что очень грубый метод, чтобы преодолеть эту проблему, состоял бы в том, чтобы заполнить нулем исходную файловую систему (очистить пустое пространство), создать сжатый образ dd и записать его на новые диски, пропуская разреженные части, чтобы избежать выписывания пустых частей образ. Это немного грубо, и я думаю, что у него не было бы сопоставимой производительности rsyncили ручной find/ mkdir/ ddоперации, которую я использую сейчас.
unfa
1
@ilkkachu Да, это так, есть два ioctl, которые можно использовать для получения и установки атрибутов FAT. Посмотрите fatattrна одну реализацию инструмента, использующего их.
Стивен Китт

Ответы:

1

Я могу придумать пару способов справиться с этим.

Первый - использовать Mtools для копирования файлов. Чтобы это работало, вам нужно определить «диски» (скажем, A: для исходного диска, B: для цели), затем вы сможете копировать все, сохраняя атрибуты и временные метки, используя

mcopy -s -p -m a: b:

(Непроверенные).

Второй - постобработка атрибутов с использованием fatattr(что доступно в большинстве дистрибутивов). Он обрабатывает монтируемые файловые системы, поэтому вы должны копировать свои файловые системы так же, как вы это делаете в настоящее время, а затем использовать, fatattrчтобы вывести список всех атрибутов FAT всех исходных файлов, и проанализировать их, fatattrчтобы указать, как правильно установить атрибуты для целевых файлов. ,

Стивен Китт
источник
У меня были проблемы mcopy, произошел сбой при попытке скопировать папку «System Volume Information», что вызвало ошибку GCC «Обнаружено разрушение стека». Поэтому я попробую использовать fatattr.
unfa
У вас есть «System Volume Information» в файловой системе FAT32? Я думал, что это только NTFS.
Стивен Китт
Я должен проверить назад.
unfa