75

После того, как мне не удалось скопировать файл размером более 4G на флэш-накопитель USB 8G, я отформатировал его как ext3. Пока это работает нормально для меня, это вызовет проблемы, если я захочу использовать его для копирования файлов кому-то, кто не использует Linux.

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

Я бы хотел знать:

  • Какую утилиту я должен использовать для создания файловой системы? (До сих пор я нашел mkudffs и genisoimage , и mkudffs кажется лучшим вариантом.)
  • Какие параметры следует использовать с выбранной утилитой для максимальной совместимости?
  • Насколько совместима с наиболее распространенными версиями этих трех операционных систем UDF?
  • Использование UDF на самом деле лучшая идея? Есть ли другая файловая система, которая имела бы лучшую совместимость, без проблемных ограничений, таких как ограничение размера файла FAT32 4G, и без необходимости устанавливать специальные драйверы на каждый компьютер, который ее касался?

7 ответов7

55

Во-первых, я полностью обнулил диск перед созданием файловой системы UDF с:

dd if=/dev/zero of=/dev/sdx bs=512

Это делается для того, чтобы избежать каких-либо оставшихся суперблоков или других метаданных, которые могут запутать определение типа файловой системы операционной системы (необходимо по крайней мере обнуление первого сектора, чтобы стереть таблицу разделов; первые несколько секторов не используются UDF, а оставшиеся таблица разделов может действительно запутать вещи). Вы также можете использовать переключатель count=1 в команде dd, чтобы быстрее обнулить только первые 512 байт диска (где обычно находится MBR), хотя это не было проверено.

Чтобы создать файловую систему, я использовал команду:

mkudffs --media-type=hd --blocksize=512 /dev/sdx

mkudffs станет доступной в дистрибутивах Linux на основе Debian (таких как Ubuntu) после установки пакета udftools :

sudo apt-get install udftools

Размер блока по умолчанию для mkudffs - 2048, что неправильно для флэш-накопителя USB (который использует 512-байтовые сектора). Поскольку размер блока используется для поиска метаданных файловой системы, использование неправильного размера блока может привести к тому, что он не будет распознан как файловая система UDF (так как привязка не будет там, где ожидает драйвер файловой системы). Обратите внимание, что справочная страница mkudffs неверна; 512 является допустимым значением для размера блока (и код явно принимает его).

Я также использовал весь диск вместо раздела; это должно быть более совместимым.

Результат моего тестирования до сих пор:

  • Linux с самым последним ядром (2.6.31, из Ubuntu 9.10): работает.
  • Linux с более старым ядром: для bs=512 требуется опция mount , потому что он неправильно использовал 2048 вместо размера сектора устройства (исправлено в коммите 1197e4d).
  • Windows Vista: работает.
  • Совершенно новый Mac: работает.
  • Windows XP: умеет читать нормально, но выдает "доступ запрещен" при попытке записи; также кажется, что диск заполнен.

Хотя я до сих пор не пытался создать в нем файл размером более 4G, я не вижу причин, по которым он не будет работать.

Учитывая, что он отлично работал на всех последних операционных системах (требуется только монтирование вручную в Linux, которое больше не понадобится, как только выйдут Ubuntu 9.10 и Fedora 12), и работал только для чтения в Windows XP (что было неожиданностью). для меня; я ожидал, что он вообще не распознает файловую систему), использование UDF вместо FAT32 или NTFS в больших USB-флешках кажется хорошей идеей.

7

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

Вдохновленный постом CesarB (и другими моими исследованиями / тестированием), я написал скрипт для автоматизации процесса форматирования в UDF - с использованием правильно определенного размера сектора. Смотрите format-udf на GitHub. Известные особенности:

  • Форматирует блочный диск (жесткий диск или флэш-диск) в формате универсального диска (UDF)
    • UDF ревизия 2.01 используется для максимальной совместимости
    • Первые 4096 секторов обнуляются, чтобы стереть любую существующую MBR (необходимую для правильного определения UDF)
  • Результирующая файловая система может быть прочитана / записана для нескольких семейств операционных систем (Windows, OS X и Linux)
  • Работает на любой ОС, имеющей среду Bash

