{"id":834,"date":"2026-08-08T22:47:38","date_gmt":"2026-08-08T22:47:38","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=834"},"modified":"2026-08-08T22:47:38","modified_gmt":"2026-08-08T22:47:38","slug":"vps-disk-io-tuning-filesystems","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/","title":{"rendered":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">On a VPS, disk I\/O is usually the first performance wall you hit. CPU and RAM are easy to reason about, but storage performance depends on the host&#8217;s hardware, the hypervisor&#8217;s throttling, the filesystem, mount options, and the I\/O scheduler \u2014 all stacked on top of each other. The good news: you can measure each layer and fix the ones you control. This guide covers filesystem choice, mount options, I\/O schedulers, and how to benchmark everything with fio so you tune on data, not vibes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before tuning, know what hardware you actually have \u2014 <a href=\"https:\/\/virtualserversvps.com\/#providers\">compare VPS plans side by side<\/a> to see which providers put NVMe in your plan tier, because no amount of tuning fixes a spinning disk.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 0 \u2014 Know your storage type<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three questions determine your ceiling. Is the disk local NVMe, local SSD, network block storage (SAN), or HDD? Is it shared with other tenants? Is the hypervisor throttling IOPS? Find out with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lsblk -d -o name,rota,size,model\ncat \/sys\/block\/vda\/queue\/rotational<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>rota=1<\/code> means a spinning disk; <code>rota=0<\/code> means SSD\/NVMe. Network block storage (common on cloud providers) adds network latency on top of the disk, which is why its IOPS numbers are lower but consistent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Filesystem choice: ext4 vs. XFS vs. btrfs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Modern distributions default to ext4, and for most VPS workloads that is the right answer: mature, fast on small files, and trivially repairable. XFS wins for large files and high sustained throughput (big databases, media, backups). btrfs adds checksums, snapshots, and compression, but its metadata overhead and COW behavior cost performance on small disks, and it needs monitoring. Do not choose btrfs purely for snapshots on a 40&nbsp;GB VPS \u2014 use provider-level snapshots instead.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>ext4<\/th><th>XFS<\/th><th>btrfs<\/th><\/tr><\/thead><tbody><tr><td>Best for<\/td><td>General web hosting, small files<\/td><td>Large files, high throughput<\/td><td>Snapshots, checksums, compression<\/td><\/tr><tr><td>Max file size<\/td><td>16&nbsp;TiB<\/td><td>8&nbsp;EiB<\/td><td>16&nbsp;EiB<\/td><\/tr><tr><td>Checksums<\/td><td>No<\/td><td>Yes (metadata)<\/td><td>Yes (data + metadata)<\/td><\/tr><tr><td>Online resize<\/td><td>Grow only<\/td><td>Grow\/shrink<\/td><td>Grow\/shrink<\/td><\/tr><tr><td>Small-disk overhead<\/td><td>Low<\/td><td>Low<\/td><td>Higher (metadata)<\/td><\/tr><tr><td>Verdict<\/td><td>Default choice<\/td><td>Databases, media<\/td><td>Only if you need its features<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Mount options that matter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your <code>\/etc\/fstab<\/code> line controls write behavior. For SSD\/NVMe-backed VPS, the practical set is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UUID=xxxx \/ ext4 defaults,noatime,discard 0 1<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>noatime<\/strong> \u2014 stops the kernel from writing a read timestamp on every file access. On busy web servers this removes a large fraction of write I\/O. (Use <code>relatime<\/code> if you genuinely need access times.)<\/li><li><strong>discard<\/strong> \u2014 passes TRIM to the SSD so freed blocks are reclaimed. On some providers a periodic <code>fstrim -av<\/code> cron job is safer than continuous discard; test with <code>fstrim -v \/<\/code>.<\/li><li><strong>commit=30<\/strong> \u2014 batches ext4 journal commits every 30s instead of 5s, cutting journal write frequency at the cost of up to 30s of data loss on a hard crash. Fine for caches, wrong for databases.<\/li><li><strong>nofail<\/strong> \u2014 essential for optional\/network mounts so the system boots even if the volume is missing.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">I\/O scheduler: none vs. mq-deadline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Modern kernels default to <code>none<\/code> (noop) for NVMe and <code>mq-deadline<\/code> for SATA, and the defaults are usually right. <code>none<\/code> hands requests straight to the device, which is correct for NVMe where the drive does its own queuing. <code>mq-deadline<\/code> reorders requests to bound latency, which helps spinning disks and some SATA SSDs. Check what is active:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/sys\/block\/vda\/queue\/scheduler\n# set persistently via a udev rule\necho 'ACTION==\"add|change\", KERNEL==\"vd*\", ATTR{queue\/scheduler}=\"none\"' &gt; \/etc\/udev\/rules.d\/60-iosched.rules<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Also worth setting: <code>queue\/nr_requests<\/code> higher (512) for NVMe, and for virtualized disks disable the elevator entirely \u2014 the hypervisor is already doing the heavy scheduling.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Benchmark with fio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>fio<\/code> is the standard tool. Install it (<code>apt install fio<\/code>) and run the two benchmarks that matter for web workloads \u2014 random 4K reads (database pattern) and sequential writes (log\/backup pattern):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fio --name=randread --rw=randread --bs=4k --size=1G \\\n    --iodepth=32 --ioengine=libaio --direct=1 --numjobs=4\n\nfio --name=seqwrite --rw=write --bs=1M --size=2G \\\n    --iodepth=16 --ioengine=libaio --direct=1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>--direct=1<\/code> to bypass the page cache, or you will benchmark RAM instead of disk. The reported <code>IOPS<\/code> and <code>latency (clat)<\/code> lines are what you read. Quick reality check for a single 4K reader on modern VPS storage:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>4K random read<\/th><th>Good<\/th><th>OK<\/th><th>Poor<\/th><\/tr><\/thead><tbody><tr><td>IOPS<\/td><td>40,000+<\/td><td>10,000\u201340,000<\/td><td>&lt;5,000<\/td><\/tr><tr><td>Avg latency<\/td><td>&lt;1&nbsp;ms<\/td><td>1\u20135&nbsp;ms<\/td><td>&gt;10&nbsp;ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Run the benchmark three times at different hours. If IOPS vary wildly between runs, the storage is shared and throttled \u2014 that is a provider limitation no mount option fixes, and a strong reason to <a href=\"https:\/\/virtualserversvps.com\/#providers\">see the full specs<\/a> of providers that advertise dedicated NVMe before renewing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Putting it together<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A sane baseline for a Linux VPS: ext4 with <code>noatime<\/code>, scheduler <code>none<\/code> on NVMe, a weekly <code>fstrim<\/code>, and a recorded fio baseline in your runbook so you can spot degradation before users do. Filesystem and scheduler changes give you maybe 5\u201315% \u2014 choosing NVMe-backed storage in the first place gives you 10\u201350x. Tune the layers you control, but buy the hardware that sets the ceiling.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>On a VPS, disk I\/O is usually the first performance wall you hit. CPU and RAM are easy to reason about, but storage performance depends on the host&#8217;s hardware, the&#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":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-834","post","type-post","status-publish","format-standard","hentry","category-performance-optimization"],"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>VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks - Virtual Servers VPS Blog<\/title>\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\/vps-disk-io-tuning-filesystems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks\" \/>\n<meta property=\"og:description\" content=\"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-08T22:47:38+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/\",\"name\":\"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-08-08T22:47:38+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks\"}]},{\"@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":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks - Virtual Servers VPS Blog","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\/vps-disk-io-tuning-filesystems\/","og_locale":"en_US","og_type":"article","og_title":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks","og_description":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks","og_url":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-08-08T22:47:38+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/","url":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/","name":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-08-08T22:47:38+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/vps-disk-io-tuning-filesystems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"VPS Disk I\/O Tuning: Filesystem Choices, Mount Options, and fio Benchmarks"}]},{"@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\/834","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=834"}],"version-history":[{"count":1,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/834\/revisions"}],"predecessor-version":[{"id":835,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/834\/revisions\/835"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}