Використання UDF на флеш-накопичувачі USB


75

Після того, як не вдалося скопіювати файл, більший за 4G, на мій флеш-диск 8G , я відформатував його як ext3. Хоча це для мене зараз добре працює, це спричинить проблеми, якщо я хочу використовувати його для копіювання файлів комусь, хто не використовує Linux.

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

Я хотів би знати:

  • Яку утиліту слід використовувати для створення файлової системи? (Поки що я знайшов mkudffsі genisoimage, mkudffsздається, найкращий варіант.)
  • Які параметри слід використовувати разом із вибраною утилітою для максимальної сумісності?
  • Наскільки сумісна з найбільш поширеними версіями цих трьох операційних систем UDF насправді?
  • Чи є використання UDF насправді найкращою ідеєю? Чи є інша файлова система, яка б мала кращу сумісність, без проблемних обмежень, таких як обмеження розміру файлів FAT32 4G, і без необхідності встановлювати спеціальні драйвери на кожному комп'ютері, який до нього торкається?

3
Питання, пов’язані з цим: serverfault.com/questions/55089/…
CesarB

Відповіді:


57

По-перше, я повністю занулював накопичувач перед створенням файлової системи 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сторінка man неправі; 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 - це гарна ідея.


1
як ви відформатували / розділили диск? Я застосував нульовий USB-накопичувач 32 Гб, використовуючи його dd if=/dev/zero of=/dev/sdb bs=1M, що залишає його без таблиці розділів.
ромеови

4
@romeovs: Я не розділив диск. У цьому вся суть нуля, щоб видалити таблицю розділів та залишки старої файлової системи та помістити файлову систему UDF у весь нерозподілений диск. Створення таблиці розділів ризикує лише заплутати речі.
CesarB

3
Не працював для мене із зовнішнім жорстким диском на 500 Гб SeaGate FreeAgent Desktop USB 2.0 (не впевнений, чи слід, оскільки ця тема стосується флеш-дисків). Windows 7 завжди показав накопичувач як "нерозподілений" у утиліті управління дисками. Я спробував кілька різних варіантів комбінацій.
Адам Монсен

2
Велике спасибі за подальші дії. Рідко, якщо не в перший раз, я бачу розумне запитання, на яке після декількох днів / тижнів тестування детально відповідає ОП. Чудова робота, дякую!
Люк

1
Дивіться також сценарій Pieter Wuille, який автоматизує процес створення UDF та робить таблицю розділів для кращої сумісності. Я розмістив це як альтернативне рішення .
долмен

7

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

Натхненний публікацією CesarB (та іншими моїми дослідженнями / тестуваннями), я написав сценарій для автоматизації процесу форматування в UDF - використовуючи правильно виявлений розмір сектора. Дивіться формат-udf на GitHub . Помітні функції:

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

Через останню точку цього сценарію, який я написав, не можна використовувати в Windows. Однак сценарій буде працювати в OS X та Linux. Після цього Windows повинна мати можливість чарівно виявити щойно відформатований привід UDF.

Щоб безпосередньо відповісти на розміщені запитання, format-udf:

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

1
Я переглянув вашу утиліту format-udf на Github, і у мене є одне питання щодо цього. Сценарій визначає фізичний розмір блоку накопичувача. Ви впевнені, що параметр Linux називає "розмір фізичного сектора (блоку)", а не "розмір логічного сектору" - правильний для використання? Фізичне та логічне може означати багато речей. Що hdparmназиває "Розмір логічного сектора" - це одиниця адресації, що використовується протоколом SATA, тоді як "Розмір фізичного сектора" - внутрішня річ приводу. Для мене більше сенсу, що "фізичні блоки" в специфікації UDF насправді означають "логічні блоки" Linux.
Йохан Мірен

ти на місці, @ JohanMyréen. Я запрошую вас приєднатися до дискусії на цю саму тему на GitHub. github.com/JElchison/format-udf/isissue/13 У наступному запитанні неминуча зміна очікує на додаткове тестування на Windows 7 та 10.
j0nam1el

1
формат-udf - це справді приємно. Щойно тестував його на Linux і міг читати / записувати відформатований диск на OS X та Windows 10.
mivk

Хоча можливість "працювати на будь-якій ОС з bash" має певну привабливість, було б навіть краще безпосередньо застосувати той самий підхід mkudffs; Я маю на увазі додавання нової --best-block-sizeопції до mkudffs.
MarcH

3

Я, мабуть, згадую, що зробив це, проблема, яку я виявила, полягає в тому, що версія Linux, яку я встановив, лише для читання, оскільки драйвер не був побудований для r / w. Він працював у Windows, і я думаю, що mac.

Так, хороше рішення знайти важко. Якийсь час у мене був зовнішній привід з розділом fat32, який мав драйвери для win та mac, mac-розділ та великий розділ ext3. Це спрацювало, але це означало встановлення драйверів. Акуратний трюк: він також був завантажуваним на mac (fw & usb), ви повинні залишити простір і зробити деякі нотатки, потім ви можете додати розділи через командний рядок і таблицю розділів mac.

Світ потребує безкоштовної, корисної для всіх файлової системи. ZFS був би приємним вибором. :-)


ZFS було б приємно мати, але бентежить багато людей. Це також трохи надмірне для зовнішніх медіа, ви не думаєте? Більше підходить для гігантських файлових серверів, з того, що я можу сказати.
Майк Купер,

2
Ну, ZFS перевіряє підбиття підсумків та відновлення помилок, що має багато сенсу для пластівців споживачів. :-D У наші дні ми зберігаємо достатньо, щоб бітова гниль зрештою з'їла щось (див. Дослідження Sun, яке зробило з питання, що призводить до ZFS, також відзначте невідкритий показник помилок для кодування на HD). Нам потрібен справжній фс, який може використовувати все, і 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). Дивіться mkudffs 2.0 man page на додатковій інформації.


0

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


4
Це, мабуть, включає додаткові драйвери для Mac.
Майк Купер,

Якщо він не хоче використовувати FAT, він застряг і NTFS-3G працює на Mac, йому вже потрібно те, що я пов’язав для запису.
користувач10547,

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 або формат і поділіться ним у мережі. Інші комп'ютери не повинні мати проблем з доступом до нього!


2
-1 бо відповідь навіть не згадує про АДС!
долмен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.