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

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

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

我不需要这样做,但是我不再确定我的分区是否正确对齐,因为当我尝试将驱动器从 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

因此,根据我目前的理解,我应该将分区对齐到 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

回答之前请先阅读我上面发布的链接。我还希望回答时能提供一些参考资料,因为虽然说了很多,但缺乏事实依据。

感谢您的帮助。

答案1

不要担心磁柱、磁头和扇区,只需处理扇区。对齐文件系统的最简单方法是根本不使用分区表(即直接创建文件系统/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

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

tune2fs -O ^has_journal

答案2

目前,大多数 Linux 分区和文件系统创建工具的默认值都是将数据与 4K 边界对齐,并且如果磁盘暴露了,甚至会使用底层块大小,因此情况并不像 LWN 文章中那么糟糕:

TLDR;当使用现代 Linux 发行版(例如 2013 或更高版本)和最新版本的工具来创建更好的分区和文件系统时(但不是完美的),对齐将自动发生。还要注意 - SD 卡的最佳值可能与 USB 记忆棒的不同(我相信您的 Transcend JetFlash 是 USB 记忆棒而不是 SD 卡)。您必须基准测试以推断廉价闪存上真正的底层擦除块大小...

答案3

此外,在您的 fstab 中,请务必使用挂载选项“noatime”,以避免每次访问文件时进行不必要的写入。

相关内容