Как я копирую по разделу, игнорирующему ошибки?

У меня был диск с большим количеством поверхностных ошибок, которые я использовал до пары несколько дней назад, когда я получил свой новый ssd. Я хочу знать, как я мог полностью скопировать по своему домашнему разделу, но проигнорировать все ошибки при выполнении так, поскольку он, вероятно, имеет несколько сотен поврежденных кластеров в начале, и буквально потребовались бы часы, просто нажимающие, "игнорируют" на gparted. Парни, я имею как 85 ГБ там, которые были бы абсолютной болью, чтобы воссоздать или вручную скопировать все файлы и исправить полномочия.

1
задан 18 September 2014 в 23:17

3 ответа

A. Скопировать файлы в "плоский" каталог

Если для сценария возможно создать, по крайней мере, список файлов, но это должно проигнорировать проблемы, которые могли бы произойти в копировании их, это должно работать.

В случае дубликатов это сохранит дубликаты как duplicate_1_<filename>, duplicate_2 _' и т.д.

Я использовал:

try
    <copy_command>
except Exception
    pass

Который покрывает самый широкий диапазон ошибок.

Сценарий:

#!/usr/bin/env python3

import shutil
import os

sourcedir = "/path/to/source"
dest_dir = "/path/to/destination"

for root, dirs, files in os.walk(sourcedir):
    for name in files:
        subject = root+"/"+name
        n = 1; name_orig = name
        while os.path.exists(dest_dir+"/"+name):
            name = "duplicate_"+str(n)+"_"+name_orig
            n = n+1
        try:
            newfile = dest_dir+"/"+name
            shutil.copy(subject, newfile)
        except Exception:
            pass

Скопируйте его в пустой файл, сохраните его как giveit_ashot.py и набор sourcedir и место назначения.

Выполните его:

python3 /path/to/giveit_ashot.py

B. Если структура каталогов важна

затем используйте сценарий ниже, он сначала пробует к (пере-), создают каталоги (вершина - вниз), затем копирует файлы в структуру как можно больше. Снова: должно, по крайней мере, быть возможно создать файл / список каталога.

#!/usr/bin/env python3

import shutil
import os

sourcedir = "/path/to/source"
dest_dir = "/path/to/destination"

dirdata = []
filedata = []

for root, dirs, files in os.walk(sourcedir):
    for dir in dirs:
        absolute = root+"/"+dir
        relative = absolute.replace(sourcedir, "")
        dirdata.append([absolute, dest_dir+relative, len(absolute.split("/"))])
    for file in files:
        abs_file = root+"/"+file
        rel_file = abs_file.replace(sourcedir, "") # source
        filedata.append((abs_file, dest_dir+rel_file)) # destination

dirdata.sort(key=lambda x: x[2])

for item in dirdata:
    try:
        if not os.path.exists(item[1]):
            os.mkdir(item[1])
    except Exception:
        pass

for item in filedata:
    try:
        shutil.copy(item[0], item[1])
    except Exception:
        pass
2
ответ дан 11 November 2019 в 09:32

gparted предполагают, что Вы создаете/форматируете раздел. Не тот у Вас есть свой дом, я ожидаю.

, Если раздел уже создается, попытайтесь отформатировать с:

mkfs.ext4 -c  /dev/sdXX

Удостоверяются, что поместили право /dev/sdXX.

, При попытке скопировать от плохого раздела до хорошего, я не знаю, как cp вел бы себя перед лицом ошибок IO.

0
ответ дан 11 November 2019 в 09:32

Необходимо принять различные меры для

  1. , фиксируют сбойные блоки (некоторые файловые системы, как ext4, и ext3 позволяют это, информацию в man e2fsck)
  2. ошибки игнорирования копирования (начальный вопрос), например, с rsync -a --ignore-errors /path/to/mountpoint/of/broken/device/ /path/to/folder/on/working/device/

комментарий съемки общим планом А: Вы могли бы хотеть создать изображение раздела с dd, прежде чем Вы перезапишете его или выбросите диск (новые средства восстановления могли бы подойти в некоторое время и вытащить больше данных из диска, чем текущий и подсказки (включенная шахта), Вы добираетесь для восстановления файлов, могло бы просто быть неправильным), например, сделайте sudo dd if=/dev/sdxY | pigz -p 8 | sudo tee /path/to/a/file/on/a/working/disk.img.gz для сжатого изображения.

0
ответ дан 11 November 2019 в 09:32

Другие вопросы по тегам:

Похожие вопросы: