Sử dụng UDF trên ổ flash USB


75

Sau khi không sao chép một tệp lớn hơn 4G vào ổ flash USB 8G của mình , tôi đã định dạng nó là ext3. Mặc dù điều này vẫn hoạt động tốt với tôi cho đến nay, nó sẽ gây ra vấn đề nếu tôi muốn sử dụng nó để sao chép các tệp vào một người không sử dụng Linux.

Tôi đang nghĩ đến việc định dạng nó dưới dạng UDF , mà tôi hy vọng sẽ cho phép nó được đọc (và thậm chí có thể được viết) trên ba hệ điều hành phổ biến nhất (Windows, MacOS và Linux) mà không phải cài đặt thêm trình điều khiển nào . Tuy nhiên, từ những gì tôi tìm thấy trên web, dường như có một số vấn đề nhỏ liên quan đến thông số nào được sử dụng để tạo hệ thống tệp, có thể làm giảm khả năng tương thích (nhưng hầu hết các trang tôi tìm thấy là về phương tiện quang học, không phải flash USB ổ đĩa).

Tôi muốn biết:

  • Tôi nên sử dụng tiện ích nào để tạo hệ thống tập tin? (Cho đến nay tôi đã tìm thấy mkudffsgenisoimage, và mkudffsdường như là lựa chọn tốt nhất.)
  • Tôi nên sử dụng tham số nào với tiện ích đã chọn để có khả năng tương thích tối đa?
  • Tương thích với các phiên bản phổ biến nhất của ba hệ điều hành UDF này thực sự như thế nào?
  • Là sử dụng UDF thực sự là ý tưởng tốt nhất? Có một hệ thống tệp nào khác có khả năng tương thích tốt hơn, không có giới hạn có vấn đề như giới hạn kích thước tệp 4G3232 và không phải cài đặt trình điều khiển đặc biệt trong mỗi máy tính chạm vào nó?

Câu trả lời:


57

Đầu tiên, tôi xóa hoàn toàn ổ đĩa trước khi tạo hệ thống tập tin UDF với:

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

Điều này là để tránh mọi siêu khóa còn sót lại hoặc siêu dữ liệu khác có thể gây nhầm lẫn cho việc phát hiện loại hệ thống tệp của hệ điều hành (ít nhất là không cần cung cấp khu vực đầu tiên, để xóa bảng phân vùng; một số lĩnh vực đầu tiên không được UDF sử dụng và còn lại bảng phân vùng thực sự có thể gây nhầm lẫn mọi thứ). Bạn cũng có thể sử dụng công count=1tắc trên lệnh dd, để nhanh hơn 0 chỉ 512 byte đầu tiên của ổ đĩa (nơi MBR thường được đặt trong), mặc dù điều này không được kiểm tra.

Để tạo hệ thống tập tin, lệnh tôi đã sử dụng là:

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

mkudffslệnh sẽ có sẵn trên các bản phân phối Linux dựa trên Debian (chẳng hạn như Ubuntu) sau khi cài đặt udftoolsgói:

sudo apt-get install udftools

Kích thước khối mặc định mkudffslà 2048, sai đối với ổ flash USB (sử dụng các cung từ 512 byte). Vì kích thước khối được sử dụng để tìm siêu dữ liệu hệ thống tệp, sử dụng kích thước khối sai có thể khiến nó không được nhận dạng là hệ thống tệp UDF (vì neo sẽ không phải là nơi trình điều khiển hệ thống tệp đang mong đợi). Lưu ý rằng mkudffstrang man là sai; 512 là một giá trị hợp lệ cho kích thước khối (và mã chấp nhận nó một cách rõ ràng).

Tôi cũng đã sử dụng toàn bộ ổ đĩa thay vì phân vùng; cái này nên tương thích hơn

Kết quả thử nghiệm của tôi cho đến nay:

  • Linux với kernel gần đây nhất (2.6.31, từ Ubuntu 9.10): hoạt động.
  • Linux với kernel cũ hơn: cần bs=512tùy chọn này mount, vì nó sử dụng không chính xác 2048 thay vì kích thước cung của thiết bị (được sửa trong cam kết 1197e4d ).
  • Windows Vista: hoạt động.
  • Một máy Mac hoàn toàn mới: hoạt động.
  • Windows XP: có thể đọc tốt, nhưng cung cấp "quyền truy cập bị từ chối" khi cố gắng viết; dường như cũng nghĩ rằng đĩa đã đầy.

