У меня был диск с большим количеством поверхностных ошибок, которые я использовал до пары несколько дней назад, когда я получил свой новый ssd. Я хочу знать, как я мог полностью скопировать по своему домашнему разделу, но проигнорировать все ошибки при выполнении так, поскольку он, вероятно, имеет несколько сотен поврежденных кластеров в начале, и буквально потребовались бы часы, просто нажимающие, "игнорируют" на gparted. Парни, я имею как 85 ГБ там, которые были бы абсолютной болью, чтобы воссоздать или вручную скопировать все файлы и исправить полномочия.
Если для сценария возможно создать, по крайней мере, список файлов, но это должно проигнорировать проблемы, которые могли бы произойти в копировании их, это должно работать.
В случае дубликатов это сохранит дубликаты как 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
затем используйте сценарий ниже, он сначала пробует к (пере-), создают каталоги (вершина - вниз), затем копирует файлы в структуру как можно больше. Снова: должно, по крайней мере, быть возможно создать файл / список каталога.
#!/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
gparted
предполагают, что Вы создаете/форматируете раздел. Не тот у Вас есть свой дом, я ожидаю.
, Если раздел уже создается, попытайтесь отформатировать с:
mkfs.ext4 -c /dev/sdXX
Удостоверяются, что поместили право /dev/sdXX
.
, При попытке скопировать от плохого раздела до хорошего, я не знаю, как cp
вел бы себя перед лицом ошибок IO.
Необходимо принять различные меры для
man e2fsck
) 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
для сжатого изображения.