Używanie UDF na dysku flash USB

75

Po nie skopiowaniu pliku większego niż 4G na mój dysk flash USB 8G sformatowałem go jako ext3. Chociaż do tej pory działa mi to dobrze, spowoduje to problemy, jeśli chcę go użyć do skopiowania plików do osoby, która nie korzysta z systemu Linux.

Zastanawiam się nad sformatowaniem go jako UDF , co, mam nadzieję, pozwoliłoby na odczyt (a być może nawet zapisanie) na trzech najpopularniejszych systemach operacyjnych (Windows, MacOS i Linux), bez konieczności instalowania dodatkowych sterowników . Jednak z tego, co już znalazłem w Internecie, wydaje się, że istnieje kilka małych problemów związanych z parametrami, które są używane do utworzenia systemu plików, co może zmniejszyć kompatybilność (ale większość stron, które znalazłem, dotyczą nośników optycznych, a nie pamięci flash USB dyski).

Chciałbym wiedzieć:

  • Jakiego narzędzia należy użyć do utworzenia systemu plików? (Do tej pory znalazłem mkudffsi genisoimage, i mkudffswydaje się być najlepszym rozwiązaniem.)
  • Których parametrów należy używać z wybranym narzędziem, aby uzyskać maksymalną kompatybilność?
  • Jaka jest zgodność z najpopularniejszymi wersjami tych trzech systemów operacyjnych UDF?
  • Czy używanie UDF jest rzeczywiście najlepszym pomysłem? Czy istnieje inny system plików, który miałby lepszą kompatybilność bez żadnych problematycznych ograniczeń, taki jak limit rozmiaru pliku FAT32 4G i bez konieczności instalowania specjalnych sterowników na każdym komputerze, który go dotknie?
CesarB
źródło
3
Powiązane pytanie: serverfault.com/questions/55089/…
CesarB

Odpowiedzi:

57

Najpierw całkowicie wyzerowałem dysk przed utworzeniem systemu plików UDF za pomocą:

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

Ma to na celu uniknięcie resztek superbloków lub innych metadanych, które mogłyby mylić wykrywanie systemu plików w systemie operacyjnym (co najmniej konieczne powinno być zerowanie pierwszego sektora, aby usunąć tablicę partycji; kilka pierwszych sektorów nie jest używanych przez UDF, a resztki tablica partycji może naprawdę mylić rzeczy). Możesz także użyć count=1przełącznika na komendzie dd, aby szybciej zerować tylko pierwsze 512 bajtów dysku (gdzie MBR zwykle znajduje się w środku), chociaż nie zostało to przetestowane.

Aby utworzyć system plików, użyłem polecenia:

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

mkudffspolecenie będzie dostępne na dystrybucjach Linuksa opartych na Debianie (takich jak Ubuntu) po zainstalowaniu udftoolspakietu:

sudo apt-get install udftools

Domyślną blocksize za mkudffsto 2048, co jest złe dla napędu flash USB (który używa 512-bajtowych sektorów). Ponieważ rozmiar bloku jest używany do znajdowania metadanych systemu plików, użycie niewłaściwego rozmiaru bloku może spowodować, że nie zostanie on rozpoznany jako system plików UDF (ponieważ kotwica nie będzie tam, gdzie oczekuje sterownik systemu plików). Zauważ, że mkudffsstrona podręcznika jest niepoprawna; 512 jest prawidłową wartością rozmiaru bloku (a kod wyraźnie ją akceptuje).

Użyłem również całego dysku zamiast partycji; powinno to być bardziej kompatybilne.

Wynik moich dotychczasowych testów:

  • Linux z najnowszym jądrem (2.6.31, z Ubuntu 9.10): działa.
  • Linux ze starszym jądrem: potrzebuje takiej bs=512opcji mount, ponieważ niepoprawnie używał 2048 zamiast rozmiaru sektora urządzenia (naprawiono w zatwierdzeniu 1197e4d ).
  • Windows Vista: działa.
  • Zupełnie nowy Mac: działa.
  • Windows XP: umie czytać dobrze, ale daje „odmowę dostępu” podczas próby zapisu; Wydaje się również, że dysk jest pełny.

