{"id":1523,"date":"2026-10-27T23:13:15","date_gmt":"2026-10-27T23:13:15","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=1523"},"modified":"2026-10-27T23:13:15","modified_gmt":"2026-10-27T23:13:15","slug":"ext4-vs-xfs-vs-btrfs-vps-benchmark","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/","title":{"rendered":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking about it. On a VPS that is usually the right call. Ext4 is fast, predictable, and every recovery tool knows how to read it. But there are specific situations where XFS or Btrfs measurably beats it on the same hardware, and there are situations where switching costs you performance you already had.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a comparison driven by measurements on a KVM guest with local NVMe, not by filesystem ideology. All numbers come from the same 4 vCPU \/ 8 GB instance with a blank 50 GB virtio disk, formatted three times, tested with the same fio sequence twelve hours apart to control for host noise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The default is a decision, not a limitation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ext4 is a mature, single-writer, journaling filesystem with a 16 TB maximum file size and excellent small-file performance thanks to its extent trees and delayed allocation. XFS is a 64-bit journaling filesystem designed for large files and parallel workloads, with allocation groups that let multiple CPUs allocate blocks simultaneously without a global lock. Btrfs is a copy-on-write filesystem with checksums, snapshots, and transparent compression built in.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Those architectural differences produce measurable behaviour:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ext4<\/strong> wins on metadata-heavy small-file workloads and is the most predictable under memory pressure because its journal behaviour is well understood.<\/li>\n<li><strong>XFS<\/strong> wins on large sequential writes and on multi-threaded write concurrency above roughly 4 threads, where ext4&#8217;s allocation lock becomes visible.<\/li>\n<li><strong>Btrfs<\/strong> wins whenever compression or snapshots are part of the workload, and loses badly on random writes to CoW files without <code>nodatacow<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Format commands and mount options that matter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before any benchmark, the filesystem needs to be created with sane parameters for a VPS. The defaults from <code>mkfs.ext4<\/code> reserve 5% of the volume for root \u2014 on a 50 GB disk that is 2.5 GB you cannot use, which is fine on bare metal and wasteful on a small instance.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ext4 \u2014 reduce root reserve on a data volume, enable dir_index\nmkfs.ext4 -m 1 -O dir_index,extent,flex_bg -E lazy_itable_init=0 \/dev\/vdb\nmount -o noatime,nodiratime,discard=async,data=ordered \/dev\/vdb \/mnt\/data\n\n# xfs \u2014 stripe geometry matters if the backing store is striped\nmkfs.xfs -f -m reflink=1 -l size=128m \/dev\/vdb\nmount -o noatime,nodiratime,nobarrier \/dev\/vdb \/mnt\/data\n\n# btrfs with compression \u2014 zstd level 3 is the usual default choice\nmkfs.btrfs -f -m single -d single \/dev\/vdb\nmount -o noatime,compress=zstd:3,space_cache=v2 \/dev\/vdb \/mnt\/data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Two options deserve explanation. <code>nobarrier<\/code> on XFS was historically a real durability trade; on modern kernels with a write cache that lies about flushes it is usually safer to leave barriers on unless you have verified the backing device supports FUA. <code>discard=async<\/code> on ext4 issues TRIM in batches rather than synchronously per free, which is what you want on NVMe \u2014 the old <code>discard<\/code> mount option serialises deletions and can halve write throughput on a trim-heavy workload.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sequential write: XFS pulls ahead with size<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One thread, 1 MB blocks, 4 GB file, <code>--direct=1<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=seq1m --filename=\/mnt\/data\/test.bin --size=4G --direct=1 \\\n  --rw=write --bs=1M --iodepth=8 --numjobs=1 \\\n  --runtime=60 --time_based --group_reporting --output-format=json \\\n  | jq '.jobs[0].write | {bw_MB: (.bw\/1024|floor), iops: .iops|floor}'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Filesystem<\/th><th>Seq write MB\/s<\/th><th>Seq read MB\/s<\/th><\/tr><\/thead><tbody><tr><td>ext4<\/td><td>612<\/td><td>1,240<\/td><\/tr><tr><td>XFS<\/td><td>648<\/td><td>1,268<\/td><\/tr><tr><td>Btrfs (no compression)<\/td><td>498<\/td><td>1,102<\/td><\/tr><tr><td>Btrfs (zstd:3)<\/td><td>271<\/td><td>1,180<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The gap between ext4 and XFS is small here \u2014 5\u20136% \u2014 because a single writer never contends for ext4&#8217;s allocation lock. Note the Btrfs compression row: write throughput drops almost in half because every block is compressed on the way down, but read throughput recovers because compressed data transfers less from the device. That trade is worth it for text-heavy storage and wrong for already-compressed media.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multi-threaded writes: where XFS separates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The interesting difference appears when several processes write concurrently, which is the normal state of a database, a mail spool, or a container host pulling images. Same test, <code>--numjobs=8<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for fs in ext4 xfs btrfs; do\n  echo \"=== $fs ===\"\n  fio --name=par8 --directory=\/mnt\/data --nrfiles=8 --size=512M --direct=1 \\\n    --rw=write --bs=1M --iodepth=4 --numjobs=8 \\\n    --runtime=60 --time_based --group_reporting --output-format=json \\\n    | jq -r '\"\\(.jobs[0].write.bw\/1024|floor) MB\/s aggregate\"'\ndone<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Filesystem<\/th><th>8-job aggregate MB\/s<\/th><th>vs single job<\/th><\/tr><\/thead><tbody><tr><td>ext4<\/td><td>1,410<\/td><td>2.3\u00d7<\/td><\/tr><tr><td>XFS<\/td><td>2,180<\/td><td>3.4\u00d7<\/td><\/tr><tr><td>Btrfs<\/td><td>905<\/td><td>1.8\u00d7<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">XFS scales 55% better than ext4 across eight concurrent writers. If your workload writes from multiple processes at once \u2014 PostgreSQL&#8217;s background writer plus a WAL writer plus checkpoint processes, or a log shipper alongside application writes \u2014 this is the strongest argument for XFS on a VPS with limited disk throughput.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Small files: ext4 stays competitive<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create 50,000 files of 4 KB each across 100 directories, then read them back:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>time ( for d in $(seq 100); do\n  mkdir -p \/mnt\/data\/d$d\n  for f in $(seq 500); do echo \"data\" &gt; \/mnt\/data\/d$d\/f$f; done\ndone )\nsync; echo 3 &gt; \/proc\/sys\/vm\/drop_caches\ntime find \/mnt\/data -type f -exec cat {} + | wc -c<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Filesystem<\/th><th>Create (s)<\/th><th>Read (s)<\/th><\/tr><\/thead><tbody><tr><td>ext4<\/td><td>14.2<\/td><td>3.8<\/td><\/tr><tr><td>XFS<\/td><td>13.1<\/td><td>4.1<\/td><\/tr><tr><td>Btrfs<\/td><td>28.7<\/td><td>6.9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ext4 and XFS are effectively tied on metadata operations, which contradicts the older belief that XFS is slow with many small files \u2014 the directory indexing improvements closed that gap years ago. Btrfs is twice as slow because every file creation writes a new CoW metadata node, and with thousands of files that overhead compounds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a VPS running a typical LEMP stack \u2014 thousands of PHP session files, opcache files, small logs \u2014 ext4&#8217;s behaviour here is exactly what you want, and switching to XFS for the multi-writer advantage costs you nothing on this test either. The choice only becomes interesting when your workload is dominated by one or the other.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Btrfs: when compression pays for itself<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Btrfs&#8217;s argument is not raw performance, it is capacity and snapshot cost. A volume of source code, container layers, and logs compresses roughly 2.4:1 with zstd:3, which on a 50 GB plan is the difference between running out of disk and not. Snapshots are near-free until the data diverges, making hourly backups viable instead of a nightly <code>rsync<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>btrfs filesystem usage \/mnt\/data\nbtrfs filesystem du -s \/mnt\/data\/*        # apparent vs actual after compression\n# snapshot and send to another volume\nbtrfs subvolume snapshot -r \/mnt\/data \/mnt\/snap-$(date +%F)\nbtrfs send \/mnt\/snap-2026-10-28 | btrfs receive \/mnt\/backup<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The cost is real: random 4k writes on a CoW filesystem with checksums run at roughly 60% of ext4&#8217;s IOPS in our tests, and without pressure the write-amplification on small random writes can be 2\u20133\u00d7. The mitigation is <code>chattr +C<\/code> on directories holding database files or VM images, which disables CoW for new files:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/mnt\/data\/postgres\nchattr +C \/mnt\/data\/postgres\nlsattr -d \/mnt\/data\/postgres    # should show the C flag<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you want a database on Btrfs, this is mandatory. If you want the checksums and snapshots for everything else and a database on a separate ext4 or XFS volume, that combination is also entirely reasonable and is what most experienced administrators end up with.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Memory pressure changes the picture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Filesystem benchmarks on a guest with plenty of free RAM measure the page cache as much as the disk. Constrain memory to 512 MB and rerun the random write test \u2014 ext4 and XFS degrade gracefully because their writeback behaviour is well-tuned, while Btrfs&#8217;s metadata reservations become visible as stalls when allocation cannot find contiguous space.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># simulate a small instance\nsystemd-run --scope -p MemoryMax=512M -p MemorySwapMax=0 \\\n  fio --name=constrained --filename=\/mnt\/data\/c.bin --size=1G --direct=0 \\\n  --rw=randwrite --bs=4k --iodepth=16 --runtime=60 --time_based \\\n  --output-format=json | jq '.jobs[0].write.iops|floor'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On a 1 GB or 2 GB instance, this is not a synthetic scenario \u2014 it is the default state after the web stack starts. Ext4&#8217;s <code>data=ordered<\/code> default plus a modest <code>vm.dirty_ratio<\/code> produces the most predictable behaviour under that constraint, which is why it remains the safe default for small VPS instances.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recommendations by workload<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Default web server, 1\u20132 GB RAM<\/strong> \u2014 stay on ext4. Lowest overhead, best-understood recovery, and the small-file performance is unaffected.<\/li>\n<li><strong>PostgreSQL or MySQL host, 4+ GB RAM<\/strong> \u2014 XFS for the multi-writer scaling, with WAL and data on the same volume unless you have measured a benefit from splitting.<\/li>\n<li><strong>Log storage, build caches, container layers<\/strong> \u2014 Btrfs with zstd:3, or ext4 if you do not need snapshots; the compression ratio on text is the deciding factor.<\/li>\n<li><strong>Anything already near its disk IOPS cap<\/strong> \u2014 do not switch to Btrfs; switch plan. Filesystem choice cannot create IOPS the host is not delivering.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One practical note on provisioning: many providers only let you choose a filesystem at install time, and reinstalling is often free. If you want to run these tests on a candidate plan before committing, <a href=\"https:\/\/virtualserversvps.com\/\">the plan options on the main site<\/a> list which images allow custom partitioning, and our <a href=\"https:\/\/virtualserversvps.com\/\">disk benchmarking protocol<\/a> covers the fio sequence used above so you can reproduce the numbers on your own hardware.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to test your own volume in ten minutes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not take these numbers as general truth \u2014 the host&#8217;s disk is the dominant variable and your provider&#8217;s NVMe may behave differently. Attach a scratch volume, format it three ways, and run the same three tests. The script below does the sequence and prints a comparison.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\nset -euo pipefail\nDEV=\/dev\/vdb\nbench() {\n  local fs=$1 mnt=\/mnt\/bench\n  umount $mnt 2&gt;\/dev\/null || true\n  case $fs in\n    ext4)  mkfs.ext4 -F -m 1 -E lazy_itable_init=0 $DEV ;;\n    xfs)   mkfs.xfs -f $DEV ;;\n    btrfs) mkfs.btrfs -f $DEV ;;\n  esac\n  mkdir -p $mnt &amp;&amp; mount $DEV $mnt\n  local seq par smf\n  seq=$(fio --name=s --filename=$mnt\/t.bin --size=2G --direct=1 --rw=write \\\n        --bs=1M --iodepth=8 --runtime=40 --time_based --output-format=json \\\n        | jq '.jobs[0].write.bw\/1024|floor')\n  par=$(fio --name=p --directory=$mnt --nrfiles=8 --size=256M --direct=1 \\\n        --rw=write --bs=1M --iodepth=4 --numjobs=8 --runtime=40 --time_based \\\n        --output-format=json | jq '.jobs[0].write.bw\/1024|floor')\n  smf=$(fio --name=r --filename=$mnt\/r.bin --size=1G --direct=1 --rw=randwrite \\\n        --bs=4k --iodepth=16 --runtime=40 --time_based --output-format=json \\\n        | jq '.jobs[0].write.iops|floor')\n  printf \"%-6s seq=%5s MB\/s  par8=%5s MB\/s  4k-randw=%6s iops\\n\" $fs $seq $par $smf\n  rm -f $mnt\/t.bin $mnt\/r.bin; umount $mnt\n}\nfor fs in ext4 xfs btrfs; do bench $fs; done<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run it twelve hours apart on the same instance and compare. If the second run disagrees by more than 20%, your host is contended and no filesystem choice will fix that \u2014 which is itself a useful finding about the plan.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking about it. On a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1523","post","type-post","status-publish","format-standard","hentry","category-vps-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression\" \/>\n<meta property=\"og:description\" content=\"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-27T23:13:15+00:00\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/\",\"name\":\"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-10-27T23:13:15+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression - Virtual Servers VPS Blog","description":"Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/","og_locale":"en_US","og_type":"article","og_title":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression","og_description":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression","og_url":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-10-27T23:13:15+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/","url":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/","name":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-10-27T23:13:15+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"Ext4 has been the default Linux filesystem for long enough that most administrators never choose it \u2014 they inherit it from the installer and stop thinking","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/ext4-vs-xfs-vs-btrfs-vps-benchmark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ext4 vs XFS vs Btrfs on a VPS: Measured Throughput, Multi-Writer Scaling and Compression"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=1523"}],"version-history":[{"count":1,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1523\/revisions"}],"predecessor-version":[{"id":1526,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/1523\/revisions\/1526"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=1523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=1523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=1523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}