Back to Article List

Storage VPS vs object storage vs NAS: Where big data lives

Storage VPS vs object storage vs NAS: Where big data lives

By default a storage VPS arrives as one large unformatted block device. There's a small NVMe or SSD system disk with the OS on it, and next to it /dev/vdb (or a single big /dev/vda with the bulk space unpartitioned), backed by hard disks in the host, which you partition, format and mount yourself. That's the whole product: a virtual machine whose disk is measured in terabytes and priced for capacity, with the same root access, IP and firewall as any other VPS. Object storage and a NAS solve the same "where do I put 8 TB" problem with completely different shapes, and choosing between the three is mostly about which shape the data and the software reading it prefer.

Commands assume Ubuntu 24.04 LTS.

The three storage models

Storage VPS

A VM on a host built for capacity: many HDDs in a redundant array, sometimes with an SSD tier for the OS disks or as a cache, and a hypervisor that carves the array into large virtual disks. You get a block device and POSIX on top of it once you've formatted it. Any Linux software works, because from inside the VM this is a disk. What differs from a standard VPS, beyond the size, is latency: random reads go to spinning platters. The general shape of a VPS, and the buying checklist for one, is in what a VPS server is; everything there about KVM, bandwidth terms and snapshots applies here unchanged. Snapshots of a multi-terabyte disk are slow, and some providers cap them by size.

Each random read on an HDD-backed volume costs a head seek plus half a rotation on a 7,200 rpm platter, somewhere around 8 to 15 ms, where an NVMe disk answers in the hundreds of microseconds. The array behind the VM helps with throughput and with parallel requests but can't make a single seek faster, while sequential reads in large blocks stream at hundreds of megabytes per second. Spinning disks stream well and seek badly, and that single fact sorts the use cases below.

S3-style object storage

An HTTP API. You PUT a blob under a key in a bucket and GET it back later. There's no filesystem, no directories in the real sense (the slashes in keys are a convention that listing calls emulate), no partial writes and no POSIX semantics: you can't open an object and seek into it to modify byte 4,000. Pricing is per gigabyte-month plus per request plus per gigabyte of egress, so the bill depends on how the data is used as much as on how much of it there is. The durability marketing is real as far as it goes: AWS designs S3 for eleven nines of durability ("11 nines" in its own docs), achieved by storing objects "across a minimum of three Availability Zones in an AWS Region" per their durability documentation, and the S3-compatible providers make similar claims with their own replication. That protects against drives and datacenters. It does nothing against you deleting the wrong prefix, which is why the same page tells you to turn on versioning.

NAS at home or in the office

A box with drives in it on your LAN. Synology, QNAP, TrueNAS on an old PC, a Raspberry Pi with a USB enclosure. You buy the hardware up front, you pay for the electricity, and the data sits within reach of a burst pipe, a burglar, a house move or a lightning strike. Access from outside runs over your home upload, which for most residential connections is a fraction of the download and the reason a NAS is a poor origin for anything people fetch from the internet. On the LAN it's the fastest of the three by a wide margin, ten gigabit if you've wired for it, and it needs no monthly payment.

Use cases and where they fit

Backups

A restic or Borg repository is a set of large, immutable chunk files that get written once and read back during a restore or a prune. Sequential-friendly, append-mostly, and the software does its own encryption and deduplication so the target only needs to hold files. A storage VPS with SSH is the natural repository target for either tool, and the systemd timers and prune schedule from automated VPS backups with restic and Borg point at it with a one-line change to the repository URL. Object storage works too, with restic talking S3 directly and Borg needing rclone in front of it. The choice between them for backups is bill shape: object storage charges for the restore egress, which is fine if you restore once a year and unpleasant if you test restores monthly like you should.

Media libraries

Jellyfin and Plex read large files sequentially at a bitrate of a few megabits to a few tens of megabits per stream. That is the friendliest possible pattern for an HDD, and a storage VPS serving a family's library over unmetered bandwidth is one of the two or three best uses of the product. The metadata database (SQLite for Jellyfin) and the transcode cache want the NVMe system disk, so mount the bulk volume for the library only and leave the config directory where it is. The port list and reverse proxy layout from the Jellyfin ports guide don't change on a storage VPS; only the library path does. Hardware transcoding is the one thing this product can't give you.

Nextcloud and Immich

Both keep a database (Postgres for Immich, Postgres or MariaDB for Nextcloud) and a large tree of user files. The database and the application go on the NVMe system disk, the files go on the bulk volume via the data directory setting. Immich's thumbnail generation and machine-learning pass read every photo once, which is a long sequential job on first import and then rarely again. The compose file from the Immich port guide needs one edit for this layout, the UPLOAD_LOCATION path. If you put the Postgres data directory on the HDD volume instead, expect the web UI to feel slow in a way no amount of CPU fixes.

Archives, seedboxes and log retention