Chociaż do tej pory nie próbowałem utworzyć w nim pliku większego niż 4G, nie widzę powodu, dla którego nie miałby działać.

Biorąc pod uwagę, że działał doskonale na wszystkich najnowszych systemach operacyjnych (tylko do ręcznego montowania w systemie Linux, co nie będzie już potrzebne, gdy tylko Ubuntu 9.10 i Fedora 12 będą dostępne), i działał tylko do odczytu w Windows XP (co było zaskoczeniem dla mnie; spodziewałem się, że w ogóle nie rozpozna systemu plików), użycie UDF zamiast FAT32 lub NTFS w dużych dyskach flash USB wydaje się dobrym pomysłem.

CesarB
źródło
1
jak sformatowałeś / podzieliłeś dysk na partycje? Wyzerowałem mój dysk USB o pojemności 32 GB, używając dd if=/dev/zero of=/dev/sdb bs=1M, co pozostawia go bez tablicy partycji.
romeovs
4
@romeovs: Nie podzieliłem dysku na partycje. Taki jest cel zerowania go, aby usunąć tablicę partycji i resztki starego systemu plików i umieścić system plików UDF na całym niepartycjonowanym dysku. Utworzenie tablicy partycji ryzykowałoby jedynie myleniem rzeczy.
CesarB
3
Nie działało dla mnie z zewnętrznym dyskiem twardym SeaGate FreeAgent Desktop USB 2.0 o pojemności 500 GB (nie jestem pewien, czy tak powinno być, ponieważ ten wątek dotyczy dysków Flash). Windows 7 zawsze pokazywał dysk jako „nieprzydzielony” w narzędziu Zarządzanie dyskami. Wypróbowałem kilka różnych kombinacji opcji.
Adam Monsen,
2
Wielkie dzięki za kontynuację. Rzadko, jeśli nie za pierwszym razem, widzę sprytne pytanie, na które następnie OP szczegółowo odpowiada po kilku dniach / tygodniach testowania. Świetna robota, dzięki!
Luc
1
Zobacz także skrypt Pietera Wuille, który automatyzuje proces tworzenia UDF i tworzy tablicę partycji dla lepszej kompatybilności. Opublikowałem to jako alternatywne rozwiązanie .
dolmen
7

CesarB wykonał świetną robotę, docierając do sedna problemu. Jedną z rzeczy, których nie można wystarczająco podkreślić, jest to, jak ważne jest użycie odpowiedniego rozmiaru bloku podczas formatowania UDF.

Zainspirowany postem CesarB (i innymi badaniami / testami) napisałem skrypt automatyzujący proces formatowania w UDF - przy użyciu odpowiednio wykrytego rozmiaru sektora. Zobacz format-udf na GitHub . Ważne funkcje:

  • Formatuje dysk blokowy (dysk twardy lub dysk Flash) w Universal Disk Format (UDF)
    • Wersja UDF 2.01 stosowana dla maksymalnej kompatybilności
    • Pierwsze 4096 sektorów jest zerowanych, aby usunąć istniejący MBR (niezbędny do prawidłowego wykrywania UDF)
  • Powstały system plików można odczytać / zapisać w wielu rodzinach systemów operacyjnych (Windows, OS X i Linux)
  • Działa na każdym systemie operacyjnym posiadającym środowisko Bash

Z powodu ostatniego punktu tego skryptu, który napisałem, nie można używać w systemie Windows. Jednak skrypt będzie działał w systemach OS X i Linux. Po wykonaniu tej czynności system Windows powinien być w stanie magicznie wykryć nowo sformatowany dysk UDF.

