在USB闪存驱动器上使用UDF


75

无法将大于4G的文件复制到8G USB闪存驱动器后,我将其格式化为ext3。到目前为止,这对我来说还算不错,但是如果我想使用它来将文件复制到不使用Linux的用户上,则会造成问题。

我正在考虑将其格式化为UDF,希望该格式可以在三种最流行的操作系统(Windows,MacOS和Linux)上读取(甚至可以编写),而不必安装任何其他驱动程序。但是,从我已经在网上找到的东西来看,似乎存在一些小陷阱,这些小陷阱与用于创建文件系统的参数有关,这会降低兼容​​性(但是我发现的大多数页面都是关于光学介质,而不是USB闪存)驱动器)。

我想知道:

  • 我应该使用哪个实用程序来创建文件系统?(到目前为止,我已经找到mkudffsgenisoimage,这mkudffs似乎是最好的选择。)
  • 我应该与所选实用程序一起使用哪些参数以获得最大的兼容性?
  • 实际上与这三个UDF操作系统的最通用版本兼容吗?
  • 使用UDF实际上是最好的主意吗?是否有另一个文件系统具有更好的兼容性,并且没有像FAT32 4G文件大小限制这样的问题限制,并且不必在每台与之接触的计算机上都安装特殊的驱动程序?

Answers:


56

首先,在创建UDF文件系统之前,我将驱动器完全清零:

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

这是为了避免可能会混淆操作系统文件系统类型检测的任何剩余超级块或其他元数据(至少需要将第一个扇区清零以消除分区表; UDF不使用前几个扇区,而剩余一个分区表可能确实使事情变得混乱)。您也可以使用count=1dd命令上的开关,以便将驱动器的前512个字节(通常位于MBR所在的位置)更快速地归零,尽管这未经测试。

要创建文件系统,我使用的命令是:

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

mkudffs安装udftools软件包后,该命令将在基于Debian的Linux发行版(例如Ubuntu)上可用:

sudo apt-get install udftools

默认的块大小为mkudffs2048,这对于USB闪存驱动器(使用512字节的扇区)是错误的。由于块大小用于查找文件系统元数据,因此使用错误的块大小可能无法将其识别为UDF文件系统(因为锚点将不在文件系统驱动程序所期望的位置)。注意mkudffs手册页是错误的。512是块大小的有效值(并且代码明确接受了它)。

我还使用了整个驱动器而不是分区。这应该更兼容。

到目前为止我的测试结果:

  • 具有最新内核(从Ubuntu 9.10开始为2.6.31)的Linux:可以运行。
  • 内核较旧的Linux:需要使用bs=512选项mount,因为它错误地使用了2048而不是设备扇区大小(在commit 1197e4d中修复)。
  • Windows Vista:有效。
  • 全新的Mac:可以运行。
  • Windows XP:可以正常读取,但是在尝试写入时却给出“拒绝访问”;似乎还认为磁盘已满。

尽管到目前为止我还没有尝试过创建大于4G的文件,但我认为没有理由不起作用。

鉴于它可以在所有最新的操作系统上完美运行(只需要在Linux上手动挂载,在Ubuntu 9.10和Fedora 12发行后就不再需要),并且在Windows XP中只能以只读方式工作(这很令人惊讶对我来说;我期望它根本无法识别文件系统),在大型USB闪存驱动器中使用UDF代替FAT32或NTFS似乎是一个好主意。


1
您如何格式化/分区驱动器?我已使用调零了我的32GB USB驱动器dd if=/dev/zero of=/dev/sdb bs=1M,这使其没有任何分区表。
romeovs 2012年

4
@romeovs:我没有对驱动器进行分区。这就是将其清零的全部要点,以删除分区表和旧文件系统剩余的部分,并将UDF文件系统放在整个未分区的驱动器中。创建分区表只会冒造成混乱的风险。
CesarB

3
不适用于500 GB SeaGate FreeAgent Desktop USB 2.0外部硬盘驱动器(不确定是否应该,因为该线程与闪存驱动器有关)。Windows 7在磁盘管理实用程序中始终将驱动器显示为“未分配”。我尝试了几种不同的选项组合。
亚当·蒙森

2
非常感谢您的跟进。我很少(即使不是第一次)看到一个聪明的问题,经过几天/几周的测试后,OP对此做了详尽的回答。干得好,谢谢!
吕克(Luc)

1
另请参见Pieter Wuille脚本,脚本可自动执行UDF创建过程并创建分区表以实现更好的兼容性。我将其发布为替代解决方案
dolmen 2014年

7

CesarB在解决问题的关键方面做得很好。不足以强调的一件事是格式化UDF时使用适当的块大小是多么重要。

受CesarB的帖子(以及我的其他研究/测试)的启发,我编写了一个脚本,使用正确检测到的扇区大小来自动执行UDF中的格式化过程。请参阅GitHub上的format-udf。显着特点:

  • 以通用磁盘格式(UDF)格式化块驱动器(硬盘驱动器或闪存驱动器)
    • 用于最大兼容性的UDF版本2.01
    • 首先将4096个扇区清零以擦除任何现有的MBR(正确检测UDF所需)
  • 可以跨多个操作系统家族(Windows,OS X和Linux)读取/写入结果文件系统
  • 在具有Bash环境的任何OS上运行