Mặc dù cho đến nay tôi chưa thử tạo một tệp lớn hơn 4G, nhưng tôi không thấy lý do gì nó không hoạt động.

Cho rằng nó hoạt động hoàn hảo trên tất cả các hệ điều hành gần đây (chỉ phải cài đặt thủ công trên Linux, điều này sẽ không còn cần thiết nữa ngay khi Ubuntu 9.10 và Fedora 12 không hoạt động) và chỉ hoạt động trong Windows XP (điều này thật bất ngờ Đối với tôi, tôi đã hy vọng nó hoàn toàn không nhận ra hệ thống tập tin), sử dụng UDF thay vì FAT32 hoặc NTFS trong các ổ flash USB lớn có vẻ là một ý tưởng tốt.


1
Làm thế nào bạn định dạng / phân vùng ổ đĩa? Tôi đã sử dụng ổ USB 32 GB bằng cách sử dụng dd if=/dev/zero of=/dev/sdb bs=1M, không để lại bất kỳ bảng phân vùng nào.
romeovs

4
@romeovs: Tôi không phân vùng ổ đĩa. Đó là toàn bộ vấn đề của nó, để loại bỏ bảng phân vùng và phần còn lại của hệ thống tệp cũ và đặt hệ thống tệp UDF trong toàn bộ ổ đĩa không liên kết. Tạo một bảng phân vùng sẽ chỉ có nguy cơ những điều khó hiểu.
CesarB

3
Không hoạt động với tôi với ổ cứng gắn ngoài USB 2.0 SeaGate FreeAgent Desktop USB 2.0 (không chắc có nên vì chủ đề này là về các ổ Flash). Windows 7 luôn hiển thị ổ đĩa là "chưa được phân bổ" trong tiện ích Quản lý đĩa. Tôi đã thử một số kết hợp tùy chọn khác nhau.
Adam Monsen

2
Cảm ơn rất nhiều vì đã theo dõi. Thật hiếm khi, lần đầu tiên, tôi thấy một câu hỏi thông minh sau đó được OP trả lời công phu sau vài ngày / tuần thử nghiệm. Tuyệt vời, cảm ơn!
Lục

1
Xem thêm tập lệnh từ Pieter Wuille tự động hóa quá trình tạo UDF và tạo bảng phân vùng để tương thích tốt hơn. Tôi đăng nó như là một giải pháp thay thế .
heo

7

CesarB đã làm một công việc tuyệt vời để đi đến mấu chốt của vấn đề. Một điều không thể nhấn mạnh đủ là tầm quan trọng của việc sử dụng kích thước khối phù hợp khi định dạng UDF.

Lấy cảm hứng từ bài đăng của CesarB (và nghiên cứu / thử nghiệm khác của tôi), tôi đã viết một tập lệnh để tự động hóa quá trình định dạng trong UDF - sử dụng kích thước khu vực được phát hiện đúng. Xem định dạng-udf trên GitHub . Các tính năng đáng chú ý:

  • Định dạng ổ đĩa khối (ổ cứng hoặc ổ Flash) ở Định dạng đĩa chung (UDF)
    • Bản sửa đổi UDF 2.01 được sử dụng để tương thích tối đa
    • 4096 lĩnh vực đầu tiên được loại bỏ để xóa mọi MBR hiện có (cần thiết để phát hiện UDF thích hợp)
  • Hệ thống tệp kết quả có thể được đọc / ghi trên nhiều họ hệ điều hành (Windows, OS X và Linux)
  • Chạy trên mọi hệ điều hành có môi trường Bash

Vì điểm cuối cùng, tập lệnh này tôi viết không thể được sử dụng trên Windows. Tuy nhiên, tập lệnh sẽ chạy trên OS X và Linux. Sau khi làm như vậy, Windows sẽ có thể phát hiện một cách kỳ diệu ổ đĩa UDF mới được định dạng.

