我应该为我的SSD使用btrfs还是Ext4?


16

我应该为办公室计算机的Ubuntu 11.10(Oneiric)amd64桌面根分区的SSD使用btrfs(带有丢弃,compress = lzo和space_cache选项)或Ext4(带有丢弃选项)吗?

/ home将是HDD,因此fs的可靠性会影响操作系统而不是我的数据。

Answers:


13

根据phoronix的测试,它始终取决于许多因素。在某种情况下,Btrfs它比EXT4在SSD上读取大文件时要好得多。同样,在考虑磁盘事务性能时,Ext4可以比以后更好地执行。

您可以在这里这里这里浏览这些测试(警告:冗长的文章)。

但总而言之,即使在SSD模式下使用Btrfs,目前也没有EXT4文件系统在数量上的性能优势

因此,您Ext4现在可以选择。


2
文章分别为2011年9月,2010年8月9日和2009年5月29日。专注于最新,因为我认为btrfs将在过去两年中发展。第4页上的btrfs + LZO图表对于顺序读取和写入性能而言是惊人的,但是btrfs在随机写入方面的表现很差,因此对于数据库和VM映像的btrfs绝对不是。我猜对于根分区来说,负载主要是随机读取,对于它来说,其性能不比ext4好。
格雷厄姆

几年之内,Btrfs将成为比EXT4更好的选择。它是一个更有前途的文件系统:)
NBK

7

对于2016年在这个问题上遇到困难的人...使用ext4。我尝试了btrfs,差异很大。在10天的时间里,对ext4的IO写入总数为17,800个扇区。Btrfs?490,400个部门。相同的SSD,相同的文件系统,不同的分区。基本上,相同的工作量。

当驱动器上的写入活动为零时,ext4和btrfs都“安静”。那很好。

Ext4将写入修改后的数据,以及一些开销。开销与写入的数据有关。4K写操作(1个块)在下一次提交时会产生大约50-80个块的开销。(ext4 Journal已完全启用)

修改btrfs上的单个4K块,在下一次提交时将推入4000-5000个开销块。我相信默认提交时间是30秒。我用了120

现在,这取决于您如何使用SSD。作为根,通常会有相当恒定的低级别写入流在进行。日志文件,ntp漂移文件,man db重建,opensm拓扑更新等,每个事件都会使btrfs驱动器产生4000-5000次写操作。

上面的10天数字是针对我的“写限制” SSD。在这17,800个行业中,大部分是系统更新较小的结果。一个btrfs副本没有受到影响。我的作者正是ntp漂移,opensm拓扑和man db更新(每晚)。除了主动启动的东西(例如系统升级vim /etc/whatever等)外,其他任何东西都不会击中该磁盘。

实际上,整个SSD都会遭受大量写入。我只是看不见浪费他们的意思,因为新闻媒体在追逐兔子和彩虹。如果您想为COW支付这个价格,那就去买。对于“性能”,不是很多。它是固态硬盘,您可能会在上面放上人们所知的最糟糕的“文件系统”,并且仍然可以通过蛮力获得某种程度的性能。到目前为止,Ext4并不是最糟糕的文件系统。

没有每月的FS支票。试试下面的脚本。这是100%的骇客,不适用于md挂载点,

#! /bin/bash
dev=`cat /proc/mounts | grep " $1 " | awk '{print $1}'`
x=`basename $dev`
vmnam=`lsblk $dev -o MOUNTPOINT,PKNAME | grep "$1" | awk '{print $2}'`
vmx=`vmstat -d | grep $vmnam | awk '{print $8}'`
lbax=`smartctl -a $dev | grep LBA | awk '{print $10}'`
tmpnam=`mktemp XXX`
echo "Tracking device: $dev, mounted on $1 (vmstat on $vmnam)"
tim=`date +%s`
timx=`date +%s`
while true
do
    vm=`vmstat -d | grep "$vmnam" | awk '{print $8}'`
    lba=`smartctl -a $dev | grep LBA | awk '{print $10}'`
    if [ "$vm" != "$vmx" ]
    then
        tim=`date +%s`
        dif=`dc <<< "$vm $vmx - p"`
        lbad=`dc <<< "$lba $lbax - p"`
        timd=`dc <<< "$tim $timx - p"`
        echo `date` " (sec=$timd) writes=$vm (dif=$dif) (lba=$lbad)"
        vmx="$vm"
        lbax="$lba"
        timx="$tim"
        find "$1" -mount -newer "$tmpnam" -print | grep -v "/tmp"
        touch "$tmpnam" 
    fi
    sleep 1 