Cold archives are the easy case: written once, read rarely, sequentially. Storage VPS or object storage both fit; object storage wins if you want the multi-site durability without running anything, a storage VPS wins if you want a filesystem you can grep and rsync against. A seedbox is a storage VPS use case almost by definition, since it's all sequential I/O in both directions and egress-heavy, and the unmetered bandwidth is the product. Long-term log retention (a year of Loki chunks or compressed syslog) is sequential on write and rare on read, and a storage VPS with logrotate compressing into the bulk volume does it well.

Database files

Not on HDD. A Postgres or MySQL data directory does random 8 KB or 16 KB reads and writes all day, and every one of them is a seek at 10 ms. A query that touches a thousand pages the cache doesn't hold takes ten seconds where NVMe takes a tenth of one. Keep databases on NVMe, on the storage VPS's system disk if they're small or on a separate standard VPS if they're not. The same applies to anything with a similar pattern: mail spools, Docker's image layers, package caches, a busy Nextcloud file cache table.

Redundancy is the provider's job, backups are yours

The HDD array under a storage VPS is redundant. Drives fail regularly at scale and the provider's RAID or replication absorbs it without the VM noticing, the same as on any VPS. That covers a drive. It does not cover an rm -rf in the wrong directory, a ransomware process encrypting your library, a corrupted filesystem after a hard reset or a billing dispute that ends with the VM deleted. Those need a second copy somewhere else, and a storage VPS holding the only copy of a photo collection is a NAS with extra steps. My own arrangement is a storage VPS as the primary and an object storage bucket as the second copy, synced nightly, on the theory that the two fail for different reasons. Reading a provider's note on where your data lives and who can access it before deciding what the second copy needs to be is a habit I'd recommend, because it tells you which failures the provider covers and which are yours. The list of yours is always longer.

Filesystem choice on the bulk volume

ext4 or XFS. Both are fine, both are in the Ubuntu kernel, and the difference for a multi-terabyte volume of large files is small enough that I'd pick XFS and not think about it again. XFS handles very large files and very large directories with less fuss, its allocation groups parallelise better on a big device, and it was designed for exactly this shape of storage. ext4 is the safer pick if you might need to shrink the filesystem later, since XFS can't shrink at all.

sudo mkfs.xfs -L bulk /dev/vdb
sudo mkdir -p /mnt/bulk
echo 'LABEL=bulk /mnt/bulk xfs defaults,noatime 0 2' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload
sudo mount /mnt/bulk

noatime stops every read from becoming a metadata write, which on a media library saves a seek per file open. If the provider grows the volume later, xfs_growfs /mnt/bulk expands the filesystem online; the ext4 equivalent is resize2fs.

ZFS is the one people ask about and the one I'd leave alone inside a VM. Its strengths (checksums that self-heal from a mirror, snapshots, send/receive) mostly need ZFS to see the raw disks, and on a VPS it sees one virtual device that the provider's RAID already sits under. The OpenZFS hardware guide makes the general point that a RAID layer beneath ZFS "will limit opportunities for ZFS to perform self healing on checksum failures", and a virtual disk is that situation exactly: ZFS will detect a corrupt block and have no second copy to repair it from, unless you set copies=2 and halve your capacity. Add the ARC's appetite for RAM on a VM that was sized for storage, and ext4 or XFS plus a good backup is the better trade. On a dedicated server with the drives exposed, ZFS is a different conversation.

Make room for every file you'll ever keep

Keep your backups and media libraries on reliable storage with unmetered bandwidth and a cost that stays predictable as your archive grows.
Faktureras

VPS.H1

$6.99 Save  14 %
$5.99 Månadsvis
  • 1 vCPU AMD EPYC
  • 2 GB RAM-minne
  • ✔HDD lagring
  • ✔Obegränsad bandbredd
  • ✔ IPv4 och IPv6 ingår IPv6-stöd är för närvarande inte tillgängligt i Frankrike eller Nederländerna.
  • ✔Hantering av brandvägg
  • ✔Kostnadsfri serverövervakning
  • ✔KVM-virtualisering
Beställ nu Upptagen - Tillgänglig

VPS.H3

$24.99 Save  20 %
$19.99 Månadsvis
  • 4 vCPU AMD EPYC
  • 8 GB RAM-minne
  • ✔HDD lagring
  • ✔Obegränsad bandbredd
  • ✔ IPv4 och IPv6 ingår IPv6-stöd är för närvarande inte tillgängligt i Frankrike eller Nederländerna.
  • ✔Hantering av brandvägg
  • ✔Kostnadsfri serverövervakning
  • ✔KVM-virtualisering
Beställ nu Upptagen - Tillgänglig

VPS.H4

$36.49 Save  18 %
$29.99 Månadsvis
  • 6 vCPU AMD EPYC
  • 12 GB RAM-minne
  • ✔HDD lagring
  • ✔Obegränsad bandbredd
  • ✔ IPv4 och IPv6 ingår IPv6-stöd är för närvarande inte tillgängligt i Frankrike eller Nederländerna.
  • ✔Hantering av brandvägg
  • ✔Kostnadsfri serverövervakning
  • ✔KVM-virtualisering
Beställ nu Upptagen - Tillgänglig

