Added ddrescue settings sections
This commit is contained in:
parent
bcd46d4017
commit
e88e4ab3eb
2 changed files with 40 additions and 2 deletions
|
|
@ -27,6 +27,7 @@ DDRESCUE_SETTINGS = {
|
||||||
'--min-read-rate': {'Selected': True, 'Value': '64KiB', },
|
'--min-read-rate': {'Selected': True, 'Value': '64KiB', },
|
||||||
'--reopen-on-error': {'Selected': True, },
|
'--reopen-on-error': {'Selected': True, },
|
||||||
'--retry-passes': {'Selected': True, 'Value': '0', },
|
'--retry-passes': {'Selected': True, 'Value': '0', },
|
||||||
|
'--reverse': {'Selected': False, },
|
||||||
'--test-mode': {'Selected': False, 'Value': 'test.map', },
|
'--test-mode': {'Selected': False, 'Value': 'test.map', },
|
||||||
'--timeout': {'Selected': True, 'Value': '30m', },
|
'--timeout': {'Selected': True, 'Value': '30m', },
|
||||||
'-vvvv': {'Selected': True, 'Hidden': True, },
|
'-vvvv': {'Selected': True, 'Hidden': True, },
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ MENU_ACTIONS = (
|
||||||
MENU_TOGGLES = {
|
MENU_TOGGLES = {
|
||||||
'Auto continue (if recovery % over threshold)': True,
|
'Auto continue (if recovery % over threshold)': True,
|
||||||
'Retry (mark non-rescued sectors "non-tried")': False,
|
'Retry (mark non-rescued sectors "non-tried")': False,
|
||||||
'Reverse direction': False,
|
|
||||||
}
|
}
|
||||||
PANE_RATIOS = (
|
PANE_RATIOS = (
|
||||||
12, # SMART
|
12, # SMART
|
||||||
|
|
@ -998,8 +997,8 @@ def build_settings_menu(silent=True):
|
||||||
preset = _p
|
preset = _p
|
||||||
|
|
||||||
# Add default settings
|
# Add default settings
|
||||||
menu.add_action('Main Menu')
|
|
||||||
menu.add_action('Load Preset')
|
menu.add_action('Load Preset')
|
||||||
|
menu.add_action('Main Menu')
|
||||||
for name, details in cfg.ddrescue.DDRESCUE_SETTINGS['Default'].items():
|
for name, details in cfg.ddrescue.DDRESCUE_SETTINGS['Default'].items():
|
||||||
menu.add_option(name, details.copy())
|
menu.add_option(name, details.copy())
|
||||||
|
|
||||||
|
|
@ -1094,6 +1093,26 @@ def fstype_is_ok(path, map_dir=False):
|
||||||
return is_ok
|
return is_ok
|
||||||
|
|
||||||
|
|
||||||
|
def get_ddrescue_settings(main_menu, settings_menu):
|
||||||
|
"""Get ddrescue settings from menu selections, returns list."""
|
||||||
|
settings = []
|
||||||
|
|
||||||
|
# Check menu selections
|
||||||
|
for name, details in main_menu.toggles.items():
|
||||||
|
if 'Retry' in name and details['Selected']:
|
||||||
|
settings.append('--retrim')
|
||||||
|
settings.append('--try-again')
|
||||||
|
for name, details in settings_menu.options.items():
|
||||||
|
if details['Selected']:
|
||||||
|
if 'Value' in details:
|
||||||
|
settings.append(f'{name}={details["Value"]}')
|
||||||
|
else:
|
||||||
|
settings.append(name)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
return settings
|
||||||
|
|
||||||
|
|
||||||
def get_etoc():
|
def get_etoc():
|
||||||
"""Get EToC from ddrescue output, returns str."""
|
"""Get EToC from ddrescue output, returns str."""
|
||||||
delta = None
|
delta = None
|
||||||
|
|
@ -1351,6 +1370,14 @@ def mount_raw_image_macos(path):
|
||||||
def run_recovery(state, main_menu, settings_menu):
|
def run_recovery(state, main_menu, settings_menu):
|
||||||
"""Run recovery passes."""
|
"""Run recovery passes."""
|
||||||
atexit.register(state.save_debug_reports)
|
atexit.register(state.save_debug_reports)
|
||||||
|
attempted_recovery = False
|
||||||
|
auto_continue = False
|
||||||
|
|
||||||
|
# Get settings
|
||||||
|
for name, details in main_menu.toggles.items():
|
||||||
|
if 'Auto continue' in name and details['Selected']:
|
||||||
|
auto_continue = True
|
||||||
|
settings = get_ddrescue_settings(main_menu, settings_menu)
|
||||||
|
|
||||||
# Start SMART/Journal
|
# Start SMART/Journal
|
||||||
state.panes['SMART'] = tmux.split_window(
|
state.panes['SMART'] = tmux.split_window(
|
||||||
|
|
@ -1361,9 +1388,19 @@ def run_recovery(state, main_menu, settings_menu):
|
||||||
lines=4, vertical=True, cmd='journalctl --dmesg --follow',
|
lines=4, vertical=True, cmd='journalctl --dmesg --follow',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Check if retrying
|
||||||
|
if '--retrim' in settings:
|
||||||
|
for pair in state.block_pairs:
|
||||||
|
for name in pair.status.keys():
|
||||||
|
pair.status[name] = 'Pending'
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
# Run ddrescue
|
# Run ddrescue
|
||||||
state.update_progress_pane('Active')
|
state.update_progress_pane('Active')
|
||||||
|
print('ddrescue settings:')
|
||||||
|
for arg in settings:
|
||||||
|
print(f' {arg}')
|
||||||
|
std.pause('Run ddrescue pass?')
|
||||||
|
|
||||||
# Stop SMART/Journal
|
# Stop SMART/Journal
|
||||||
for pane in ('SMART', 'Journal'):
|
for pane in ('SMART', 'Journal'):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue