blob: e8675e865559924dcbf1023c4d7f4c7e4f1824bb [file] [log] [blame]
John Edward Broadbent4bc8a102021-12-30 16:11:49 -08001#pragma once
2
3#include "erase.hpp"
4
5#include <stdplus/fd/create.hpp>
6#include <stdplus/fd/managed.hpp>
7
8namespace estoraged
9{
10
11using stdplus::fd::ManagedFd;
12
13class Zero : public Erase
14{
15 public:
16 /** @brief Creates a zero erase object.
17 *
18 * @param[in] inDevPath - the linux device path for the block device.
19 */
20 Zero(std::string_view inDevPath) : Erase(inDevPath)
21 {}
22
23 /** @brief writes zero to the drive
24 * and throws errors accordingly.
25 *
26 * @param[in] bytes - Size of the block device
John Edward Broadbent4bc8a102021-12-30 16:11:49 -080027 */
John Edward Broadbent69786762022-01-21 14:16:23 -080028 void writeZero(uint64_t driveSize);
John Edward Broadbent4bc8a102021-12-30 16:11:49 -080029
30 /** @brief verifies the uncompressible random pattern is on the drive
31 * and throws errors accordingly.
32 *
33 * @param[in] bytes - Size of the block device
John Edward Broadbent4bc8a102021-12-30 16:11:49 -080034 */
John Edward Broadbent69786762022-01-21 14:16:23 -080035 void verifyZero(uint64_t driveSize);
John Edward Broadbent4bc8a102021-12-30 16:11:49 -080036
37 private:
38 /* @brief the size of the blocks in bytes used for write and verify.
39 * 32768 was also tested. It had almost identical performance.
40 */
41 static constexpr size_t blockSize = 4096;
42};
43
44} // namespace estoraged