Из-за последнего пункта этот сценарий, который я написал, нельзя использовать в Windows. Тем не менее, скрипт будет работать на OS X и Linux. После этого Windows сможет волшебным образом обнаружить только что отформатированный диск UDF.

Чтобы напрямую ответить на опубликованные вопросы, format-udf:

  • выберите подходящий инструмент для форматирования в зависимости от операционной системы и среды
  • автоматически определять и заполнять все параметры, необходимые для форматирования
  • максимизировать совместимость с ОС (смотрите таблицу совместимости с GitHub)
  • получить максимальный набор функций (и минимальные ограничения), которые ищет запрашивающий
3

Кажется, я вспомнил, что, сделав это, проблема, которую я обнаружил, заключается в том, что версия linux, которую я смонтировал, была доступна только для чтения, поскольку драйвер не был собран для r/w. Это работает в Windows, и я думаю, Mac.

Да, хорошее решение найти сложно. Некоторое время у меня был внешний диск с разделом fat32, на котором были драйверы для win и mac, раздел mac и большой раздел ext3. Это работало, но это означало установку драйверов. Отличный трюк в том, что он также загружался на Mac (fw & usb), вы должны оставить пробел и сделать некоторые заметки, затем вы можете добавлять разделы через командную строку и таблицу разделов mac.

Мир нуждается в бесплатной, доступной всем, файловой системе. ZFS был бы хорошим выбором. :-)

2

Питер Уил (Pieter Wuille) написал инструмент для разбиения и форматирования диска, чтобы создать макет UDF, который будет совместим как с Windows (> = Vista, только для чтения для XP), так и с MacOS X 10.5, Linux 2.6.30+:

1

Для достижения максимальной совместимости вы должны использовать mkudffs из проекта udftools как минимум в версии 2.0. Никаких специальных параметров не требуется, все определяется автоматически.

Есть 3 больших ограничения:

  1. Системы Microsoft Windows не распознают несъемный жесткий диск, если на нем нет таблицы разделов MBR или GPT.

  2. Системы Apple Mac OS X не распознают файловую систему UDF на многораздельном диске.

  3. Вероятно, все системы (кроме недавних ядер Linux) не распознают файловую систему UDF, если размер блока UDF не соответствует размеру логического сектора диска.

Инструмент mkudffs начиная с версии 2.0 обрабатывает все 3 ограничения. При форматировании несъемных жестких дисков создается "фальшивая" таблица MBR, которая начинается в секторе 0 и охватывает весь диск. Таким образом, файловая система UDF может быть прочитана либо из первого раздела (необходим для Microsoft Windows), либо с целого диска (необходим для Apple Mac OS X). См. Справочную страницу mkudffs 2.0 для более подробной информации.

0

NTFS, с NTFS-3G вы можете писать в него с помощью Linux и посмотреть http://macntfs-3g.blogspot.com/ для вашего Mac.

-1

Существуют драйверы для Windows (и Mac), которые могут обращаться к разделам EXT3, поэтому вы можете отформатировать его в EXT3 и использовать его (с драйверами) везде. Другой способ - использовать архиватор для хранения большого файла в двух или более файлах размером до 4 ГБ каждый. Таким образом, вы можете использовать файловую систему FAT32, которая является универсальной. На главном компьютере вы должны извлечь архив, чтобы использовать его, но это способ сделать это без драйверов. Используйте архиватор формата RAR, так как он работает в Windows, Linux, Mac, хотя я думаю, что формат ZIP также может работать. Но я бы пошел с водителями. После установки вы можете делать все что угодно без ограничений. В ПК я использовал Ext2Fsd для полного доступа EXT2, EXT3 и EXT4 и Macdrive для полного доступа в формате MacOS. Конечно, аналогичные инструменты существуют для Linux и MacOS, а также для полного доступа к разделам NTFS и т.д. Если вам нужен только доступ для чтения, вам не нужны драйверы, Linux и MacOS поддерживают чтение разделов NTFS, поэтому отформатируйте USB как NTFS! Если все эти компьютеры находятся в одной сети, все будет проще! Сделайте USB любого формата и поделитесь им в сети. Другие компьютеры не должны иметь проблем с доступом к нему!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .