題 在USB閃存驅動器上使用UDF


無法將大於4G的文件複製到我的8G USB閃存盤,我把它格式化為ext3。雖然到目前為止這對我來說工作正常,但如果我想用它來將文件複製到不使用Linux的人身上,它會引起問題。

我想把它格式化為 UDF 相反,我希望它能夠在三個最流行的操作系統(Windows,MacOS和Linux)上閱讀(甚至可能寫入), 無需安裝任何額外的驅動程序。但是,根據我在網上發現的內容,似乎有幾個小問題涉及哪些參數用於創建文件系統,這可能會降低兼容性(但我發現的大多數頁面都是關於光學媒體,而不是USB閃存驅動器)。

我想知道:

  • 我應該使用哪個實用程序來創建文件系統? (到目前為止,我發現了 mkudffs 和 genisoimage,和 mkudffs 似乎是最好的選擇。)
  • 我應該使用哪些參數選擇實用程序以獲得最大的兼容性?
  • UDF實際上與這三種操作系統的最常見版本的兼容性如何?
  • 使用UDF實際上是最好的主意嗎?是否有另一個文件系統具有更好的兼容性,沒有像FAT32 4G文件大小限制那樣的問題限制,並且無需在每台接觸它的計算機上安裝特殊驅動程序?

74
2017-09-11 23:47


起源


相關問題: serverfault.com/questions/55089/... - CesarB


答案:


首先,在創建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 安裝完成後,命令將在基於Debian的Linux發行版(如Ubuntu)上可用 udftools 包:

sudo apt-get install udftools

默認的blockize為 mkudffs 是2048,這對於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中只能工作(這是一個驚喜對我來說;我希望它根本不能識別文件系統),在大USB閃存驅動器中使用UDF代替FAT32或NTFS似乎是一個好主意。


55
2017-09-28 16:12



你是如何格式化/分區驅動器的?我使用了32GB USB驅動器 dd if=/dev/zero of=/dev/sdb bs=1M,它沒有任何分區表。 - romeovs
@romeovs:我沒有對驅動器進行分區。這是將它歸零的全部要點,刪除分區表和舊文件系統剩餘部分,並將UDF文件系統放在整個未分區的驅動器中。創建分區表只會讓人感到困惑。 - CesarB
使用500 GB SeaGate FreeAgent Desktop USB 2.0外置硬盤驅動器無法使用(不確定是否應該使用此線程是關於閃存驅動器)。 Windows 7始終在磁盤管理實用程序中將驅動器顯示為“未分配”。我嘗試了幾種不同的選項組合。 - Adam Monsen
非常感謝您的跟進。我很少見,如果不是第一次,我會看到一個聰明的問題,然後在經過幾天/幾週的測試後由OP精心回答。幹得好,謝謝! - Luc
另見 Pieter Wuille的劇本 自動化UDF創建過程並創建分區表以獲得更好的兼容性。我把它發佈為 另一種解決方案。 - dolmen


CesarB在解決問題的關鍵方面做得很好。無法強調的一件事是在格式化UDF時使用正確的塊大小是多麼重要。

在CesarB的帖子(以及我的其他研究/測試)的啟發下,我編寫了一個腳本來自動化UDF中的格式化過程 - 使用正確檢測的扇區大小。看到 gitHub上的format-udf。顯著特點:

  • 以通用磁盤格式(UDF)格式化塊驅動器(硬盤驅動器或閃存驅動器)
    • UDF修訂版2.01用於最大兼容性
    • 首先清除4096個扇區以清除任何現有的MBR(正確的UDF檢測所必需的)
  • 可以跨多個操作系統系列(Windows,OS X和Linux)讀取/寫入生成的文件系統
  • 在具有Bash環境的任何操作系統上運行

由於最後一點,我寫的這個腳本不能在Windows上使用。但是,該腳本將在OS X和Linux上運行。在這樣做之後,Windows應該能夠神奇地檢測新格式化的UDF驅動器。

要直接回答發布的問題,format-udf將:

  • 根據操作系統和環境選擇適當的格式化工具
  • 自動檢測並填充格式化所需的所有參數
  • 最大化OS兼容性(有關兼容性圖表,請參閱GitHub頁面)
  • 產生提問者正在尋找的最大特徵集(和最小限制)

7
2017-08-29 14:25