Để trả lời trực tiếp các câu hỏi được đăng, format-udf sẽ:

  • chọn công cụ thích hợp để định dạng dựa trên hệ điều hành và môi trường
  • tự động phát hiện và điền vào tất cả các tham số cần thiết để định dạng
  • tối đa hóa khả năng tương thích hệ điều hành (xem trang GitHub để biết biểu đồ tương thích)
  • mang lại bộ tính năng tối đa (và giới hạn tối thiểu) mà người hỏi đang tìm kiếm

1
Tôi đã xem qua tiện ích định dạng udf của bạn trên Github và tôi có một câu hỏi về nó. Kịch bản phát hiện kích thước khối vật lý của ổ đĩa. Bạn có chắc rằng tham số Linux gọi là "kích thước khối vật lý (khối)" và không phải "kích thước vùng logic" là chính xác để sử dụng không? Vật lý và logic có thể có nghĩa là rất nhiều thứ. Cái hdparmgọi là "Kích thước khu vực logic" là đơn vị địa chỉ được sử dụng bởi giao thức SATA, trong khi "Kích thước khu vực vật lý" là một thứ bên trong ổ đĩa. Đối với tôi, điều có ý nghĩa hơn là "các khối vật lý" trong thông số UDF thực sự có nghĩa là "các khối logic" của Linux.
Johan Myréen

bạn là người sáng lập, @ JohanMyréen. tôi mời bạn tham gia thảo luận về chính chủ đề này trên GitHub. github.com/JElchison/format-udf/issues/13 Có một sự thay đổi sắp xảy ra dọc theo dòng câu hỏi của bạn, đang chờ thử nghiệm bổ sung trên Windows 7 và 10.
j0nam1el

1
định dạng-udf là thực sự tốt đẹp. Chỉ cần thử nghiệm nó trên Linux và có thể đọc / ghi ổ đĩa được định dạng trên OS X và trên Windows 10.
mivk

Mặc dù khả năng "chạy trên bất kỳ HĐH nào có bash" có một số hấp dẫn, nhưng sẽ tốt hơn nếu thực hiện mkudffstrực tiếp cách tiếp cận tương tự ; Tôi có nghĩa là thêm một số --best-block-sizetùy chọn mới để mkudffs.
MarcH

3

Tôi dường như nhớ lại đã làm điều đó, vấn đề tôi tìm thấy là phiên bản linux tôi đã gắn nó chỉ đọc, vì trình điều khiển chưa được xây dựng cho r / w. Nó đã làm việc trong các cửa sổ, và tôi nghĩ mac.

Vâng, một giải pháp tốt là khó tìm. Trong một thời gian, tôi có một ổ đĩa ngoài với phân vùng fat32 có trình điều khiển cho win và mac, phân vùng mac và phân vùng ext3 lớn. Nó đã làm việc, nhưng nó có nghĩa là cài đặt trình điều khiển. Thủ thuật gọn gàng là nó cũng có khả năng khởi động trên máy mac (fw & usb), bạn phải để lại dung lượng và ghi chú, sau đó bạn có thể thêm phân vùng qua dòng lệnh và bảng phân vùng mac.

Thế giới cần một hệ thống tập tin miễn phí, có thể sử dụng được. ZFS sẽ là một lựa chọn tốt. :-)


ZFS sẽ là tốt để có, nhưng sẽ gây nhầm lẫn cho nhiều người. Nó cũng là một chút quá mức cho phương tiện truyền thông bên ngoài, bạn có nghĩ vậy không? Phù hợp hơn cho các máy chủ tệp khổng lồ, từ những gì tôi có thể nói.
Mike Cooper

2
Chà, ZFS không kiểm tra tính tổng và khôi phục lỗi, điều này rất có ý nghĩa đối với các công cụ tiêu dùng không ổn định. :-D Tất cả chúng ta đều lưu trữ đủ trong những ngày này rằng bit rot cuối cùng sẽ ăn thứ gì đó (xem nghiên cứu mà Sun đã làm về vấn đề dẫn đến ZFS, cũng lưu ý tỷ lệ lỗi không bị phát hiện khi mã hóa trên HD). Chúng tôi cần một fs thực sự mà mọi thứ đều có thể sử dụng, và fatX thì không. Không có ở đây, thực sự.
Ronald Pottol

