Как я могу использовать rsync с файловой системой FAT?

Я хотел бы написать простой скрипт резервного копирования, который сохраняет некоторые данные на диск FAT. Стоит ли переформатировать диск и использовать лучшую файловую систему или можно использовать rsync с FAT? Если так, с какими проблемами я могу столкнуться? Будет ли производительность намного хуже?

РЕДАКТИРОВАТЬ: Это на Linux, даже не знал, что Rsync для Windows. Источниками являются различные файловые системы (это беспорядок), и место назначения в настоящее время отформатировано в FAT32.

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

7 ответов

Решение

Я бы порекомендовал переформатировать в linux fs, если возможно. Как уже упоминалось, FAT имеет относительно низкие ограничения на размер файла и может не обрабатывать права доступа и права владения. Что еще более важно, FAT не отслеживает время изменения файлов так же точно, как, скажем, ext3 (FAT точен только с точностью до 2-секундного окна). Это приводит к особенно неприятному поведению с rsync, так как иногда он решает, что исходные файлы новее или старше, чем файл резервной копии, в силу того, что ему нужно повторно скопировать данные или, по крайней мере, повторно проверить хэши. В целом, это создает очень плохую производительность при резервном копировании. Если вам нужно придерживаться FAT, посмотрите в качестве обходных путей флаги rsync --size-only и --modify-window.

Я использую rsync для резервного копирования моих фотографий, которые храню и обрабатываю на ноутбуке под управлением Linux (Ubuntu 10.4). Я делаю их резервную копию на очень простом NAS с жестким диском 1 ТБ, отформатированным как FAT32. Корпус NAS и прошивка очень просты, поэтому не позволяют переформатировать накопитель.

Команда, которую я использую:

$ rsync --progress --modify-window=1 --update --recursive --times \
  /home/mloskot/Pictures /mnt/nas/Pictures

Чтобы разрешить правильное сравнение времени, используется опция --modify-window=1, поскольку FAT32 записывает временные метки файлов с разрешением 2 секунды, которое отличается от файловых систем, используемых в Linux. Параметр --update позволяет избежать ненужного копирования существующих файлов - он работает как инкрементное резервное копирование.

Чтобы сделать сравнение по размеру, вы можете указать опцию --size-only.

Это rsync для Linux на / с диска FAT (какая версия FAT?) Или вы используете версию cwRsync для Windows?

В любом случае FAT16 и 32 работают с обеими версиями (сам FAT12 не пробовал). Если вы работаете в системе Linux, я ожидаю, что производительность файловой системы FAT будет немного хуже, чем при использовании файловой системы формата Linux, поскольку в целом они немного медленнее (рад, что кто-то исправит меня, если я неправильно).

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

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

Если бы вы могли, я бы переформатировал в нативный формат, который вы планируете использовать с компьютером (OS X? Linux?), Если бы не для чего иного, как для сохранения метаданных и потери удара по лбу через несколько месяцев, когда я закончу синхронизировать что-то с ошибками из-за ограничений файловой системы. часто совместное использование с другими системами может быть выполнено с помощью совместного использования экспорта или, если вы используете NTFS, вы можете сохранить некоторые метаданные, но при этом получить большую межсистемную совместимость, поскольку Mac, NT и Linux теперь поддерживают возможность NTFS R/W.

Да переформатировать! Вы всегда должны использовать лучшую файловую систему, чем FAT, за исключением случаев, когда это необходимо по причинам совместимости!

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

FAT (предположительно FAT32) может быть проблематичным из-за максимальных размеров файлов (4 ГБ), максимальных размеров томов (2 ТБ - один день в любом случае!), Фрагментации и т. Д.

Однако, если ничего из этого не имеет значения, и вы просто хотите простую, быструю и максимально совместимую файловую систему, тогда FAT будет в порядке. В отношении скорости, из-за отсутствия журналирования, разрешений и т. Д., FAT может не справиться с альтернативами - NTFS/Ext3/HFS...

я нашел этоrsync -rtcvP SRC DESTочень хорошо работает с FAT32.
Вместо использования популярныхarchive (-a)режим передачи, этот используетrecursive+times+checksumsфлаги.

The checksums (-c)флаг — это важный бит. Сравнение по контрольным суммам более надежно, чем сравнение по отметке времени и размеру файла. Настройки этого флага позволяют избежать передачи существующих файлов в место назначения. Передача потребует немного больше ресурсов ЦП, но в зависимости от содержимого это может быть незначительно.
times (-t)флаг сохраняет время модификации в пункте назначения.

Это мои любимые команды для/из файловых систем FAT и exFAT:

      SOURCE_PATH="path/to/source/dir"
DESTINATION_PATH="path/to/destination/dir"

# Option 1. **Copy** from source to destination.
#
# dry run
time sudo rsync -hvrltD --modify-window=1 --stats --info=progress2 \
    --dry-run "$SOURCE_PATH/" "$DESTINATION_PATH/"
# actual copy
time sudo rsync -hvrltD --modify-window=1 --stats --info=progress2 \
    "$SOURCE_PATH/" "$DESTINATION_PATH/"

# Option 2. **Mirror** from source to destination. 
# - CAUTION: this deletes files and folders that are on the destination but not
#   the source, thereby making destination dir *exactly match* the source dir.
#
# dry run
time sudo rsync -hvrltD --modify-window=1 --stats --info=progress2 \
    --delete --delete-excluded --dry-run "$SOURCE_PATH/" "$DESTINATION_PATH/"
# actual copy
time sudo rsync -hvrltD --modify-window=1 --stats --info=progress2 \
    --delete --delete-excluded "$SOURCE_PATH/" "$DESTINATION_PATH/"

Подробности см. в моем полном ответе здесь: Суперпользователь: лучший. rsyncнастройки для копирования и зеркалирования в или из файловых систем FAT и exFAT

Я загрузился на USB-накопитель Ubuntu 22.04 Live на MacBook Air 2015 года, затем использовал приведенные выше команды rsync для резервного копирования всего компьютера на внешний твердотельный накопитель exFAT. Чтобы прочитать внутреннюю файловую систему Apple APFS, я использовалlinux-apfs-rw. Моя инструкция по установке здесь .

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