如何正确分区usb闪存驱动器和哪个文件系统选择考虑磨损均衡?


13

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

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

请在回答之前阅读我上面发布的链接。我也会对以某些参考资料备份的答案感兴趣,因为很多人都会说并重新说,但后来却缺乏事实。

感谢您的帮助。


“但是存在磨损均衡的问题” - 你真的没有选择的事情。您购买的USB闪存盘或SD卡可以很好地完成耗损,也可以不做。您不能/不应该使用磨损均衡的文件系统(例如JFFS2)。并且您无法安装UBI卷管理(您需要先安装MTD,但这适用于原始Flash设备)。所以你依赖嵌入式控制器。
sawdust

Answers:


8

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

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

mkfs.ext4 -b 4096 -E stride=128,stripe-width=128

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

tune2fs -O ^has_journal

您可以使用 cat /proc/mtd 找出附加闪存设备的擦除块大小。
Tomalak

只要支持文件系统,没有分区表的闪存驱动器就可以在Windows上正常工作。 Pendrives通常没有开箱即用的分区表,它们工作正常。
gronostaj

在Dreamplug上为Linux / Fedora上的sd-card优化fs 展示如何让ext4“知道” 擦除块 大小和设置它 块大小 “步幅” 相应的价值。另外我认为/ proc / mtd在这里不相关,因为它只适用于原始闪存设备,如锯末所说,而不是SD /棒闪存设备。
tuk0z

试过这个,这是一个非常糟糕的建议。请勿将这些参数与USB闪存驱动器一起使用。 blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card - 这家伙有更好的参数,但它仍然只是略微好一点,如果有的话,比gparted默认使用的更好。
Zdenek

这是我在9月给出的相同链接^^关于分手/ Gparted AFAIK的正确。
tuk0z

3

目前,大多数Linux分区和文件系统创建工具默认使用在4K边界上对齐数据的值,如果磁盘公开它,它甚至会使用底层块大小,因此事情并不像LWN文章那么糟糕:

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.