buộc sao chép một thư mục nhà bị hỏng


7

Tôi có một thư mục nhà trong một đĩa có rất nhiều tập tin bị hỏng. Tôi đang cố gắng lưu hầu hết các tập tin có thể. Tôi đang cố gắng tạo một bản sao lưu của thư mục nhà của tôi trên một ổ đĩa ngoài bằng cách sử dụng

tar -cvf backup /home/myHome

và cũng đã thử

rsync -vfh /home/myHome /media/backup

Cả hai phương pháp dừng lại khi họ tìm thấy một tập tin bị hỏng. Có cách nào để buộc người này hay người kia tiếp tục sao chép và bỏ qua các tệp xấu, sao chép mọi thứ có thể sao chép và hiển thị cho tôi nhật ký ở cuối các tệp không được sao chép không?

Cảm ơn.


Tôi không có đủ thời gian để trả lời đầy đủ, nhưng cách tiếp cận của tôi sẽ là chỉ đọc phân vùng chứa / home và sau đó giữ một bản sao hình ảnh của phân vùng trong một tệp với dd conv=noerror if=/dev/sdXY of=/media/backup/sdXY.dump. Sau đó, bạn có thể fscktập tin hình ảnh và gắn kết với nó -o loop.
Forcefsck

Câu trả lời:


3

Tôi đã viết một kịch bản nhỏ cho điều đó

#!/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

4

Nếu bạn có đủ chỗ trên ổ đĩa ngoài, hãy thực hiện một bản sao đầy đủ của phân vùng, bỏ qua các khu vực không thể phục hồi. Sau đó tạo một bản sao của bản sao và gọi fscknó.

Đối với bản sao của phân vùng từ ổ đĩa bị lỗi, hãy sử dụng myrescuehoặc nếu điều đó không đủ linh hoạt ddrescuehoặc dd_rescue. Tất cả các công cụ này bỏ qua các vùng không thể đọc được hoặc cố gắng đọc chúng nhiều lần; điều chỉnh tùy thuộc vào việc đọc lặp lại có cơ hội hoạt động hay không (ví dụ: phương tiện quang học hoặc đĩa mềm) hoặc ngược lại làm hao mòn ổ đĩa sớm hơn (ví dụ như hầu hết các lỗi đĩa cứng). Xem thêm lưu dữ liệu từ một ổ đĩa bị lỗi , Làm thế nào để khôi phục dữ liệu từ thẻ SD xấu?

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

1

Đầu tiên, sử dụng rsync -aHv--- rsync -vfhkhông có ý nghĩa cho những gì bạn đang cố gắng làm.

rsync có một cờ - hiện diện mà bạn có thể sử dụng. Chạy rsync -aHv --ignore-existingcho đến khi nó thoát với lỗi I / O. Lưu ý tên của tệp không thành công và tạo một phiên bản trống của nó trên ổ đĩa ngoài nơi nó sẽ được sao chép nếu rsync hoạt động. Chạy lại lệnh rsync và --ignore-tồn tại sẽ khiến nó không cố sao chép tệp bị lỗi. Hy vọng rsync sẽ sao chép mọi thứ khác, nhưng nếu nó dừng lại, hãy lặp lại quy trình này. Lặp lại cho đến khi rsync chạy đến khi hoàn thành.


cảm ơn, nhưng đây sẽ là một nỗi đau vì có hàng trăm tệp bị hỏng ... :(
DuckDucking

1

Một giải pháp khác nhau:

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

findtạo một danh sách các tệp và xargscác cuộc gọi rsyncvới chúng cùng một lúc. --relative đảm bảo bạn lấy một cây trên đĩa bên ngoài thay vì thư mục phẳng, vì vậy đừng bỏ qua đối số đó rsync.


cảm ơn. quan tâm để giải thích -JXXX và XXX khác ở cuối? cảm ơn. Đây có phải là XXX thật hay tôi cần đặt thứ gì khác ở đó?
DuckDucking

-JXXX yêu xargscầu thay thế XXX trong danh sách arg được truyền rsyncbằng tên tệp từ danh sách findđang cung cấp. Nếu không có -J xargssẽ đặt tên tệp ở cuối danh sách arg.
Kyle Jones

Tôi đã thử điều đó và nó báo "lỗi đối số không hợp lệ -JXXX"
DuckDucking

Wow, một xargs đủ tuổi để không chấp nhận -J. OK, hãy thử -IXXXthay vì -JXXX; nó nên hoạt động với cùng một cách
Kyle Jones

không, gõ man xargs tôi thấy rằng -J là một tùy chọn, nhưng nó vẫn cho tôi thông báo này. Tôi sẽ thử cái đó
DuckDucking

0

sử dụng cpio -ivd -H tarlệnh

trang đàn ông nói rằng

Điều này sẽ lấy các tệp được lưu trữ trong thư mục tệp.cpio và đặt chúng trong thư mục hiện tại. Tùy chọn '-i' trích xuất kho lưu trữ và '-v' hiển thị tên tệp khi chúng được trích xuất. Nếu bạn đang xử lý một cây thư mục được lưu trữ, bạn cần sử dụng tùy chọn '-d' để tạo các thư mục khi cần thiết,

-H là định dạng

xem cái nàycái này


không, tôi muốn tạo một tar từ thư mục chính của tôi, nhưng thư mục có vô số tệp bị hỏng. Tôi muốn tar để sao lưu tất cả các tập tin tốt và tạo một kho lưu trữ.
DuckDucking
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.