1*4bc8a10cSJohn Edward Broadbent #pragma once 2*4bc8a10cSJohn Edward Broadbent 3*4bc8a10cSJohn Edward Broadbent #include "erase.hpp" 4*4bc8a10cSJohn Edward Broadbent 5*4bc8a10cSJohn Edward Broadbent #include <stdplus/fd/create.hpp> 6*4bc8a10cSJohn Edward Broadbent #include <stdplus/fd/managed.hpp> 7*4bc8a10cSJohn Edward Broadbent 8*4bc8a10cSJohn Edward Broadbent namespace estoraged 9*4bc8a10cSJohn Edward Broadbent { 10*4bc8a10cSJohn Edward Broadbent 11*4bc8a10cSJohn Edward Broadbent using stdplus::fd::ManagedFd; 12*4bc8a10cSJohn Edward Broadbent 13*4bc8a10cSJohn Edward Broadbent class Zero : public Erase 14*4bc8a10cSJohn Edward Broadbent { 15*4bc8a10cSJohn Edward Broadbent public: 16*4bc8a10cSJohn Edward Broadbent /** @brief Creates a zero erase object. 17*4bc8a10cSJohn Edward Broadbent * 18*4bc8a10cSJohn Edward Broadbent * @param[in] inDevPath - the linux device path for the block device. 19*4bc8a10cSJohn Edward Broadbent */ 20*4bc8a10cSJohn Edward Broadbent Zero(std::string_view inDevPath) : Erase(inDevPath) 21*4bc8a10cSJohn Edward Broadbent {} 22*4bc8a10cSJohn Edward Broadbent 23*4bc8a10cSJohn Edward Broadbent /** @brief writes zero to the drive 24*4bc8a10cSJohn Edward Broadbent * and throws errors accordingly. 25*4bc8a10cSJohn Edward Broadbent * 26*4bc8a10cSJohn Edward Broadbent * @param[in] bytes - Size of the block device 27*4bc8a10cSJohn Edward Broadbent * @param[in] managedFd - the file descriptor for the open drive 28*4bc8a10cSJohn Edward Broadbent */ 29*4bc8a10cSJohn Edward Broadbent void writeZero(uint64_t driveSize, ManagedFd& fd); 30*4bc8a10cSJohn Edward Broadbent 31*4bc8a10cSJohn Edward Broadbent /** @brief verifies the uncompressible random pattern is on the drive 32*4bc8a10cSJohn Edward Broadbent * and throws errors accordingly. 33*4bc8a10cSJohn Edward Broadbent * 34*4bc8a10cSJohn Edward Broadbent * @param[in] bytes - Size of the block device 35*4bc8a10cSJohn Edward Broadbent * @param[in] managedFd - the file descriptor for the open drive 36*4bc8a10cSJohn Edward Broadbent */ 37*4bc8a10cSJohn Edward Broadbent void verifyZero(uint64_t driveSize, ManagedFd& fd); 38*4bc8a10cSJohn Edward Broadbent 39*4bc8a10cSJohn Edward Broadbent private: 40*4bc8a10cSJohn Edward Broadbent /* @brief the size of the blocks in bytes used for write and verify. 41*4bc8a10cSJohn Edward Broadbent * 32768 was also tested. It had almost identical performance. 42*4bc8a10cSJohn Edward Broadbent */ 43*4bc8a10cSJohn Edward Broadbent static constexpr size_t blockSize = 4096; 44*4bc8a10cSJohn Edward Broadbent }; 45*4bc8a10cSJohn Edward Broadbent 46*4bc8a10cSJohn Edward Broadbent } // namespace estoraged 47