Usb-Drive

如何格式化流氓快閃記憶體驅動器?(GParted 試圖觸及超出實際容量的文件系統頁腳,並無限期凍結)

  • November 7, 2018

在邊緣類型的假 USB 或 SD 卡上,從驅動器上特定位置開始的所有扇區都不可用(只有零或只有一個或不可讀的扇區響應)。

快閃記憶體驅動器可能會顯示為 256GB,但實際上只有 16GB。任何超過 16GB 門檻值的寫入都會進入數字黑洞(因此是邊緣)。嘗試訪問該數據時,可能會發生以下情況之一:

  • *設備僅返回具有00000000 (0x00)*字節的空白扇區。
  • 設備僅返回*11111111 (0xFF)*字節的扇區。
  • 該設備向電腦發出該扇區已損壞的信號。
  • 設備會無限期地凍結,並且永遠不會返回讀取請求。
  • 設備返回隨機數據(非常罕見的類型)

在我擁有的流氓快閃記憶體驅動器上,第一個就是這種情況。它返回*00 00 00 00*… in the all 512 bytes in all Sector in all Sector in the limbo區域,超出了實際數據容量。

使用*mkfsgparted*在假 USB(用於測試目的)上創建文件系統確實會無限期凍結。

Windows 和 Android 都在**不到半分鐘的時間內成功地將 SD 卡格式化為所稱的全部容量。**這只有在不觸及任何超出實際容量的文件系統頁腳時才有可能。只能通過修改標題。
GParted 和 mkfs 無限期地凍結(直到從 PC 中移除驅動器)並在 GParted 中留下一個以未知類型指示的文件系統。

如何在僅寫入文件系統標頭的同時將 GParted 中的流氓快閃記憶體驅動器格式化為全部所謂的容量?

這將使 GParted 不會觸及導致無限期凍結的邊緣區域(不要與流氓驅動器上列出的第四類扇區返回混淆。這是 GParted 的反應)。

我想要達到的目標:

  • 測試 Linux 如何對交換到假快閃記憶體驅動器做出反應。 因為這對於 StackExchange 來說太微不足道了,所以我決定自己嘗試一下。
  • 在安卓手機上測試不同文件系統(ext2、ext3、ext4、FAT16、FAT32、exFAT、f2fs、xfs、zfs、ntfs):我想嘗試用安卓手機錄製影片,超出實際容量,看看它是如何反應的。

我有點懷疑這會奏效。但是有一種強大的方法可以滿足您的要求。如果這不起作用,則沒有任何選項可以傳遞mkfs給做更好的事情。

  1. 在您的主文件系統上創建一個與設備大小相同的(稀疏)文件。例如使用truncate --reference=/dev/sdX disk.img
  2. 對文件進行分區(我假設您想要這個 - 如果您不這樣做,則跳過它並使用/dev/loopN而不是/dev/loopNp1)。您可以執行fdisk disk.img,或dd if=/dev/sdX of=disk.img conv=notrunc bs=1M count=1複制設備上的任何分區。
  3. losetup -f disk.img- 這將創建一個循環設備並列印其名稱。
  4. mkfs.FOO /dev/loopNp1- 創建文件系統
  5. dd if=/dev/loopN of=/dev/sdX bs=1k count=16M conv=sparse- 將磁碟鏡像的前15G(1610241024*1024)複製到設備中。您可以根據需要進行調整。 conv=sparse將跳過全為零的寫入塊。

引用自:https://unix.stackexchange.com/questions/479814