Использование UDF на флешке

76

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

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

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

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

Ответы:

58

Во-первых, я полностью обнулил диск перед созданием файловой системы 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

Размер блока по умолчанию для mkudffs2048, что неправильно для флэш-накопителя 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-флешках кажется хорошей идеей.

CesarB
источник
1
как вы форматировали / разбивали диск? Я обнул свой 32-гигабайтный USB-накопитель dd if=/dev/zero of=/dev/sdb bs=1M, что оставляет его без таблицы разделов.
romeovs
4
@romeovs: я не разделил диск. В этом весь смысл его обнуления, удаления таблицы разделов и старых остатков файловой системы и помещения файловой системы UDF во весь неразмеченный диск. Создание таблицы разделов может привести к путанице.
CesarB
3
У меня не работал внешний жесткий диск SeaGate FreeAgent Desktop USB 2.0 емкостью 500 ГБ (не уверен, должен ли он, так как эта тема посвящена флэш-накопителям). Windows 7 всегда показывала диск как «нераспределенный» в утилите «Управление дисками». Я пробовал несколько разных комбинаций вариантов.
Адам Монсен
2
Большое спасибо за продолжение. Редко, если не в первый раз, я вижу умный вопрос, на который затем детально отвечает ОП после нескольких дней / недель тестирования. Отличная работа, спасибо!
Люк
1
См. Также сценарий от Питера Вуйля, который автоматизирует процесс создания UDF и создает таблицу разделов для лучшей совместимости. Я разместил это как альтернативное решение .
дольмен
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 для таблицы совместимости)
  • получить максимальный набор функций (и минимальные ограничения), которые ищет запрашивающий
j0nam1el
источник
1
Я взглянул на вашу утилиту format-udf на Github, и у меня есть один вопрос по этому поводу. Скрипт определяет размер физического блока накопителя. Вы уверены, что параметр Linux называет «размер физического сектора (блока)», а не «размер логического сектора», является правильным для использования? Физическое и логическое может означать много вещей. То, что hdparmназывает «Размер логического сектора», является единицей адресации, используемой протоколом SATA, тогда как «Размер физического сектора» является внутренней составляющей диска. Для меня более логично, что «физические блоки» в спецификации UDF действительно означают «логические блоки» Linux.
Йохан Мирен
ты на месте, @ JohanMyréen. Я приглашаю вас присоединиться к обсуждению этой темы на GitHub. github.com/JElchison/format-udf/issues/13 Существует неизбежное изменение в соответствии с вашим вопросом в ожидании дополнительного тестирования в Windows 7 и 10.
j0nam1el
1
format-udf действительно хорош. Только что протестировал его в Linux и мог читать / записывать отформатированный диск в OS X и Windows 10.
mivk
Хотя возможность «работать на любой ОС с bash» имеет некоторую привлекательность, было бы еще лучше реализовать тот же подход mkudffsнапрямую; Я имею в виду добавление новой --best-block-sizeопции в mkudffs.
МАРТ
3

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

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

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

Рональд Поттол
источник
ZFS было бы неплохо иметь, но многих людей смутило бы. Это также немного излишне для внешних СМИ, не так ли? Больше подходит для гигантских файловых серверов, насколько я могу судить.
Майк Купер
2
Что ж, ZFS проверяет суммирование и исправление ошибок, что имеет большой смысл для нестабильных потребительских вещей. :-D В наши дни мы все храним достаточно, чтобы в конечном итоге что-нибудь съесть гниль (см. Исследование, проведенное Sun по проблеме, которая ведет к ZFS, также обратите внимание на необнаруженную частоту ошибок при кодировании на HD). Нам нужны настоящие fs, которые могут использовать все, а fatX не так ли. Еще не здесь, правда.
Рональд Поттол
ZFS не работает в Linux
ignis
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). Смотрите man-страницу mkudffs 2.0 для более подробной информации.

пали
источник
0

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

user10547
источник
4
Кажется, это связано с дополнительными драйверами для Mac.
Майк Купер
Если он не хочет использовать FAT, он застревает, и NTFS-3G уже работает на Mac, ему нужно то, что я связал для записи.
user10547 12.09.09
4
Одна небольшая проблема заключается в том, что это не мой Mac. Я бы предпочел не устанавливать драйвер на компьютеры других людей.
CesarB
-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 любого формата и поделитесь им в сети. Другие компьютеры не должны иметь проблем с доступом к нему!

spapakons
источник
2
-1 потому что в ответе даже не упоминается UDF!
Дольмен