mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Teach zpool scrub to scrub only blocks in error log
Added a flag '-e' in zpool scrub to scrub only blocks in error log. A user can pause, resume and cancel the error scrub by passing additional command line arguments -p -s just like a regular scrub. This involves adding a new flag, creating new libzfs interfaces, a new ioctl, and the actual iteration and read-issuing logic. Error scrubbing is executed in multiple txg to make sure pool performance is not affected. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Co-authored-by: TulsiJain tulsi.jain@delphix.com Signed-off-by: George Amanakis <gamanakis@gmail.com> Closes #8995 Closes #12355
This commit is contained in:
committed by
Brian Behlendorf
parent
e34e15ed6d
commit
482eeef804
+18
-1
@@ -1036,6 +1036,7 @@ typedef enum pool_scan_func {
|
||||
POOL_SCAN_NONE,
|
||||
POOL_SCAN_SCRUB,
|
||||
POOL_SCAN_RESILVER,
|
||||
POOL_SCAN_ERRORSCRUB,
|
||||
POOL_SCAN_FUNCS
|
||||
} pool_scan_func_t;
|
||||
|
||||
@@ -1099,6 +1100,20 @@ typedef struct pool_scan_stat {
|
||||
uint64_t pss_pass_scrub_spent_paused;
|
||||
uint64_t pss_pass_issued; /* issued bytes per scan pass */
|
||||
uint64_t pss_issued; /* total bytes checked by scanner */
|
||||
|
||||
/* error scrub values stored on disk */
|
||||
uint64_t pss_error_scrub_func; /* pool_scan_func_t */
|
||||
uint64_t pss_error_scrub_state; /* dsl_scan_state_t */
|
||||
uint64_t pss_error_scrub_start; /* error scrub start time */
|
||||
uint64_t pss_error_scrub_end; /* error scrub end time */
|
||||
uint64_t pss_error_scrub_examined; /* error blocks issued I/O */
|
||||
/* error blocks to be issued I/O */
|
||||
uint64_t pss_error_scrub_to_be_examined;
|
||||
|
||||
/* error scrub values not stored on disk */
|
||||
/* error scrub pause time in milliseconds */
|
||||
uint64_t pss_pass_error_scrub_pause;
|
||||
|
||||
} pool_scan_stat_t;
|
||||
|
||||
typedef struct pool_removal_stat {
|
||||
@@ -1120,6 +1135,7 @@ typedef enum dsl_scan_state {
|
||||
DSS_SCANNING,
|
||||
DSS_FINISHED,
|
||||
DSS_CANCELED,
|
||||
DSS_ERRORSCRUBBING,
|
||||
DSS_NUM_STATES
|
||||
} dsl_scan_state_t;
|
||||
|
||||
@@ -1360,7 +1376,7 @@ typedef enum {
|
||||
*/
|
||||
typedef enum zfs_ioc {
|
||||
/*
|
||||
* Core features - 81/128 numbers reserved.
|
||||
* Core features - 88/128 numbers reserved.
|
||||
*/
|
||||
#ifdef __FreeBSD__
|
||||
ZFS_IOC_FIRST = 0,
|
||||
@@ -1455,6 +1471,7 @@ typedef enum zfs_ioc {
|
||||
ZFS_IOC_WAIT_FS, /* 0x5a54 */
|
||||
ZFS_IOC_VDEV_GET_PROPS, /* 0x5a55 */
|
||||
ZFS_IOC_VDEV_SET_PROPS, /* 0x5a56 */
|
||||
ZFS_IOC_POOL_SCRUB, /* 0x5a57 */
|
||||
|
||||
/*
|
||||
* Per-platform (Optional) - 8/128 numbers reserved.
|
||||
|
||||
Reference in New Issue
Block a user