Aby bezpośrednio odpowiedzieć na zadane pytania, format-udf:

  • wybierz odpowiednie narzędzie do formatowania w oparciu o system operacyjny i środowisko
  • automatycznie wykrywa i wypełnia wszystkie parametry niezbędne do formatowania
  • zmaksymalizuj kompatybilność systemu operacyjnego (zobacz tabelę kompatybilności na stronie GitHub)
  • dają maksymalny zestaw funkcji (i minimalne ograniczenia), których szuka pytający
j0nam1el
źródło
1
Rzuciłem okiem na twoje narzędzie format-udf na Github i mam jedno pytanie na ten temat. Skrypt wykrywa rozmiar fizycznego bloku dysku. Czy jesteś pewien, że parametr Linux nazywa „rozmiar sektora fizycznego (bloku)”, a nie „rozmiar sektora logicznego”, jest właściwy? Fizyczne i logiczne mogą oznaczać wiele rzeczy. To, co hdparmnazywa się „logicznym rozmiarem sektora”, to jednostka adresowania używana przez protokół SATA, podczas gdy „fizyczny rozmiar sektora” jest wewnętrzną sprawą napędu. Dla mnie bardziej sensowne jest to, że „bloki fizyczne” w specyfikacji UDF naprawdę oznaczają „bloki logiczne” Linuksa.
Johan Myréen
jesteś na miejscu, @ JohanMyréen. Zapraszam do przyłączenia się do dyskusji na ten temat na GitHub. github.com/JElchison/format-udf/issues/13 Nadchodzi nieuchronna zmiana zgodna z twoim pytaniem, w oczekiwaniu na dodatkowe testy w Windows 7 i 10.
j0nam1el
1
format-udf jest naprawdę fajny. Właśnie przetestowałem go w systemie Linux i mógł odczytać / zapisać sformatowany dysk w systemie OS X i Windows 10.
mivk
Chociaż zdolność do „uruchamiania na dowolnym systemie operacyjnym z bash” ma jakiś urok, jeszcze lepiej byłoby wdrożyć to samo podejście mkudffsbezpośrednio; Mam na myśli dodanie nowej --best-block-sizeopcji do mkudffs.
MarcH
3

Wydaje mi się, że pamiętam, że to zrobiłem, problem, który znalazłem, polega na tym, że wersja Linuksa zainstalowałem ją tylko do odczytu, ponieważ sterownik nie został zbudowany dla r / w. Działa w systemie Windows i myślę, że Mac.

Tak, trudno znaleźć dobre rozwiązanie. Przez jakiś czas miałem zewnętrzny dysk z partycją fat32, która miała sterowniki dla Win i Mac, partycję Mac i dużą partycję ext3. Działało, ale oznaczało instalację sterowników. Ciekawą sztuczką było to, że był również bootowalny na komputerze Mac (fw i usb), musisz zostawić miejsce i zrobić notatki, a następnie możesz dodać partycje za pomocą wiersza poleceń i tablicy partycji Mac.

Świat potrzebuje darmowego, uniwersalnego systemu plików. ZFS byłby dobrym wyborem. :-)

Ronald Pottol
źródło
ZFS byłoby miło mieć, ale dezorientowałoby wiele osób. To trochę przesada w przypadku mediów zewnętrznych, nie sądzisz? Z tego, co mogę powiedzieć, bardziej nadaje się do gigantycznych serwerów plików.
Mike Cooper
2
Cóż, ZFS sprawdza sumowanie i odzyskiwanie błędów, co ma sens w przypadku niestabilnych rzeczy konsumenckich. :-D Wszyscy teraz przechowujemy wystarczająco dużo, aby zgnilizna nieco zjadła coś w końcu (patrz badanie przeprowadzone przez Sun w sprawie, która doprowadziła do ZFS, zwróć również uwagę na niewykrywalny poziom błędów kodowania na HD). Potrzebujemy prawdziwego fs, z którego wszystko może korzystać, a FatX nie jest. Naprawdę jeszcze nie tutaj.
Ronald Pottol,
ZFS nie działa w systemie Linux
ignis
2