ZFS không hoạt động trong Linux
Ignis


1

Để đạt được khả năng tương thích tối đa, bạn nên sử dụng mkudffs từ dự án udftools ít nhất là trong phiên bản 2.0. Không có thông số đặc biệt là cần thiết, mọi thứ đều được tự động phát hiện.

Có 3 hạn chế lớn:

  1. Các hệ thống Microsoft Windows không nhận ra đĩa cứng không thể tháo rời nếu nó không có bảng phân vùng MBR hoặc GPT.

  2. Các hệ thống Apple Mac OS X không nhận ra hệ thống tệp UDF trên đĩa được phân vùng.

  3. Có lẽ tất cả các hệ thống (trừ các nhân Linux gần đây) không nhận ra hệ thống tệp UDF nếu kích thước khối UDF không khớp với kích thước khu vực logic của đĩa.

Công cụ mkudffs kể từ phiên bản 2.0 xử lý cả 3 hạn chế. Khi định dạng các đĩa cứng không thể tháo rời, nó tạo bảng MBR "giả" bắt đầu từ sector 0 và kéo dài toàn bộ đĩa. Vì vậy, hệ thống tệp UDF có thể được đọc từ phân vùng đầu tiên (cần thiết cho Microsoft Windows) hoặc từ toàn bộ đĩa (cần thiết cho Apple Mac OS X). Xem trang man mkudffs 2.0 để biết thêm chi tiết.


0

NTFS, với NTFS-3G, bạn có thể ghi vào nó bằng Linux và xem http://macntfs-3g.blogspot.com/ cho máy Mac của bạn.


4
Điều này dường như liên quan đến trình điều khiển bổ sung cho Mac.
Mike Cooper

Nếu anh ta không muốn sử dụng FAT, anh ta bị kẹt và NTFS-3G hoạt động trên Mac, anh ta cần những gì tôi liên kết để ghi.
dùng10547

4
Một vấn đề nhỏ là nó không phải là máy Mac của tôi . Tôi thà không phải cài đặt trình điều khiển trong máy tính của người khác.
CesarB

-1

Có các trình điều khiển cho Windows (và Mac) có thể truy cập các phân vùng EXT3, vì vậy bạn có thể định dạng nó thành EXT3 và sử dụng nó (với trình điều khiển) ở mọi nơi. Một cách khác là sử dụng một archiever để lưu trữ tệp lớn trong hai hoặc nhiều tệp lên đến 4GB mỗi tệp. Bằng cách này, bạn có thể sử dụng hệ thống tập tin FAT32 là phổ quát. Trên máy tính chủ, bạn phải trích xuất kho lưu trữ để sử dụng nó, nhưng đó là cách để làm điều đó mà không cần trình điều khiển. Sử dụng trình lưu trữ định dạng RAR vì nó hoạt động trên Windows, Linux, Mac, mặc dù tôi nghĩ rằng định dạng ZIP cũng có thể hoạt động. Nhưng tôi sẽ đi với các trình điều khiển. Sau khi cài đặt, bạn có thể làm bất cứ điều gì mà không bị hạn chế. Trong PC, tôi đã sử dụng Ext2Fsd để truy cập đầy đủ EXT2, EXT3 và EXT4 và Macdrive để truy cập định dạng MacOS đầy đủ. Chắc chắn các công cụ tương tự tồn tại cho Linux và MacOS cũng như truy cập đầy đủ các phân vùng NTFS, v.v. Nếu bạn chỉ cần truy cập đọc, bạn không cần bất kỳ trình điều khiển nào, Linux và MacOS hỗ trợ đọc phân vùng NTFS, vì vậy hãy định dạng USB thành NTFS! Nếu tất cả các máy tính này ở cùng một mạng, mọi thứ sẽ dễ dàng hơn! Tạo USB hoặc định dạng và chia sẻ nó trên mạng. Các máy tính khác không nên có vấn đề khi truy cập nó!


2
-1 vì câu trả lời thậm chí không đề cập đến UDF!
heo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.