*VAT excluded.

INCLUDED WITH EVERY PLAN

✓ No setup fees ✓1 Gbps network
✓ Free server monitoring ✓ Firewall management ✓24/7 support ✓ KVM virtualization

rsync and rclone as the glue

Between a NAS and a storage VPS the tool is rsync over SSH, and one line does most jobs:

rsync -avh --partial --delete /volume1/photos/ user@STORAGE_VPS:/mnt/bulk/photos/

--partial keeps a half-transferred file so a dropped connection resumes instead of restarting, which matters when the upload side is a home connection and the files are 4 GB video. --delete mirrors deletions, so leave it out if the VPS is meant to be the archive that keeps what the NAS forgets.

Between anything and object storage the tool is rclone, which speaks S3 and forty other backends and has the same sync, copy and move verbs. rclone sync /mnt/bulk/backups remote:bucket/backups is the nightly job in my setup. Its --transfers and --checkers flags are what you tune when a bucket with a million small objects makes the run take hours.

Ubuntu 24.04 ships mkfs.xfs and rsync 3.2.7; dpkg-query finds no rclone package

xfsprogs and rsync are already on a fresh Ubuntu 24.04 VPS; rclone is a separate install.

Mounting object storage with rclone

The hybrid is a storage VPS for the hot files and an S3 bucket mounted into the filesystem for the cold ones, so software that only understands paths can see both. rclone mount does it over FUSE. The docs are honest about the limits: without a cache mode it "can only write files sequentially, it can only seek when reading", and files can't be opened for both read and write. With --vfs-cache-mode full, which the rclone mount documentation says "should support all normal file system operations", rclone keeps a local cache on disk and the mount behaves like a slow filesystem. Point the cache directory at the NVMe system disk.

rclone mount remote:bucket /mnt/cold --vfs-cache-mode full \
    --cache-dir /var/cache/rclone --daemon

It works well for a Jellyfin library of rarely watched films and badly for anything that writes randomly, and every read that misses the cache is an S3 GET with the request and egress charge attached. I run it for an archive tier and would not run a database, a Docker volume or a Nextcloud data directory on it.

A short digression on where the FUSE approach came from. s3fs did this first, in the late 2000s, and had a reputation for hangs and half-written files that put a generation of admins off the idea. rclone's VFS layer, added years later, solved most of it by caching whole files on local disk before letting an application see them, which is a less elegant design and a much more reliable one.

The decision in one pass

Data that software reads through a filesystem, sequentially and often, with a lot of it going out to the internet: storage VPS. Media libraries, seedboxes, backup repositories, Nextcloud and Immich file trees, log archives. Where a provider's storage line is HDD-backed and built for bulk, as the storage VPS hosting plans are, that's the product for this column. Check that the system disk is separate and solid-state before ordering.

Data that is written once and read rarely, needs to survive a whole site failing, and is accessed by software that speaks S3 natively: object storage. Second copies of backups, cold archives, static assets for a website, anything a hyperscaler-hosted app already expects in a bucket. Where the compute in front of that data belongs, hyperscaler or VPS, is a bill-shape question that VPS vs cloud hosting works through, and the answer is often a VPS talking to a bucket. The bucket's egress line stays small as long as the VPS does the serving.

Data that lives on your LAN and is used from your LAN, in volumes where a monthly bill would exceed the hardware within a year or two: NAS. With the second copy of it somewhere that isn't in the same building.

Data with random I/O: none of the three. NVMe, on a standard VPS.

What I can't tell you with confidence is how far a provider's SSD cache in front of the HDD array changes the random-read picture on a busy storage VPS. Cache sizes and policies differ from one provider to the next, and so does how much they help directory listings compared with large reads. Ask the provider how the cache is sized before you put anything seek-heavy on the volume.

Questions?

How long does it take to upload a few terabytes to a storage VPS?

At a 50 Mbps home upload, 4 TB needs about seven and a half days of continuous transfer, and no tool beats that because the uplink is the ceiling. Every doubling of upload speed halves the time, so the first copy is often faster from a machine with a better connection, such as an old server you're moving away from. Use rsync -P (short for --partial --progress) and simply re-run the same command after a drop, since rsync's quick check skips every file whose size and modification time already match on the VPS.

About the author

J. Brennan

Jack Brennan started as a field technician in New South Wales and later spent several years maintaining infrastructure in commercial data centres. Procedures and training material gradually became part of the job, and documentation followed from there.

He writes about bare-metal servers, storage, hardware troubleshooting and the practical side of moving data between physical and virtual environments. Installation guides are another regular subject, especially where assumptions about networking or server hardware can trip up somebody doing the job for the first time. Jack lives near Newcastle, Australia, with two "majestic" greyhounds. He has restored motorcycles since his 20s, particularly Japanese bikes from the 1980s, and volunteers backstage at a community theatre on lighting and set construction.

Never run out of space again

Keep backups, archives and media on reliable storage with unmetered bandwidth and a cost per gigabyte that stays low as the years add up. Your first VPS comes with a 30-day money-back guarantee.