сила, копирующая поврежденный корневой каталог

Я не уверен, отвечает ли это на Ваш вопрос, но pwdx мог дать Вам текущий рабочий каталог любого процесса.

Как это:

pwdx <PID>

Вы могли также сделать то, что Ulrich Schwarz сказал и выполнил

ls -l /proc/PID/cwd
7
22.01.2012, 21:55
5 ответов

Я записал немного сценария для этого

#!/bin/bash
echo "copying from $1"

find $1 -type f -print0 | while read -d $'\0' -r file ; do
    echo Processing "$file"
    target="$2""$file"
    if (test -f "$target") then
        echo File Exists:  "$target"
    else
        echo copying to "$target"
        targetDir=`dirname "$target"`

        if (! [ -d "$targetDir" ]) then
            mkdir "$targetDir"
        fi

        ddrescue -e0 -r0 -v -n "$file" "$target"
        if ([ $? -ne 0 ]) then
            echo Copy failed, deleting "$target"
            rm -f "$target"
        fi
    fi
done
3
27.01.2020, 20:17

Если Вы имеете достаточно комнаты на своем внешнем диске, выполняете полную копию раздела, перескакивая через неисправимые секторы. Затем сделайте копию копии и вызов fsck на этом.

Для копии раздела от сбойного диска использовать myrescue, или если это не достаточно гибко ddrescue или dd_rescue. Все эти инструменты перескакивают через нечитабельные регионы или попытку неоднократно читать их; корректируйтесь в зависимости от того, имеют ли повторные чтения шанс работы (например, оптические среды или дискеты), или на обратном изнашивают сбойный диск раньше (например, большинство отказов жесткого диска). См. также сохраняющие данные от сбойного диска, Как восстановить данные из плохой SD-карты?

sudo myrescue /dev/sda42 >/media/backup/home.raw
cp /media/backup/home.raw /media/backup/home.recovering
/sbin/fsck -f /media/backup/home.recovering
sudo mount -o loop /media/backup/home.recovering /mnt
cp -a /mnt /media/backup/home.saved
4
27.01.2020, 20:17

Другое решение:

find /home/user -type f -print0 | xargs -0 -JXXX -n1 rsync --relative -lptgoHv XXX /external-disk

find генерирует список файлов и xargs вызовы rsync с ними по одному. - родственник удостоверяется, что Вы получаете дерево на внешнем диске вместо плоского каталога, не бросайте тот аргумент rsync.

1
27.01.2020, 20:17
  • 1
    спасибо. хотите объяснить-JXXX и другие XXX в конце?спасибо. Это реально XXX, или я должен поместить что-то еще там? –  SpaceDog 23.01.2012, 16:30
  • 2
    JXXX говорит xargs заменять XXX в списке аргумента передало rsync с именем файла из списка find обеспечивает. Без-J xargs поместил бы имя файла в конце списка аргумента. –  Kyle Jones 23.01.2012, 17:11
  • 3
    я попробовал это и это говорит "ошибочный недействительный аргумент-JXXX" –  SpaceDog 23.01.2012, 22:40
  • 4
    Ничего себе, xargs достаточно взрослое для не принятия-J. Хорошо, попробовать -IXXX вместо -JXXX ; это должно работать с тем же путем. –  Kyle Jones 27.01.2012, 02:44
  • 5
    не, вводя человека xargs, я вижу, что-J является опцией, но это все еще дает мне это сообщение. Я попробую тот. –  SpaceDog 28.01.2012, 17:44

использовать cpio -ivd -H tar команда

в странице справочника говорится это

Это получит файлы, заархивированные в файле directory.cpio, и разместит их в существующий каталог. '-i' опция извлекает архив, и '-v' показывает имена файлов, поскольку они извлечены. Если Вы имеете дело с заархивированным деревом каталогов, необходимо использовать '-d' опция создать каталоги по мере необходимости,

- H для формата

посмотрите это и это

0
27.01.2020, 20:17
  • 1
    не, я хочу создать tar из своего корневого каталога, но каталог имеет загрузки поврежденных файлов. Я хочу, чтобы tar скопировал все файлы, которые хороши и создают архив. –  SpaceDog 23.01.2012, 00:51

Во-первых, использовать rsync -aHv --- rsync -vfh не имеет никакого смысла для того, что Вы пытаетесь сделать.

rsync имеет - существующий игнорированием флаг, который можно использовать. Выполненный rsync -aHv --ignore-existing пока это не выходит с ошибкой ввода-вывода. Отметьте название файла, который перестал работать, и создайте пустую версию его на внешнем диске, где это было бы скопировано, если бы rsync работал. Повторно выполните команду rsync, и - игнорируют - существующий, заставит это не пытаться скопировать файл, который перестал работать. Надо надеяться, rsync скопирует все остальное, но если он останавливается снова, повторите этот процесс. Повторитесь до rsync выполнения к завершению.

1
27.01.2020, 20:17
  • 1
    благодарит, но это будет болью, потому что существуют сотни поврежденных файлов... :( –  SpaceDog 23.01.2012, 00:49

Теги

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