Why Object Storage Still Matters
In Part 2, I wrote a line that, at the time, felt almost like a side comment — something I typed without fully appreciating how much it would change the direction of the story: “BREAKING NEWS: The FlashArray now supports Object??? What in the world? I may need to write an article about that!!” That reaction wasn’t planned, and it definitely wasn’t me being clever. It was me looking at the GUI and thinking, “that can’t be right… can it?” It didn’t line up with how I’ve been modeling storage architectures in my head for years, which usually means one of two things: either something fundamentally changed… or I’ve been confidently wrong about part of this for a while. And if I’m being completely honest, there was also a second reaction happening in parallel — one that I didn’t write down at the time because it sounded slightly ridiculous even in my own head: “Wait… do I actually understand why object storage exists in the first place? And more importantly… what exactly was wrong with files?” That’s the part nobody likes to admit out loud. We’ve all spent years confidently explaining block, file, and object as if we were born with that knowledge, when in reality most of us learned it incrementally, retroactively, and with just enough conviction to sound credible in front of a customer. Object storage, in particular, has always carried this aura of inevitability — like of course it’s better, of course it scales, of course it’s what modern applications need — without always forcing us to question why the previous model stopped being enough. Because for as long as most of us have been designing infrastructure, object storage has not simply been another protocol layered onto an existing system. It has represented a fundamentally different way of organizing and accessing data, one that required its own architectural approach, its own scaling model, and, more often than not, its own dedicated platform. The separation between block, file, and object was not arbitrary; it was a reflection of how deeply different those paradigms were in terms of metadata handling, access patterns, and performance expectations. This is precisely why platforms such as Everpure FlashBlade exist in the first place. They were not created as extensions of traditional storage systems but as purpose-built architectures designed to treat unstructured data — and particularly object data — as a first-class citizen. The use of distributed metadata services, sharded across independent nodes, combined with a key-value store storage model, allows such systems to achieve levels of parallelism and throughput that simply cannot be replicated within a controller-based design. In that context, object storage is not something that is “added” to the system; it is the system. Which is why seeing S3 support appear on FlashArray required a pause. Not excitement. Not skepticism alone. Something closer to intellectual friction. Reconciling Two Architectural Worlds The most important step in understanding what FlashArray has introduced is to resist the temptation to treat it as a direct comparison to FlashBlade. These aren’t two different ways of solving the same problem. They’re two different answers to two different problems—and pretending otherwise is where people get themselves into trouble. FlashBlade is built for object, not adapted to it. S3 talks directly to a distributed engine that thinks in objects, not files pretending to be objects. Metadata is spread across blades instead of becoming a centralized choke point, and the whole system scales the way modern workloads actually need it to. There’s no file system layer to fight with, no directory structure to navigate, no POSIX semantics getting in the way. It just does what you’d expect when you remove all of that: it goes fast, it scales cleanly, and it keeps up with workloads like HPC, AI and analytics without breaking a sweat. FlashArray takes a very different path, and in reality, it’s not what most people expect. It doesn’t try to reinvent itself as an object platform, and it doesn’t throw an S3 gateway in front of the array and call it a day. With Purity 6.10.5+, S3 just shows up as another protocol the system understands, right next to block and file. That distinction matters more than it seems. This isn’t something duct-taped on the side — it’s part of the same control plane, the same data path, the same system you’ve already been running. But let’s not pretend it turned into FlashBlade overnight. This is still a controller-driven architecture. The primary controller does the heavy lifting — handling requests, authenticating them, coordinating operations — before anything actually hits the storage engine. Which means it behaves differently, especially as workloads scale. So it ends up in this interesting middle ground. Not a native object system in the pure sense, but not a hack either. Just a different way of exposing what’s already there. The Translation Layer and Its Consequences It would be irresponsible to discuss FlashArray S3 without explicitly addressing the implications of this design. Even with its native integration into Purity, S3 operations are still subject to the realities of a controller-bound architecture. Every request must be processed, authenticated, and coordinated before it is executed, introducing a measurable difference in behavior compared to both native block operations and distributed object systems. The most immediate effect is latency. While FlashArray continues to deliver sub-150 microsecond performance for block workloads, S3 operations typically operate at higher latencies (in 1 millisecond range) due to the additional processing steps involved. This is not a flaw; it is the natural outcome of introducing a protocol that was designed for scale and flexibility into a system optimized for low-latency transactional workloads. Metadata handling further reinforces this distinction. FlashBlade distributes metadata across its architecture, enabling massive parallelism and consistent performance at scale. FlashArray processes metadata through its controller framework, which introduces natural serialization points under high concurrency. As workloads become increasingly metadata-heavy — particularly with small objects — this difference becomes more pronounced. The system also enforces clearly defined operational limits to maintain predictable performance. As of Purity 6.10.5+, FlashArray supports up to 250 S3 buckets per array and a maximum of 1,000,000 objects per bucket. FlashArray Object Store Limits Object storage operates at the array scope and does not integrate with multi-tenancy or “realms”, which has implications for service provider models and strict tenant isolation requirements. These constraints are not arbitrary limitations; they are guardrails that ensure the system behaves consistently within its architectural boundaries. Where the Architecture Becomes Secondary Having established those boundaries, the conversation naturally shifts from “how it works” to “why it matters”. In many enterprise environments, particularly within SLED organizations, the challenge is not achieving exabyte-scale throughput or supporting billions of objects. The challenge is delivering capabilities in a way that is operationally sustainable, economically efficient, and aligned with existing infrastructure. This is where FlashArray’s approach becomes compelling. By exposing object storage within the same platform that already supports block and file workloads, it eliminates the need to introduce a separate system, a separate operational model, and a separate set of dependencies. The same management interface, the same automation framework, and the same data services extend across all protocols. More importantly, object data inherits the full set of Purity capabilities. Global inline deduplication and compression apply to S3 workloads, significantly improving storage efficiency compared to many object-native platforms. SafeMode snapshots extend immutability to object storage, providing a critical layer of protection against ransomware. ActiveCluster, combined with ActiveDR, enables a three-site resilience model that ensures data availability across multiple locations with zero RPO between primary sites. These are not incremental improvements. They represent a shift in how object storage can be consumed within an enterprise. Practical Use Cases in a Unified Model When viewed through this lens, the use cases for FlashArray S3 become both clear and grounded in reality. Development and Staging Environments Some applications rely on S3 APIs but do not require massive scale, FlashArray provides a consistent and integrated object interface without introducing additional infrastructure. Developers can build and test against a familiar model while remaining within the same operational environment. Backup and Recovery Workflows FlashArray S3 enables modern data protection strategies that leverage object storage while benefiting from flash performance, deduplication, and indelible snapshots. This combination improves both recovery times and storage efficiency. Tier-two repositories and application-integrated storage represent another natural fit. Workloads such as document management systems, logs, and archival data often require object semantics but do not justify the higher cost of a dedicated object platform. Consolidating these workloads onto FlashArray simplifies operations while maintaining reliability and performance. Where the Boundaries Still Matter None of this diminishes the importance of selecting the appropriate platform for workloads that demand a different architecture. High-performance AI pipelines, large-scale analytics environments, and use cases requiring massive parallelism remain firmly within the domain of FlashBlade. The ability to scale performance linearly, distribute metadata across many nodes, and support billions of objects is not optional in these scenarios — it is essential. What has changed is not the relevance of those systems, but the necessity of deploying them for every object storage use case. A Subtle but Significant Shift The introduction of S3 on FlashArray does not represent a replacement of one architecture with another. It represents a convergence of capabilities within a unified operational framework. Object storage, in this model, is no longer a destination that requires its own platform. It becomes a capability — one of several ways to access and manage data within the same system. That shift is easy to overlook, but its implications are significant. It allows organizations to design around outcomes rather than protocols, to reduce complexity without sacrificing capability, and to align infrastructure more closely with the needs of modern applications. Closing Reflection Looking back at that line in Part 2, it is clear that the reaction was not just about a new feature appearing in the interface. It was about the recognition — however incomplete at the time — that something foundational was beginning to change. Object storage did not suddenly become simpler, nor did it lose the architectural complexity that defines it. What changed is where it lives. And once that becomes clear, you start asking a slightly uncomfortable but very honest question: If this works… and it works well enough for most of what I actually need… why was I so convinced it had to live somewhere else in the first place? That is usually where the interesting work begins. Appreciate you reading. Dmitry Gorbatov © 2025 Dmitry Gorbatov | #dmitrywashere183Views1like0CommentsBoosting SQL Server Backup/Restore Performance: Threads and Parallelism
In this post, we’ll discuss day 1 tuning you can do on your database hosts to take full advantage of your new high-performance backup storage. We’ll go over a few tricks around database layout and backup configuration for maximum throughput, discuss some quirks with SMB, and finally discuss using S3 effectively.145Views1like0CommentsPure FlashArray CLI Quick References (daily feeds)
Questions Commands Explanations How to reduce the size of a Volume in Pure Flash Array purevol truncate --size 1G MY_VOL_001 Reduce the size of MY_VOL_001 to 1GB ( from current size of 8GB for example ) How to list all flash drives and NVRAM modules in a Pure Flash Array with total capacity puredrive list --total List all the flash drive modules in an Array with the total capacity figure How to disconnect volume from host in Pure Flash Array purevol disconnect MY_VOL_001 --host MY-SERVER-001 Disconnect volume MY_VOL_001 from host MY-SERVER-001. This will remove the visibility of the volume to the host. How to create a hostgroup with existing hosts in Pure Flash Array purehgroup create MY-HOSTS --hostlist MY-HOST-001,MY-HOST-002 Create hostgroup MY-HOSTS and add existing hosts MY-HOST-001 and MY-HOST-002 in to it How to stretch a POD purepod add --array PFAX70-REMOTE MYPOD001 Add the remote array PFAX70-REMOTE to the POD MYPOD001. This will stretch the POD and volume data inside the POD synchronously replicated between two arrays. The arrays in a stretched POD are considered as peers, there is no concept of source and target. Volumes within the POD will be visible in each arrays with same serial numbers. How to create multiple Volume in a Pure Flash Array purevol create --size 10G MY_VOLUME_001 MY_VOLUME_002 Create Virtual volumes MY_VOLUME_001 and MY_VOL_SIZE_002 of size 10GB How to remove hosts from hostgroups in Pure Flash Array purehgroup setattr MY-HOSTS --remhostlist MY-HOST-002,MY-HOST-003 Remove MY-HOST-002 and MY-HOST-003 from hostgroup MY-HOSTS How to delete host object in a Pure Flash Array purehost delete MY-SERVER-001 Delete host MY-SERVER-001 How to search for HBA WWN and on which FC port its been logged in to on Flash Array pureport list --initiator --raw --filter "initiator.wwn='1000000000000001'" Search for HBA WWN 1000000000000001 and on which FC port its been logged in to. How to list all the closed alerts in the Pure Flash array purealert list --filter "state='closed'" List all the closed alerts How to disconnect a specific volume from the host in Pure Flash Array purehost disconnect MY-SERVER-001 --vol MY_VOL_001 Disconnect volume MY_VOL_001 from host MY-SERVER-001. This will remove the visibility of the volume to the host. How to display the connection key that can be used to connect to a Pure Flash Array purearray list --connection-key Display the connection key that can be used to connect to the array How to list all the users configured in the Flash Array pureadmin list List all the users configured in the Flash Array How to list all the Volumes in a Pure Flash Array purevol list List all the Virtual Volume How to list all the drive modules in a Pure Flash Array purehw list --type bay List all the Drive modules in an Array How to display all the Flash Array Target Ports pureport list Display all the target ports within the Flash Array. This includes FC, iSCSI and NVME ports. This command also displays WWNs of FC ports iSCSI Qualified Names(IQNs) for iSCSI ports and NVMe Qualified Names(NQNs) for NVMe ports. How to move the volume to the pod in a Pure Flash array purevol move vol001 MYPOD001 Move the volume vol001 to the non-stretched pod. This will throw an error message if trying to add to a stretched pod. How to display the current DNS parameters configured in the Pure Flash array puredns list Display the current DNS parameters configured in the array. This includes the domain suffixes and IP addresses of the name servers How to destroy a POD purepod destroy MYPOD001 Destroy or delete POD MYPOD001. The POD must be empty and unstretched to destroy. POD will not be destructed immediately, but placed under 24hr eradication pending period. How to display the syslog server setting for a Pure Flash Array purearray list --syslogserver List the syslog server names configured to push the logs in pure array How to list all flash drives and NVRAM modules in a Pure Flash Array puredrive list List all the flash drive modules in an Array. This will also display the capacity of each module. How to monitor replica links in a Pure Flash array purepod replica-link monitor --replication Monitor the data transfer speed on the replica links on the array. If the replication link is pause, the speed will show as 0 How to list all the volumes connected to a Host purehost list MY-SERVER-001 --connect List all the volumes connected to Host MY-SERVER-001 How to list all the PODs in the Pure Flash array purepod list List all the PODs in the Pure Flash array. This will shows the arrays in POD and status of each. How to display the arraywide IO performance of a Pure Flash Array purearray monitor --interval 4 --repeat 5 Display the array-wide IO performance of a Flash Array in every 4 seconds for 5 times. How to display all the FC Ports in a controller within the Flash Arrays pureport list --raw --filter "name='CT0.FC*'" Display all the Fibre Channel Ports in Controller 0 with its WWNs in the Flash Arrays How to disconnect volume from hostgroup in Pure Flash Array purehgroup disconnect MY-HOSTS --vol MY_VOL_001 Disconnect volume MY_VOLUME_001 from hostgroup MY-HOSTS How to remove all the hosts from a hostgroup in Pure Flash Array purehgroup setattr MY-HOSTS --hostlist "" Remove all the hosts from hostgroup MY-HOSTS How to disconnect remote array from the local Pure Flash array purearray disconnect 10.0.0.1 Disconnects array 10.0.0.1 from the local array connected for remote replication. How to set the minimum password length of user accounts in a Pure Flash array pureadmin global setattr --min-password-length 8 Set the minimum length of characters required for all the local user account passwords to 8. Minimum length allowed is 1. This will not affect the existing user accounts, but all future password assignment must meet the new value. How to connect volume with hostgroup in Pure Flash Array purehgroup connect MY-HOSTS --vol MY_VOL_001 Connect volume MY_VOLUME_001 to hostgroup MY-HOSTS. This will assign a lun id to the volume. The lun id will start from 254 and go down up to 1If all LUNs in the [1...254] range are taken, Purity//FA starts at LUN 255 and counts up to the maximum LUN 16383, assigning the first available LUN to the connection. How to rename a host object in a Pure Flash Array purehost rename MY-SERVER-001 YOUR-SERVER-001 Rename host MY-SERVER-001 to YOUR-SERVER-001 How to demote a pod in Pure Flash array purepod demote MYPOD001 Demote the pod MYPOD001 How to change the bandwidth a Volume in Pure Flash Array purevol setattr --bw-limit 1M MY_VOL_001 Change the bandwidth limit of MY_VOL_001 to 1MB/s How to connect volume to host in Pure Flash Array purevol connect MY_VOL_001 --host MY-SERVER-001 Connect volume MY_VOL_001 to host MY-SERVER-001. This will Provide the R/W access to the volume.Next available lun address will used by default. How to connect a volume to multiple hosts in Pure Flash Array purehost connect MY-SERVER-001 MY-SERVER-002 --vol MY_VOL_001 Connect volume MY_VOL_001 to hosts MY-SERVER-001 and MY-SERVER-002 How to connects the local Pure Flash array to remote array for asynchronous replication using the connection key purearray connect --management-address 10.0.0.1 --type async-replication --connection-key Connects the local array to remote array 10.0.0.1 for asynchronous replication using the connection key. The Connection key will be prompted to enter. How to display all the iSCSI Ports in aFlash Array pureport list --raw --filter "name='*ETH*'" Display all the iSCSI Ports with its IQNs in the Flash Arrays How to connect multiple volumes to host in a Pure Flash Array purevol connect MY_VOL_001 MY_VOL_002 --host MY-SERVER-001 Connect volumes MY_VOL_001 and MY_VOL_002 to host MY-SERVER-001 How to create a host object in Pure Flash Array purehost create MY-SERVER-001 Create a host object called MY-SERVER-001. HBA wwns can be added later using purehost setattr command. How to create snap shot of a Volume in a Pure Flash Array purevol snap MY_VOL_001 Create snap shot of MY_VOL_001. If it is first snap then MY_VOL_001.2 will be created How to increase the size of multiple Volume in Pure Flash Array purevol setattr --size 2G MY_VOL_001 MY_VOL_002 Increase the size of MY_VOL_001 and MY_VOL_002 to 2GB ( the current size of MY_VOL_001 is 500MB and MY_VOL_002 is 1GB, for example ) How to remove hba wwn from a host object in Pure Flash Array purehost setattr MY-SERVER-001 --remwwnlist 1000000000000003 Remove HBA wwn 1000000000000003 from host MY-SERVER-001 How to create multiple host objects in a Pure Flash Array purehost create MY-SERVER-001 MY-SERVER-002 Create hosts MY-SERVER-001 and MY-HOST-002 How to display the personality of a host purehost list MY-SERVER-001 --personality Display the personality of host MY-SERVER-001 How to list the hosts and personality assigned to each purehost list --personality Display the list hosts along with the personality set against each. The personality is define using the purehost setattr command. How to unlock a locked user in Flash Array pureadmin reset testuser --lockout Unlock locked user testuser How to list all the volumes sorted by serial number in descending order on a Pure Flash Array purevol list --sort "serial-" List all the volumes sorted by serial number descending order How to create a Volume in a Pure Flash Array purevol create --size 10G MY_VOLUME_001 Create a Virtual volume called MY_VOLUME_001 of size 10GB315Views1like0Comments