数百万个文件夹导致 USB 无响应

数百万个文件夹导致 USB 无响应

我最终做了一个实验,看看 16GB USB 上能放多少个文件夹(为了好玩)所以我得到了一个树莓派,并运行该程序来生成新文件夹,直到它崩溃。

当我将驱动器插入主计算机并在终端 /media/username/ 中导航到它并输入 ls 时,程序会因试图找到它而挂起。其次,在默认磁盘管理器中打开它会导致单击驱动器时程序冻结。最后,Nautilis 可以工作,但它处于一个长循环中,一个小时后就无处可去。(USB 是一个 NTFS 文件系统,有超过 300 万个文件夹)

我是否只需使用 gparted 并擦除设备?或者有办法访问这些文件夹吗?

谢谢,Moose

答案1

如果您想查看某些文件夹名称,则可以通过 less 或 more 管道传输 ls(甚至可以通过 grep 来细化哪些文件夹)。

您也应该能够使用 rmdir 来删除部分或全部目录。

如果您需要代码示例,请告诉我;但命令使用起来非常清楚。

答案2

文件系统使用存储在设备上的索引表来识别与文件相关的数据存储区域链,即文件分配表 (FAT)。FAT 在格式化时静态分配。该表是每个簇(磁盘存储的连续区域)的条目的链接列表。每个条目包含文件中下一个簇的编号,或者指示文件末尾、未使用的磁盘空间或磁盘的特殊保留区域的标记。磁盘的根目录包含该目录中每个文件的第一个簇的编号。然后,操作系统可以遍历 FAT,查找磁盘文件的每个连续部分的簇号作为簇链,直到到达文件末尾。子目录被实现为包含其各自文件的目录条目的特殊文件。

(来源:维基百科。重点是我的。)

你可以静态分配的脂肪心室颤动使用命令格式化驱动器时,文件系统mkfs.vfat。VFAT 是 USB 闪存驱动器最广泛支持的文件系统,并且受所有操作系统支持。NTFS 源自 Windows,并且更加先进,但以下概念仍然有助于理解。

man mkfs.vfat

   -f NUMBER-OF-FATS
       Specify the number of file allocation tables in the filesystem.  The
       default is 2.

   -F FAT-SIZE
       Specifies the type of file allocation tables used (12, 16 or 32 bit).
       If nothing is specified,  mkfs.fat will automatically select between 
       12, 16 and 32 bit, whatever fits better for the filesystem size.

   -r ROOT-DIR-ENTRIES
       Select the number of entries available in the root directory.  The
       default is 112 or 224 for floppies and 512 for hard disks.

由于 VFAT 文件系统的 FAT 具有静态分配的大小,以后无法更改,因此它只能存储有限数量的文件。以下是上面引用的维基百科文章的续篇:

FAT 链表中的每个条目都是固定的位数:12、16 或 32。可访问的文件或磁盘驱动器的最大大小是条目中可存储的最大数字(减去为指示未分配空间或列表末尾而保留的几个值)与磁盘簇大小的乘积。即使只需要一个字节的存储空间来扩展文件,也必须为其分配整个簇,因此如果有大量小文件,大簇会浪费大量磁盘空间。

这意味着文件系统上可以存储的文件数量完全取决于驱动器格式化时分配的大小。但是,理论最大值不能超过:

  • VFAT 文件系统的最大文件数量为 268,435,437
  • NTFS 文件系统的最大文件数为 4,294,967,295

最后,如果您是 Ubuntu 用户,这些都无关紧要。传统上,类 Unix 文件系统既不使用 VFAT,也不使用 NTFS 文件系统。类 Unix 文件系统没有 FAT 或 MFT,但会分配一个索引节点表哪些商店索引节点. Windows 类(VFAT、NTFS)文件系统与 Unix 类(ext2、ext3、ext4)文件系统之间的主要区别在于,Unix 不将文件名存储在分配表中,而是存储在名为目录传统上,一个经常被庆祝的区别是碎片化在 Unix 上的问题比在 Windows 上要小。

因此,要最大限度地利用损坏的驱动器,请使用命令mkfs.ext4或对其进行重新格式化mke2fs。请务必先阅读手册页!

相关内容