Файловый порядок в файловых системах FAT/FAT32/VFAT

Вопрос или проблема

У меня есть несколько аудиоустройств (машинное радио, переносное радио, MP3-плеер), которые принимают SD-карты и USB-флешки с файловой системой FAT. Поскольку эти устройства имеют ограниченный интеллект, они не сортируют имена файлов в файловой системе FAT по имени, а просто воспроизводят их в порядке, в котором они были скопированы на SD-карту.

В MS DOS и MS Windows это не было проблемой; простая утилита, которая сортировала файлы в алфавитном порядке, а затем копировала их в этом порядке, решала задачу. Однако в Linux файлы, скопированные из файловой системы ext4, не оказываются на FAT FS в том же порядке, в котором они были прочитаны и скопированы, предположительно, из-за того, что существует механизм буферизации, который улучшает эффективность, но не слишком заботится о физическом порядке, в котором файлы оказываются на целевом устройстве.

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

Существует ли способ (кроме как копировать их вручную один за другим и ждать, когда все буферы записи будут сброшены) гарантировать, что файлы окажутся на целевой FAT SD в том порядке, в котором они были прочитаны из файловой системы ext4?

По моему опыту, перемещение файлов на место в правильном порядке (например, сначала переместить файл A, потом файл C, затем файл B, если вы хотите получить порядок “ACB”) работает при условии, что вы делаете это все сразу.

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

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

Так это выглядит примерно так:

mv 100newfileA 101newfileB folder/
cd folder
mkdir order
mv * order
mv order/* .

Это абсолютно странно и вызывает недоумение, но у меня это работает.

Кстати, надежный способ перечислить файлы в фактическом порядке на диске (в отличие от алфавитного порядка) в системах Linux/UNIX – это использовать ls -U (или ls --sort=none).

Я помню, что задавал этот вопрос давно (вы можете поискать его). Мое предположение в это далекое будущее время: монтировать устройство с опцией sync (убирает буферизацию), сортировать список, чтобы гарантировать, что они скопированы в порядке.

Я только что столкнулся с этой проблемой и обнаружил, что существует инструмент для решения этой конкретной задачи. Он называется fatsort и, вероятно, доступен в вашей любимой дистрибутиве Linux (он есть в Ubuntu/Debian). Он также работает под другими Unix-системами. Оказавшись на целевом устройстве, он позволяет упорядочить файлы по их имени несколькими настраиваемыми способами.

Другой вариант — копировать их в желаемом порядке по одному на целевое устройство, как уже упоминали другие. То есть запускать команду cp для каждого файла в цикле или что-то эквивалентное вместо передачи шаблона glob или каталогов в качестве параметров для cp.

Например, для одной директории (без рекурсии, команда выполняется в исходной директории, без пробелов в именах файлов): for f in $(ls -1) ; do cp $f ~/media/<device_label>/<target_directory>/ ; sync ; done

Ответ или решение

Файловый порядок в файловых системах FAT/FAT32/VFAT: Решения для пользователей устройств на базе FAT

Файловые системы FAT (File Allocation Table), включая FAT32 и VFAT, используются во многих мобильных устройствах, таких как автомобильные радиоприемники, портативные радиоаппараты и MP3-плееры. Одной из распространенных проблем, с которой сталкиваются пользователи, является порядок воспроизведения аудиофайлов. На устройствах с ограниченными вычислительными возможностями файлы воспроизводятся в том порядке, в каком они были скопированы на SD-карту или USB-накопитель, а не по алфавиту, что может создать ненужные неудобства.

Проблема порядка файлов при копировании

При копировании файлов с системы ext4 на устройство с файловой системой FAT существует риск, что файлы не будут переписаны в том порядке, в котором они были прочитаны. Это связано с механизмами буферизации и оптимизации записи в современных операционных системах, включая Linux и Windows.

Пользователи, работающие в операционных системах, таких как MS DOS или Windows, могли легко использовать утилиты для сортировки файлов и затем копировать их в порядке, который соответствовал их потребностям. Однаков Linux процесс может оказаться более сложным.

Одно из решений: манипуляция с файлами

Как вы правильно заметили, можно заранее переместить все файлы в временную папку и затем вернуть их обратно в нужном порядке. Пример сценария в терминале:

mv 100newfileA 101newfileB folder/
cd folder
mkdir order
mv * order
mv order/* .

Эта техника позволяет контролировать порядок записи файлов, так как, перемещая все файлы сразу, вы уменьшаете вероятность их смешивания при записи.

Использование опции sync

Другой подход — это монтирование устройства с опцией sync. Это заставляет операционную систему немедленно записывать данные на устройство, устраняя задержки, связанные с буферизацией:

mount /dev/sdX /mnt/usb -o sync

После этого, скопируйте файлы в нужном порядке.

Утилиты для упрощения задачи

Для облегчения работы с порядком файлов на FAT-системах можно воспользоваться инструментами, такими как fatsort. Эта утилита доступна для большинства дистрибутивов Linux и позволяет сортировать файлы по имени непосредственно на устройстве с FAT. Это минимизирует необходимость вручную управлять порядком файлов.

Копирование файлов один за другим

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

for f in $(ls -1 | sort) ; do cp $f ~/media/<device_label>/<target_directory>/ ; sync ; done

Заключение

Проблема порядок файлов в FAT-системах может быть непростой, однако с использованием нескольких стратегий — от временного перемещения файлов до применения специализированных утилит, таких как fatort, — пользователи могут добиться нужного результата. Выбор наиболее подходящего подхода зависит от ваших предпочтений и особенностей оборудования, с которым вы работаете.

Оцените материал
Добавить комментарий

Капча загружается...