Build real ddrescue cmd for Cloning or Imaging
* --force is only used for cloning
This commit is contained in:
parent
d09664bb7d
commit
7597394d61
1 changed files with 23 additions and 14 deletions
|
|
@ -269,7 +269,7 @@ def menu_clone(source_path, dest_path):
|
||||||
|
|
||||||
# Main menu
|
# Main menu
|
||||||
build_outer_panes(source, dest)
|
build_outer_panes(source, dest)
|
||||||
menu_main(source)
|
menu_main(source, dest)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
run_program(['losetup', '-D'])
|
run_program(['losetup', '-D'])
|
||||||
|
|
@ -330,14 +330,14 @@ def menu_image(source_path, dest_path):
|
||||||
|
|
||||||
# Main menu
|
# Main menu
|
||||||
build_outer_panes(source, dest)
|
build_outer_panes(source, dest)
|
||||||
menu_main(source)
|
menu_main(source, dest)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
run_program(['losetup', '-D'])
|
run_program(['losetup', '-D'])
|
||||||
run_program(['tmux', 'kill-window'])
|
run_program(['tmux', 'kill-window'])
|
||||||
exit_script()
|
exit_script()
|
||||||
|
|
||||||
def menu_main(source):
|
def menu_main(source, dest):
|
||||||
"""Main menu is used to set ddrescue settings."""
|
"""Main menu is used to set ddrescue settings."""
|
||||||
title = '{GREEN}ddrescue TUI: Main Menu{CLEAR}\n\n'.format(**COLORS)
|
title = '{GREEN}ddrescue TUI: Main Menu{CLEAR}\n\n'.format(**COLORS)
|
||||||
title += '{BLUE}Current pass: {CLEAR}'.format(**COLORS)
|
title += '{BLUE}Current pass: {CLEAR}'.format(**COLORS)
|
||||||
|
|
@ -411,7 +411,7 @@ def menu_main(source):
|
||||||
# Run ddrecue
|
# Run ddrecue
|
||||||
auto_run = True
|
auto_run = True
|
||||||
while auto_run:
|
while auto_run:
|
||||||
run_ddrescue(source, settings)
|
run_ddrescue(source, dest, settings)
|
||||||
auto_run = False
|
auto_run = False
|
||||||
if current_pass == 'Done':
|
if current_pass == 'Done':
|
||||||
# "Pass Done" i.e. all passes done
|
# "Pass Done" i.e. all passes done
|
||||||
|
|
@ -675,7 +675,7 @@ def menu_settings(source):
|
||||||
elif selection == 'M':
|
elif selection == 'M':
|
||||||
break
|
break
|
||||||
|
|
||||||
def run_ddrescue(source, settings):
|
def run_ddrescue(source, dest, settings):
|
||||||
"""Run ddrescue pass."""
|
"""Run ddrescue pass."""
|
||||||
current_pass = source['Current Pass']
|
current_pass = source['Current Pass']
|
||||||
|
|
||||||
|
|
@ -698,10 +698,10 @@ def run_ddrescue(source, settings):
|
||||||
|
|
||||||
# Set device(s) to clone/image
|
# Set device(s) to clone/image
|
||||||
source[current_pass]['Status'] = 'Working'
|
source[current_pass]['Status'] = 'Working'
|
||||||
devs = [source]
|
source_devs = [source]
|
||||||
if source['Children']:
|
if source['Children']:
|
||||||
# Use only selected child devices
|
# Use only selected child devices
|
||||||
devs = source['Children']
|
source_devs = source['Children']
|
||||||
|
|
||||||
# Set heights
|
# Set heights
|
||||||
## NOTE: 12/33 is based on min heights for SMART/ddrescue panes (12+22+1sep)
|
## NOTE: 12/33 is based on min heights for SMART/ddrescue panes (12+22+1sep)
|
||||||
|
|
@ -718,20 +718,29 @@ def run_ddrescue(source, settings):
|
||||||
'ddrescue-tui-smart-display', source['Dev Path'])
|
'ddrescue-tui-smart-display', source['Dev Path'])
|
||||||
|
|
||||||
# Start pass for each selected device
|
# Start pass for each selected device
|
||||||
for dev in devs:
|
for s_dev in source_devs:
|
||||||
if dev[current_pass]['Done']:
|
if s_dev[current_pass]['Done']:
|
||||||
# Move to next device
|
# Move to next device
|
||||||
continue
|
continue
|
||||||
source['Current Device'] = dev['Dev Path']
|
source['Current Device'] = s_dev['Dev Path']
|
||||||
dev[current_pass]['Status'] = 'Working'
|
s_dev[current_pass]['Status'] = 'Working'
|
||||||
update_progress(source)
|
update_progress(source)
|
||||||
|
|
||||||
|
# Set ddrescue cmd
|
||||||
|
if source['Type'] == 'Clone':
|
||||||
|
cmd = ['ddrescue', *settings, '--force',
|
||||||
|
s_dev['Dev Path'], dest['Dev Path'], s_dev['Dest Paths']['Map']]
|
||||||
|
else:
|
||||||
|
cmd = ['ddrescue', *settings,
|
||||||
|
s_dev['Dev Path'], s_dev['Dest Paths']['Image'],
|
||||||
|
s_dev['Dest Paths']['Map']]
|
||||||
|
|
||||||
# Start ddrescue
|
# Start ddrescue
|
||||||
try:
|
try:
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('Current dev: {}'.format(dev['Dev Path']))
|
print_info('Current dev: {}'.format(s_dev['Dev Path']))
|
||||||
ddrescue_proc = popen_program(['./__choose_exit', *settings])
|
ddrescue_proc = popen_program(['./__choose_exit', *cmd])
|
||||||
#ddrescue_proc = popen_program(['./__exit_ok', *settings])
|
#ddrescue_proc = popen_program(['./__exit_ok', *cmd])
|
||||||
ddrescue_proc.wait()
|
ddrescue_proc.wait()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
# Catch user abort
|
# Catch user abort
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue