考虑到磨损均衡,如何正确分区 USB 闪存驱动器以及选择哪个文件系统?

ran*_*om1 12 linux performance partitioning lifespan usb-flash-drive

两个问题。第一:如何对闪存盘进行分区?

我不需要这样做,但我不再确定我的分区是否正确对齐,因为当我尝试将驱动器从 FAT 格式化为 ext4 时,gparted 抱怨后我被迫删除并创建一个新的分区表。

天真的答案是说“只需使用默认值,一切都会好起来的”。但是,如果您阅读以下链接,您就会知道事情并没有那么简单:https : //lwn.net/Articles/428584/http://linux-howto-guide.blogspot.com/2009/10/increase- usb-flash-drive-write-speed.html

然后还有柱面、磁头和扇区的问题。目前我得到这个:

$sfdisk -l -uM  /dev/sdd
Disk /dev/sdd: 30147 cylinders, 64 heads, 32 sectors/track
Warning: The partition table looks like it was made
   for C/H/S=*/255/63 (instead of 30147/64/32).
For this listing I'll assume that geometry.
Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start   End    MiB    #blocks   Id  System
/dev/sdd1         1  30146  30146   30869504   83  Linux

$fdisk -l /dev/sdd
Disk /dev/sdd: 31.6 GB, 31611420672 bytes
255 heads, 63 sectors/track, 3843 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00010c28
Run Code Online (Sandbox Code Playgroud)

因此,根据我目前的理解,我应该将分区对齐为 4 MiB(目前为 1 MiB)。但我仍然不知道如何为我的设备正确设置磁头和扇区。

第二个问题:文件系统。

从基准测试中我看到 ext4 提供了最好的性能,但是存在磨损均衡的问题。我怎么知道我的 Transcend JetFlash 700 的微控制器提供磨损均衡?或者我会更快地杀死我的驱动器?

我在网上看到很多帖子都说不要担心新的驱动器已经解决了这个问题。但是我从来没有看到过任何支持的证据,并且在某些时候人们开始将 SSD 与 USB 闪存驱动器技术混合使用。安全的选择是使用 ext2,但是我执行的一系列测试显示出糟糕的性能!!!

这些值来自真实场景,而不是一些综合测试:

42 files: 3,429,415,284 bytes copied to flash drive
original fat32: 15.1 MiB/s
ext4 after new partition table: 10.2 MiB/s
ext2 after new partition table:  1.9 MiB/s
Run Code Online (Sandbox Code Playgroud)

在回答之前,请阅读我上面发布的链接。我也会对带有一些参考资料的答案感兴趣,因为说了很多又重新说,但又缺乏事实。

感谢您的帮助。

mgo*_*ven 9

不要担心柱面、磁头和扇区,只需要处理扇区。对齐文件系统的最简单方法就是没有分区表(即/dev/sdX直接在其上创建文件系统)。大多数 Linux 系统都能很好地处理这个问题,但 Windows 会吓坏你,而且你也不能让它可启动。如果您需要分区表,请计算出有多少个 512 字节的扇区组成了一个擦除块。擦除块大约为 128-512KiB,因此如果您无法找出闪存驱动器使用的内容,请使用 1024 个扇区。确保分区以该数字的倍数开始。

您还想告诉 ext2/3/4 有关擦除块大小的信息,以便避免不必要地修改块。将stride和设置stripe-width为构成擦除块的文件系统块的数量,因此在 512KiB 擦除块上工作使用以下内容:

mkfs.ext4 -b 4096 -E stride=128,stripe-width=128
Run Code Online (Sandbox Code Playgroud)

在性能方面,没有日志应该可以提高性能(但如果操作中断会增加数据损坏的机会)。但是,ext4 的范围应该会提高性能,因为需要为大文件修改较少的元数据。我可能会在禁用日志的情况下使用 ext4:

tune2fs -O ^has_journal
Run Code Online (Sandbox Code Playgroud)