Pieter Wuille napisał narzędzie do partycjonowania i formatowania dysku w celu utworzenia układu UDF, który będzie zgodny zarówno z Windows (> = Vista, tylko do odczytu dla XP), MacOS X 10.5, Linux 2.6.30+:

Alternatywnie:

dolmen
źródło
1

Aby osiągnąć maksymalną kompatybilność, powinieneś używać mkudffs z projektu udftools przynajmniej w wersji 2.0. Nie są wymagane żadne specjalne parametry, wszystko jest automatycznie wykrywane.

Istnieją 3 duże ograniczenia:

  1. Systemy Microsoft Windows nie rozpoznają niewymiennego dysku twardego, jeśli nie ma on tablicy partycji MBR lub GPT.

  2. Systemy Apple Mac OS X nie rozpoznają systemu plików UDF na partycjonowanym dysku.

  3. Prawdopodobnie wszystkie systemy (oprócz najnowszych jąder Linuksa) nie rozpoznają systemu plików UDF, jeśli rozmiar bloku UDF nie odpowiada rozmiarowi sektora logicznego dysku.

Narzędzie mkudffs od wersji 2.0 obsługuje wszystkie 3 ograniczenia. Podczas formatowania niewymiennych dysków twardych tworzy „fałszywą” tabelę MBR, która rozpoczyna się w sektorze 0 i obejmuje cały dysk. Tak więc system plików UDF można odczytać z pierwszej partycji (wymagany w systemie Microsoft Windows) lub z całego dysku (wymagany w systemie Apple Mac OS X). Więcej informacji na stronie podręcznika użytkownika mkudffs 2.0.

Pali
źródło
0

NTFS, z NTFS-3G możesz pisać do niego za pomocą Linuksa i spojrzeć na http://macntfs-3g.blogspot.com/ dla twojego Maca.

użytkownik10547
źródło
4
Wydaje się, że dotyczy to dodatkowych sterowników dla komputerów Mac.
Mike Cooper
Jeśli nie chce korzystać z FAT, utknął, a NTFS-3G działa na Macu, potrzebuje już tego, co połączyłem do pisania.
user10547
4
Jednym drobnym problemem jest to, że nie jest to mój Mac. Wolałbym nie instalować sterownika na komputerach innych ludzi.
CesarB
-1

Istnieją sterowniki dla systemu Windows (i Mac), które mogą uzyskać dostęp do partycji EXT3, dzięki czemu można sformatować go w EXT3 i używać go (ze sterownikami) w dowolnym miejscu. Innym sposobem byłoby użycie archiwizatora do przechowywania dużego pliku w dwóch lub więcej plikach do 4 GB każdy. W ten sposób możesz korzystać z systemu plików FAT32, który jest uniwersalny. Na komputerze hosta musisz rozpakować archiwum, aby z niego skorzystać, ale jest to sposób na zrobienie tego bez sterowników. Użyj archiwizatora w formacie RAR, ponieważ działa on na systemach Windows, Linux i Mac, chociaż myślę, że format ZIP mógłby również działać. Ale poszedłbym z kierowcami. Po zainstalowaniu możesz zrobić wszystko bez ograniczeń. W komputerze użyłem Ext2Fsd dla pełnego dostępu EXT2, EXT3 i EXT4 oraz Macdrive dla pełnego dostępu do formatu MacOS. Z pewnością istnieją podobne narzędzia dla systemów Linux i MacOS, aby uzyskać pełny dostęp do partycji NTFS itp. Jeśli potrzebujesz tylko dostępu do odczytu, nie potrzebujesz żadnych sterowników, Linux i MacOS obsługują czytanie partycji NTFS, więc sformatuj USB jako NTFS! Jeśli wszystkie te komputery są w tej samej sieci, wszystko jest łatwiejsze! Utwórz format USB i udostępnij go w sieci. Inne komputery nie powinny mieć problemu z dostępem do niego!

spapakons
źródło
2
-1, ponieważ odpowiedź nawet nie wspomina o UDF!
dolmen