我在Github上看了一下你的format-udf實用程序,我有一個問題。該腳本檢測驅動器的物理塊大小。你確定參數Linux稱為“物理扇區(塊)大小”而不是“邏輯扇區大小”是正確使用的嗎?物理和邏輯可能意味著很多事情。什麼 hdparm 調用“邏輯扇區大小”是SATA協議使用的尋址單位,而“物理扇區大小”是內部驅動器。對我來說,更有意義的是,UDF規範中的“物理塊”實際上意味著Linux的“邏輯塊”。 - Johan Myréen
你是現貨,@JohanMyréen。我邀請您加入關於GitHub這個主題的討論。 github.com/JElchison/format-udf/issues/13  在你的問題上有一個即將發生的變化,等待在Windows 7和10上進行額外的測試。 - j0nam1el
format-udf非常好。剛在Linux上測試過,可以在OS X和Windows 10上讀/寫格式化的驅動器。 - mivk
雖然“在任何具有bash的操作系統上運行”的能力具有一定的吸引力,但實現相同的方法會更好 mkudffs 直;我的意思是添加一些新的 --best-block-size 選項 mkudffs。 - MarcH


我似乎記得已經這樣做了,我發現的問題是我安裝的linux版本只讀,因為驅動程序還沒有為r / w構建。它確實在Windows中工作,我認為mac。

是的,很難找到一個好的解決方案。有一段時間我有一個帶有fat32分區的外部驅動器,它有win和mac的驅動程序,一個mac分區和一個大的ext3分區。它工作,但它意味著安裝驅動程序。整潔的技巧是它也可以在mac(fw和usb)上啟動,你必須留空並記下一些筆記,然後你也可以通過命令行和mac分區表添加分區。

世界需要一個免費的,可用的一切文件系統。 ZFS將是一個不錯的選擇。 :-)


3
2017-09-12 02:19



ZFS會很高興,但會讓很多人感到困惑。外部媒體也有點矯枉過正,你不覺得嗎?從我所知,更適合巨型文件服務器。 - Mike Cooper
好吧,ZFS會檢查求和和錯誤恢復,這對於片狀消費者來說很有意義。 :-D這些天我們都存儲了足夠的東西,最終腐爛會吃掉一些東西(參見Sun對導致ZFS問題的研究,也注意到HD上編碼的未檢測錯誤率)。我們需要一個真正的fs,一切都可以使用,胖子不是它。還沒來,真的。 - Ronald Pottol
ZFS在Linux中不起作用 - ignis


Pieter Wuille編寫了一個分區和格式化磁盤的工具 UDF 佈局將兼容Windows(> = Vista,只讀XP),MacOS X 10.5,Linux 2.6.30+:


2
2018-06-02 15:29



由於服務器與Pieter Wuille的腳本似乎有所下降,因此有一個更新的腳本由JElchisson完成:( Format-UDF)[github.com/JElchison/format-udf],解釋如下:(使用UDF在Windows,OS X和Linux上共享硬盤/閃存驅動器)[j0nam1el.wordpress.com/2015/02/20/... - DrYak


要實現最大兼容性,您應該使用mkudffs udftools 項目至少在2.0版本中。不需要特殊參數,一切都是自動檢測的。

有三大限制:

  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手冊頁。


1
2018-01-13 13:22





NTFS,使用NTFS-3G可以使用Linux寫入它並查看 http://macntfs-3g.blogspot.com/ 為你的Mac。


0
2017-09-12 01:46



這似乎涉及Mac的額外驅動程序。 - Mike Cooper
如果他不想使用FAT,他就會被卡住並且NTFS-3G在Mac上工作已經需要我寫的鏈接了。 - user10547
一個小問題是它不是 我的 蘋果電腦。我寧願不必在其他人的計算機上安裝驅動程序。 - CesarB


Windows(和Mac)的驅動程序可以訪問EXT3分區,因此您可以將其格式化為EXT3並使用它(帶驅動程序)到任何地方。另一種方法是使用archiever將大文件存儲在兩個或多個文件中,每個文件最多4GB。這樣您就可以使用通用的FAT32文件系統。在主機上,您必須提取存檔才能使用它,但這是一種無需驅動程序的方法。使用RAR格式存檔,因為它適用於Windows,Linux,Mac,雖然我認為ZIP格式也可以正常工作。但我會和司機一起去。安裝完成後,您可以不受限制地執行任在PC中,我使用Ext2Fsd進行完整的EXT2,EXT3和EXT4訪問,使用Macdrive進行全MacOS格式訪問。當然,Linux和MacOS也存在類似的工具以及完全訪問NTFS分區等。如果您只需要讀取權限,則不需要任何驅動程序,Linux和MacOS支持讀取NTFS分區,因此將USB格式化為NTFS!如果所有這些計算機都在同一個網絡上,那麼事情就更容易了!使USB格式化並在網絡上共享。其他計算機應該沒有問題訪問它!


-1
2018-02-23 23:58



-1因為答案甚至沒有提到UDF! - dolmen