done

它会告诉您根据驱动器本身写入了多少个块,以及确切地更新了哪些文件。需要root特权。你自己看。我在根文件系统上运行SSD,并调用脚本stat.sh。所以...sudo ./stat.sh /


我不喜欢你的比较方法。例如,每月进行一次fs检查,您就得到了这些结果。Btrfs现在几乎在所有地方都是默认设置,这是有充分理由的。
Barafu Albino

没有每月的FS支票。试试下面的脚本。这是100%的
骇客

2
为什么会有这么大的写开销?您说过,即使在ext4上写入一个块,也创建了50-80个块-这是所需数量的40倍。为什么?
Golar Ramblar

我质疑在2018年底这是否仍然正确。在我的测试中,我比较了根据iotop和smartctl编写的数量,发现后者声称的数量是前者(ext4)的3倍。
迈克尔

2

上次我测试它时,我在任何地方都没有听到不同的声音,ext4 固态介质。(拇指驱动器,固态驱动器等),我不建议在这样的设备上使用它。请改用ext3。对于大多数情况下的SSD,无论如何您都无法分辨出差异。

BTRFS尚未十分稳定。但是,它对于非关键应用程序足够稳定。这就是我用来制作可启动闪存驱动器的东西。如果使用compress = zlib和ssd作为安装选项,则压缩将弥补大多数固态介质的较低写入速度,并且ssd会将分配算法更改为在此类设备上性能明显更好的分配算法,并且将弥补硬件的平均磨损程度较差。仍然存在的一个性能问题是同步调用速度很慢。这对于一般使用来说不是问题,但是dpkg在每次操作后都会调用sync,因此安装和更新软件的速度可能会很慢。BTRFS还提供快照和其他高级功能,在某些情况下非常有用。

如果决定使用BTRFS,请确保使用内核3.2.0-2或更高版本的发行版。如果需要,3.1.x是可行的。对于较旧的内核,您需要自己编译最新的BTRFS模块。内置的几乎是稳定的,但是错误校正在较旧的版本中不起作用,如果出现问题,这可能会使您陷入困境。最新版本的fsck实际上可以修复最常见的故障。

最后一个警告,我听说有报道说BTRFS文件系统上的swapfiles将损坏它。这个问题可能已经解决,但是在实施之前一定要仔细检查。

如果您需要任何帮助以所需方式配置BTRFS设置,请告诉我。我做了一些疯狂的事情,在某些特定的事情上表现得很好。


2

基于轶事证据和我自己的经验,我不会在固态驱动器上使用ext4,因为与文件系统相关的读写次数很多,因此我认为ext4可以大大缩短SSD的寿命。我最近阅读的一篇文章建议,在SSD上未经优化(考虑页面大小等)的ext4可以将磁盘寿命缩短一半。经过一周的故障排除后,我得出的结论是,由于此问题,我自己的SSD仅能使用八个月。如果您使用SSD,请大量阅读有关如何基于闪存页面大小之类的文件来优化文件系统的知识,这些内容可能与设置文件系统的典型柱面大小不同。


2
您能否提供所阅读文章的链接或其他标识信息?
伊莱亚·卡根

我将尝试专门查找该文章。请记住,该声明是在雪茄店冲浪时在互联网上找到的。最重要的是,在SSD上使用ext4之前,请先阅读并做功课。查看有关TRIMM和优化之类的文章。无论您做什么,都不要像我一样,并且八个月后开始在诸如“ sudo reboot”之类的命令上得到I / O错误。
user75153'7
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.