Static provisioning of storage resources may lead to over-provisioning of resources, which increases costs, or under-provisioning, which runs the risk of violating application-level QoS goals. Toward this end, virtualization technologies have made automated provisioning of storage resources easier allowing more effective management of the resources. In this work, we present an approach that suggests a series of dynamic provisioning decisions to meet the I/O demands of a time-varying workload while avoiding unnecessary costs and Service Level Objective (SLO) violations. We also do a case-study to analyze the practical feasibility of dynamic provisioning and the associated performance effects in a virtualized environment, which forms the basis of our approach. Our approach is able to suggest the optimal provisioning decisions, for a given workload, that minimize cost and meet the SLO. We evaluate the approach using workload data obtained from real systems to demonstrate its cost-effectiveness, sensitivity to various system parameters, and runtime feasibility for use in real systems.