由于最后一点,我编写的此脚本无法在Windows上使用。但是,该脚本将在OS X和Linux上运行。这样做之后,Windows应该能够神奇地检测到新格式化的UDF驱动器。

要直接回答发布的问题,format-udf将:

  • 根据操作系统和环境选择合适的格式化工具
  • 自动检测并填充格式化所需的所有参数
  • 最大化操作系统兼容性(有关兼容性图表,请参见GitHub页面)
  • 产生请求者正在寻找的最大功能集(和最小限制)

1
我在Github上查看了您的format-udf实用程序,对此有一个疑问。该脚本检测驱动器的物理块大小。您确定参数Linux称为“物理扇区(块)大小”而不是“逻辑扇区大小”是正确使用的参数吗?物理和逻辑可能意味着很多事情。什么hdparm叫“逻辑扇区大小”是寻址使用的SATA协议的单位,而“物理扇区大小”是驱动器内部的事情。对我来说,更有意义的是,UDF规范中的“物理块”实际上意味着Linux的“逻辑块”。
约翰·迈伦(JohanMyréen)'17

您很喜欢@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
MarcH

3

我似乎记得这样做过,发现的问题是我安装的Linux版本是只读的,因为该驱动程序不是为r / w构建的。它确实在Windows中工作,我认为是mac。

是的,很难找到一个好的解决方案。有一段时间,我有一个带有fat32分区的外部驱动器,该分区具有用于win和mac的驱动程序,一个mac分区和一个大ext3分区。它可以工作,但是这意味着要安装驱动程序。绝妙的是,它也可以在Mac(fw&usb)上启动,您必须留出空间并做些笔记,然后才能通过命令行和Mac分区表添加分区。

世界需要一个免费的,可供一切使用的文件系统。ZFS将是一个不错的选择。:-)


ZFS很好,但是会使很多人困惑。对于外部媒体来说,这也有些过分,您认为吗?据我所知,它更适合于巨型文件服务器。
迈克·库珀

2
好吧,ZFS确实会检查求和和错误恢复,这对于易碎的消费类产品很有用。:-D这些天我们都存储了足够的东西,以至于比特腐烂最终会吃掉一些东西(请参阅Sun在导致ZFS的问题上所做的研究,还请注意未检测到的HD编码错误率)。我们需要一个真正的fs,所有东西都可以使用,而fatX不是。真的还没来
罗纳德·帕托

ZFS在Linux中不起作用
ignis


1

为了获得最大的兼容性,至少应该在2.0版中使用udftools项目中的mkudffs。无需任何特殊参数,所有内容都会自动检测到。

有3大限制:

  1. 如果Microsoft Windows系统没有MBR或GPT分区表,则无法识别不可移动的硬盘。

  2. Apple Mac OS X系统无法识别分区磁盘上的UDF文件系统。

  3. 如果UDF块大小与磁盘的逻辑扇区大小不匹配,则可能所有系统(最近的Linux内核除外)都无法识别UDF文件系统。

自版本2.0起的工具mkudffs处理所有3个限制。格式化不可移动硬盘时,它会创建“伪” MBR表,该表从扇区0开始并跨越整个磁盘。因此,可以从第一个分区(Microsoft Windows需要)或整个磁盘(Apple Mac OS X需要)读取UDF文件系统。有关更多详细信息,请参见mkudffs 2.0手册页。


0

使用NTFS-3G的NTFS,您可以使用Linux对其进行写入,并在Mac上查看http://macntfs-3g.blogspot.com/


4
这似乎涉及Mac的额外驱动程序。
迈克·库珀

如果他不想使用FAT,他会被卡住,而NTFS-3G已在Mac上运行了,他需要我链接的内容才能进行写操作。
user10547

4
一个小问题是它不是我的 Mac。我宁愿不必在其他人的计算机中安装驱动程序。
CesarB

-1

有适用于Windows(和Mac)的驱动程序可以访问EXT3分区,因此您可以将其格式化为EXT3并随处使用。另一种方法是使用存档器将大文件存储在两个或多个文件中,每个文件最大为4GB。这样,您可以使用通用的FAT32文件系统。在主机上,您必须解压缩存档才能使用它,但这是没有驱动程序的一种方式。使用RAR格式的归档程序,因为它可以在Windows,Linux和Mac上运行,尽管我认为ZIP格式也可以工作。但是我会和司机们一起去。安装后,您可以无限制地执行任何操作。在PC中,我已经使用Ext2Fsd进行了完全EXT2,EXT3和EXT4的访问,并使用了Macdrive进行了完整的MacOS格式的访问。的确,Linux和MacOS也存在类似的工具,可以完全访问NTFS分区等。如果只需要读取访问权限,则不需要任何驱动程序,Linux和MacOS支持读取NTFS分区,因此将USB格式化为NTFS!如果所有这些计算机都在同一网络上,那么事情就容易多了!使USB格式任一种并在网络上共享。其他计算机访问它应该没有问题!


2
-1,因为答案甚至都没有提到UDF!
dolmen 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.